aboutsummaryrefslogtreecommitdiff
path: root/widgets
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-03-10 21:15:24 -0400
committerDrew DeVault <sir@cmpwn.com>2019-03-10 21:15:24 -0400
commitb60999c39e11bf4d1e236f2b10a2f895b44d23fb (patch)
tree8ce8023277815a7d1f25dc7c48fa910c698d5b1b /widgets
parent62862d8a9e7f684bc3ff4e9ea115678ff44d8644 (diff)
Start building out command subsystem
Diffstat (limited to 'widgets')
-rw-r--r--widgets/account.go10
-rw-r--r--widgets/aerc.go14
-rw-r--r--widgets/directories.go37
3 files changed, 54 insertions, 7 deletions
diff --git a/widgets/account.go b/widgets/account.go
index 3848bbf..dc339cb 100644
--- a/widgets/account.go
+++ b/widgets/account.go
@@ -75,7 +75,7 @@ func NewAccountView(conf *config.AccountConfig,
for {
msg := <-worker.Messages
msg = worker.ProcessMessage(msg)
- // TODO: dispatch to appropriate handlers
+ acct.onMessage(msg)
}
}()
@@ -164,3 +164,11 @@ func (acct *AccountView) connected(msg types.WorkerMessage) {
Color(tcell.ColorRed, tcell.ColorDefault)
}
}
+
+func (acct *AccountView) Directories() *DirectoryList {
+ return acct.dirlist
+}
+
+func (acct *AccountView) onMessage(msg types.WorkerMessage) {
+ // TODO
+}
diff --git a/widgets/aerc.go b/widgets/aerc.go
index 26dc5f2..bf545f9 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -1,7 +1,6 @@
package widgets
import (
- "fmt"
"log"
"github.com/gdamore/tcell"
@@ -13,11 +12,14 @@ import (
type Aerc struct {
accounts map[string]*AccountView
+ cmd func(cmd string) error
grid *libui.Grid
tabs *libui.Tabs
}
-func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
+func NewAerc(conf *config.AercConfig, logger *log.Logger,
+ cmd func(cmd string) error) *Aerc {
+
tabs := libui.NewTabs()
mainGrid := libui.NewGrid().Rows([]libui.GridSpec{
@@ -37,12 +39,13 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
aerc := &Aerc{
accounts: make(map[string]*AccountView),
+ cmd: cmd,
grid: mainGrid,
tabs: tabs,
}
for _, acct := range conf.Accounts {
- view := NewAccountView(&acct, logger, aerc.RunCommand)
+ view := NewAccountView(&acct, logger, cmd)
aerc.accounts[acct.Name] = view
tabs.Add(view, acct.Name)
}
@@ -73,7 +76,6 @@ func (aerc *Aerc) Event(event tcell.Event) bool {
return acct.Event(event)
}
-func (aerc *Aerc) RunCommand(cmd string) error {
- // TODO
- return fmt.Errorf("TODO: execute '%s'", cmd)
+func (aerc *Aerc) SelectedAccount() *AccountView {
+ return aerc.accounts[aerc.tabs.Tabs[aerc.tabs.Selected].Name]
}
diff --git a/widgets/directories.go b/widgets/directories.go
index 11fe2d6..ae31d29 100644
--- a/widgets/directories.go
+++ b/widgets/directories.go
@@ -103,3 +103,40 @@ func (dirlist *DirectoryList) Draw(ctx *ui.Context) {
row++
}
}
+
+func (dirlist *DirectoryList) nextPrev(delta int) {
+ for i, dir := range dirlist.dirs {
+ if dir == dirlist.selected {
+ var j int
+ ndirs := len(dirlist.dirs)
+ for j = i + delta; j != i; j += delta {
+ if j < 0 {
+ j = ndirs - 1
+ }
+ if j >= ndirs {
+ j = 0
+ }
+ name := dirlist.dirs[j]
+ if len(dirlist.conf.Folders) > 1 && name != dirlist.selected {
+ idx := sort.SearchStrings(dirlist.conf.Folders, name)
+ if idx == len(dirlist.conf.Folders) ||
+ dirlist.conf.Folders[idx] != name {
+
+ continue
+ }
+ }
+ break
+ }
+ dirlist.Select(dirlist.dirs[j])
+ break
+ }
+ }
+}
+
+func (dirlist *DirectoryList) Next() {
+ dirlist.nextPrev(1)
+}
+
+func (dirlist *DirectoryList) Prev() {
+ dirlist.nextPrev(-1)
+}