From b60999c39e11bf4d1e236f2b10a2f895b44d23fb Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sun, 10 Mar 2019 21:15:24 -0400 Subject: Start building out command subsystem --- widgets/account.go | 10 +++++++++- widgets/aerc.go | 14 ++++++++------ widgets/directories.go | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 7 deletions(-) (limited to 'widgets') 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) +} -- cgit v1.2.3