diff --git a/color.go b/color.go index e1f6085..b0a1b34 100644 --- a/color.go +++ b/color.go @@ -11,7 +11,7 @@ var ( "Gruvbox": { "bg": tcell.NewHexColor(0x282828), "fg": tcell.NewHexColor(0xebdbb2), - "gray": tcell.NewHexColor(0x928374), + "gray": tcell.NewHexColor(0x665c54), "red": tcell.NewHexColor(0xfb4934), "green": tcell.NewHexColor(0xfabd2f), "yellow": tcell.NewHexColor(0xfabd2f), @@ -38,12 +38,12 @@ type Colors struct { foreground_color tcell.Color border_color tcell.Color text_color tcell.Color - title_color tcell.Color selected_color tcell.Color + prefix_color tcell.Color } type Window struct { - src Colors + src Colors dst Colors } @@ -59,9 +59,9 @@ func (w *Window) color_init() { } w.src.border_color = Themes[theme]["red"] w.src.foreground_color = Themes[theme]["fg"] - w.src.title_color = Themes[theme]["yellow"] w.src.selected_color = Themes[theme]["gray"] + w.src.prefix_color = Themes[theme]["yellow"] w.dst.foreground_color = Themes[theme]["fg"] w.dst.border_color = Themes[theme]["blue"] - w.dst.title_color = Themes[theme]["cyan"] + w.dst.prefix_color = Themes[theme]["yellow"] } diff --git a/main.go b/main.go index 6afbe20..3835941 100644 --- a/main.go +++ b/main.go @@ -21,7 +21,7 @@ var ( func main() { translator.src_lang = "English" - translator.dest_lang = "Chinese (Traditional)" + translator.dst_lang = "Chinese (Traditional)" // result, _ := translator.Translate("Hello world\nApple\nbumper") // fmt.Println(result) window.color_init() @@ -39,7 +39,7 @@ func main() { AddItem(nil, 0, 1, false) pages.AddPage("translate_page", translate_page, true, true) - pages.AddPage("lang_page", lang_page, true, true) + pages.AddPage("lang_page", lang_page, true, false) if err := app.SetRoot(pages, true). EnableMouse(true).Run(); err != nil { diff --git a/translator.go b/translator.go index 4fe6262..862f405 100644 --- a/translator.go +++ b/translator.go @@ -19,7 +19,7 @@ const ( type Translator struct { src_lang string - dest_lang string + dst_lang string } func (t Translator) Translate(message string) (string, error) { @@ -29,7 +29,7 @@ func (t Translator) Translate(message string) (string, error) { url_str := fmt.Sprintf( api_url, Lang_Code[t.src_lang], - Lang_Code[t.dest_lang], + Lang_Code[t.dst_lang], url.QueryEscape(message), ) res, err := http.Get(url_str) diff --git a/ui.go b/ui.go index 03555fb..95063e5 100644 --- a/ui.go +++ b/ui.go @@ -5,10 +5,14 @@ import ( ) func ui_init() { + // page + translate_page.SetInputCapture(TranslatePageHandler) + + // box src_box.SetBorder(true). SetTitle(translator.src_lang). SetBorderColor(window.src.border_color). - SetTitleColor(window.src.title_color). + SetTitleColor(window.src.border_color). SetBackgroundColor(window.src.background_color) src_box.SetTextStyle(tcell.StyleDefault. Background(window.src.background_color). @@ -16,26 +20,97 @@ func ui_init() { src_box.SetSelectedStyle(tcell.StyleDefault. Background(window.src.selected_color). Foreground(window.src.foreground_color)) - src_box.SetInputCapture(InputHandle) + src_box.SetInputCapture(SrcBoxHandler) dst_box.SetBorder(true). - SetTitle(translator.dest_lang). + SetTitle(translator.dst_lang). SetBorderColor(window.dst.border_color). - SetTitleColor(window.dst.title_color). + SetTitleColor(window.dst.border_color). SetBackgroundColor(window.dst.background_color) dst_box.SetTextColor(window.dst.foreground_color) - src_dropdown.SetOptions(Lang, nil) - dst_dropdown.SetOptions(Lang, nil) - // src_dropdown.SetOptions([]string{"a", "b"}, nil) - // dst_dropdown.SetOptions([]string{"a", "b"}, nil) + // dropdown + src_dropdown.SetOptions(Lang, nil). + SetCurrentOption(IndexOf(translator.src_lang, Lang)) + src_dropdown.SetListStyles(tcell.StyleDefault. + Background(window.src.background_color). + Foreground(window.src.foreground_color), + tcell.StyleDefault. + Background(window.src.selected_color). + Foreground(window.src.prefix_color)) + src_dropdown.SetFieldBackgroundColor(window.src.selected_color). + SetFieldTextColor(window.src.foreground_color). + SetPrefixTextColor(window.dst.prefix_color) src_dropdown.SetBorder(true). - SetTitle("Select an option (hit Enter): ") + SetTitle(translator.src_lang). + SetBackgroundColor(window.src.background_color). + SetBorderColor(window.src.border_color). + SetTitleColor(window.src.border_color) + src_dropdown.SetSelectedFunc(SrcSelected) + src_dropdown.SetDoneFunc(SrcDropDownHandler) + + dst_dropdown.SetOptions(Lang, nil). + SetCurrentOption(IndexOf(translator.dst_lang, Lang)) + dst_dropdown.SetListStyles(tcell.StyleDefault. + Background(window.src.background_color). + Foreground(window.src.foreground_color), + tcell.StyleDefault. + Background(window.src.selected_color). + Foreground(window.src.prefix_color)) + dst_dropdown.SetFieldBackgroundColor(window.src.selected_color). + SetFieldTextColor(window.src.foreground_color). + SetPrefixTextColor(window.dst.prefix_color) dst_dropdown.SetBorder(true). - SetTitle("Select an option (hit Enter): ") + SetTitle(translator.dst_lang). + SetBackgroundColor(window.dst.background_color). + SetBorderColor(window.dst.border_color). + SetTitleColor(window.dst.border_color) + dst_dropdown.SetSelectedFunc(DstSelected) + dst_dropdown.SetDoneFunc(DstDropDownHandler) } -func InputHandle(event *tcell.EventKey) *tcell.EventKey { +func TranslatePageHandler(event *tcell.EventKey) *tcell.EventKey { + key := event.Key() + + switch key { + case tcell.KeyEsc: + pages.ShowPage("lang_page") + } + + return event +} + +func SrcSelected(text string, index int) { + translator.src_lang = text + src_box.SetTitle(text) + src_dropdown.SetTitle(text) +} + +func DstSelected(text string, index int) { + translator.dst_lang = text + dst_box.SetTitle(text) + dst_dropdown.SetTitle(text) +} + +func SrcDropDownHandler(key tcell.Key) { + switch key { + case tcell.KeyTAB: + app.SetFocus(dst_dropdown) + case tcell.KeyEsc: + pages.HidePage("lang_page") + } +} + +func DstDropDownHandler(key tcell.Key) { + switch key { + case tcell.KeyTAB: + app.SetFocus(src_dropdown) + case tcell.KeyEsc: + pages.HidePage("lang_page") + } +} + +func SrcBoxHandler(event *tcell.EventKey) *tcell.EventKey { key := event.Key() // panic(event.Name()) @@ -52,7 +127,7 @@ func InputHandle(event *tcell.EventKey) *tcell.EventKey { case tcell.KeyCtrlN: translator.PlaySound(translator.src_lang, src_box.GetText()) case tcell.KeyCtrlP: - translator.PlaySound(translator.dest_lang, dst_box.GetText(false)) + translator.PlaySound(translator.dst_lang, dst_box.GetText(false)) case tcell.KeyCtrlT: dst_box.SetText("TTT") case tcell.KeyCtrlS: diff --git a/utils.go b/utils.go new file mode 100644 index 0000000..1f10292 --- /dev/null +++ b/utils.go @@ -0,0 +1,10 @@ +package main + +func IndexOf(candidate string, arr []string) int { + for index, element := range arr { + if element == candidate { + return index + } + } + return -1 +}