From 89624edcba0fe835ab1931adc3db02967c0e64fa Mon Sep 17 00:00:00 2001 From: Anis Ahmad Date: Sat, 30 May 2020 13:17:20 +0600 Subject: [PATCH] Organized approach to handle shortcuts based on currently focused panel --- app/cli.go | 25 ++++++++++++------------- app/projects.go | 9 +++++++++ app/task_detail.go | 15 +++++++++++++-- app/tasks.go | 9 +++++++++ 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/app/cli.go b/app/cli.go index 9fba393..d73b71c 100644 --- a/app/cli.go +++ b/app/cli.go @@ -74,24 +74,23 @@ func setKeyboardShortcuts(projectPane *tview.Flex, taskPane *tview.Flex) *tview. if ignoreKeyEvt() { return event } + + // Handle based on current focus. Handlers may modify event + switch { + case projectPane.HasFocus(): + event = handleProjectPaneShortcuts(event) + case taskPane.HasFocus(): + event = handleTaskPaneShortcuts(event) + case detailPane.HasFocus(): + event = handleDetailPaneShortcuts(event) + } + + // Global shortcuts switch event.Rune() { case 'p': app.SetFocus(projectPane) case 't': app.SetFocus(taskPane) - case 'n': - if projectPane.HasFocus() { - app.SetFocus(newProject) - } else if taskPane.HasFocus() { - app.SetFocus(newTask) - } - case 'e': - if detailPane.HasFocus() { - activateEditor() - } else { - // @TODO : Remove - showMessage(reflect.TypeOf(app.GetFocus()).String()) - } case 'f': // @TODO : Remove showMessage(reflect.TypeOf(app.GetFocus()).String()) diff --git a/app/projects.go b/app/projects.go index dc8c0e0..1348fb6 100644 --- a/app/projects.go +++ b/app/projects.go @@ -76,3 +76,12 @@ func loadProject(idx int) { contents.RemoveItem(detailPane) } + +func handleProjectPaneShortcuts(event *tcell.EventKey) *tcell.EventKey { + switch event.Rune() { + case 'n': + app.SetFocus(newProject) + } + + return event +} diff --git a/app/task_detail.go b/app/task_detail.go index f989602..08cceb7 100644 --- a/app/task_detail.go +++ b/app/task_detail.go @@ -146,11 +146,11 @@ func setTaskDate(unixDate int64, update bool) { if due.Before(time.Now()) { color = "red" } - taskDateDisplay.SetText(fmt.Sprintf("Due: [%s]%s", color, humanDate)) + taskDateDisplay.SetText(fmt.Sprintf("[::u]D[::-]ue: [%s]%s", color, humanDate)) taskDate.SetText(due.Format(dateLayoutISO)) } else { taskDate.SetText("") - taskDateDisplay.SetText("Due: [::d]Not Set") + taskDateDisplay.SetText("[::u]D[::-]ue: [::d]Not Set") } } @@ -210,3 +210,14 @@ func deactivateEditor() { taskDetailView.SetBorderColor(tcell.ColorLightSlateGray) app.SetFocus(detailPane) } + +func handleDetailPaneShortcuts(event *tcell.EventKey) *tcell.EventKey { + switch event.Rune() { + case 'e': + activateEditor() + case 'd': + app.SetFocus(taskDate) + } + + return event +} diff --git a/app/tasks.go b/app/tasks.go index a0422dd..5016291 100644 --- a/app/tasks.go +++ b/app/tasks.go @@ -78,3 +78,12 @@ func makeTaskListingTitle(task model.Task) string { } return fmt.Sprintf("[%s]%s %s", getTaskTitleColor(task), checkbox, task.Title) } + +func handleTaskPaneShortcuts(event *tcell.EventKey) *tcell.EventKey { + switch event.Rune() { + case 'n': + app.SetFocus(newTask) + } + + return event +}