v/GTT
1
0
mirror of https://github.com/eeeXun/GTT.git synced 2025-05-21 01:50:36 -07:00
This commit is contained in:
eeeXun 2022-10-23 14:29:36 +08:00
parent 5444866489
commit 97b43733d9
2 changed files with 67 additions and 67 deletions

36
main.go
View File

@ -9,15 +9,15 @@ var (
// Translate // Translate
translator = NewTranslator() translator = NewTranslator()
// UI // UI
app = tview.NewApplication() app = tview.NewApplication()
src_box = tview.NewTextArea() srcBox = tview.NewTextArea()
dst_box = tview.NewTextView() dstBox = tview.NewTextView()
src_dropdown = tview.NewDropDown() srcDropDown = tview.NewDropDown()
dst_dropdown = tview.NewDropDown() dstDropDown = tview.NewDropDown()
translate_page = tview.NewFlex() translateWindow = tview.NewFlex()
lang_page = tview.NewFlex() langWindow = tview.NewFlex()
pages = tview.NewPages() mainPage = tview.NewPages()
window Window window Window
// config // config
config = viper.New() config = viper.New()
theme string theme string
@ -29,22 +29,22 @@ func main() {
configInit() configInit()
window.colorInit() window.colorInit()
uiInit() uiInit()
translate_page.SetDirection(tview.FlexColumn). translateWindow.SetDirection(tview.FlexColumn).
AddItem(src_box, 0, 1, true). AddItem(srcBox, 0, 1, true).
AddItem(dst_box, 0, 1, false) AddItem(dstBox, 0, 1, false)
lang_page.SetDirection(tview.FlexRow). langWindow.SetDirection(tview.FlexRow).
AddItem(nil, 0, 1, false). AddItem(nil, 0, 1, false).
AddItem(tview.NewFlex().SetDirection(tview.FlexColumn). AddItem(tview.NewFlex().SetDirection(tview.FlexColumn).
AddItem(nil, 0, 1, false). AddItem(nil, 0, 1, false).
AddItem(src_dropdown, 32, 1, true). AddItem(srcDropDown, 32, 1, true).
AddItem(dst_dropdown, 32, 1, false). AddItem(dstDropDown, 32, 1, false).
AddItem(nil, 0, 1, false), 20, 1, true). AddItem(nil, 0, 1, false), 20, 1, true).
AddItem(nil, 0, 1, false) AddItem(nil, 0, 1, false)
pages.AddPage("translate_page", translate_page, true, true) mainPage.AddPage("translatePage", translateWindow, true, true)
pages.AddPage("lang_page", lang_page, true, false) mainPage.AddPage("langPage", langWindow, true, false)
if err := app.SetRoot(pages, true). if err := app.SetRoot(mainPage, true).
EnableMouse(true).Run(); err != nil { EnableMouse(true).Run(); err != nil {
panic(err) panic(err)
} }

98
ui.go
View File

@ -6,24 +6,24 @@ import (
func updateBackground() { func updateBackground() {
// box // box
src_box.SetBackgroundColor(window.src.background_color) srcBox.SetBackgroundColor(window.src.background_color)
src_box.SetTextStyle(tcell.StyleDefault. srcBox.SetTextStyle(tcell.StyleDefault.
Background(window.src.background_color). Background(window.src.background_color).
Foreground(window.src.foreground_color)) Foreground(window.src.foreground_color))
dst_box.SetBackgroundColor(window.dst.background_color) dstBox.SetBackgroundColor(window.dst.background_color)
// dropdown // dropdown
src_dropdown.SetBackgroundColor(window.src.background_color) srcDropDown.SetBackgroundColor(window.src.background_color)
src_dropdown.SetListStyles(tcell.StyleDefault. srcDropDown.SetListStyles(tcell.StyleDefault.
Background(window.src.background_color). Background(window.src.background_color).
Foreground(window.src.foreground_color), Foreground(window.src.foreground_color),
tcell.StyleDefault. tcell.StyleDefault.
Background(window.src.selected_color). Background(window.src.selected_color).
Foreground(window.src.prefix_color)) Foreground(window.src.prefix_color))
dst_dropdown.SetBackgroundColor(window.dst.background_color) dstDropDown.SetBackgroundColor(window.dst.background_color)
dst_dropdown.SetListStyles(tcell.StyleDefault. dstDropDown.SetListStyles(tcell.StyleDefault.
Background(window.src.background_color). Background(window.src.background_color).
Foreground(window.src.foreground_color), Foreground(window.src.foreground_color),
tcell.StyleDefault. tcell.StyleDefault.
@ -33,42 +33,42 @@ func updateBackground() {
// update title and option // update title and option
func updateTitle() { func updateTitle() {
src_box.SetTitle(translator.srcLang) srcBox.SetTitle(translator.srcLang)
dst_box.SetTitle(translator.dstLang) dstBox.SetTitle(translator.dstLang)
src_dropdown.SetCurrentOption(IndexOf(translator.srcLang, Lang)) srcDropDown.SetCurrentOption(IndexOf(translator.srcLang, Lang))
src_dropdown.SetTitle(translator.srcLang) srcDropDown.SetTitle(translator.srcLang)
dst_dropdown.SetCurrentOption(IndexOf(translator.dstLang, Lang)) dstDropDown.SetCurrentOption(IndexOf(translator.dstLang, Lang))
dst_dropdown.SetTitle(translator.dstLang) dstDropDown.SetTitle(translator.dstLang)
} }
func uiInit() { func uiInit() {
// box // box
src_box.SetBorder(true). srcBox.SetBorder(true).
SetBorderColor(window.src.border_color). SetBorderColor(window.src.border_color).
SetTitleColor(window.src.border_color) SetTitleColor(window.src.border_color)
src_box.SetSelectedStyle(tcell.StyleDefault. srcBox.SetSelectedStyle(tcell.StyleDefault.
Background(window.src.selected_color). Background(window.src.selected_color).
Foreground(window.src.foreground_color)) Foreground(window.src.foreground_color))
dst_box.SetBorder(true). dstBox.SetBorder(true).
SetBorderColor(window.dst.border_color). SetBorderColor(window.dst.border_color).
SetTitleColor(window.dst.border_color) SetTitleColor(window.dst.border_color)
dst_box.SetTextColor(window.dst.foreground_color) dstBox.SetTextColor(window.dst.foreground_color)
// dropdown // dropdown
src_dropdown.SetOptions(Lang, nil) srcDropDown.SetOptions(Lang, nil)
src_dropdown.SetFieldBackgroundColor(window.src.selected_color). srcDropDown.SetFieldBackgroundColor(window.src.selected_color).
SetFieldTextColor(window.src.foreground_color). SetFieldTextColor(window.src.foreground_color).
SetPrefixTextColor(window.dst.prefix_color) SetPrefixTextColor(window.dst.prefix_color)
src_dropdown.SetBorder(true). srcDropDown.SetBorder(true).
SetBorderColor(window.src.border_color). SetBorderColor(window.src.border_color).
SetTitleColor(window.src.border_color) SetTitleColor(window.src.border_color)
dst_dropdown.SetOptions(Lang, nil) dstDropDown.SetOptions(Lang, nil)
dst_dropdown.SetFieldBackgroundColor(window.src.selected_color). dstDropDown.SetFieldBackgroundColor(window.src.selected_color).
SetFieldTextColor(window.src.foreground_color). SetFieldTextColor(window.src.foreground_color).
SetPrefixTextColor(window.dst.prefix_color) SetPrefixTextColor(window.dst.prefix_color)
dst_dropdown.SetBorder(true). dstDropDown.SetBorder(true).
SetBorderColor(window.dst.border_color). SetBorderColor(window.dst.border_color).
SetTitleColor(window.dst.border_color) SetTitleColor(window.dst.border_color)
@ -76,11 +76,11 @@ func uiInit() {
updateTitle() updateTitle()
// handler // handler
pages.SetInputCapture(pagesHandler) mainPage.SetInputCapture(pagesHandler)
translate_page.SetInputCapture(translatePageHandler) translateWindow.SetInputCapture(translatePageHandler)
src_dropdown.SetDoneFunc(srcDropDownHandler). srcDropDown.SetDoneFunc(srcDropDownHandler).
SetSelectedFunc(srcSelected) SetSelectedFunc(srcSelected)
dst_dropdown.SetDoneFunc(dstDropDownHandler). dstDropDown.SetDoneFunc(dstDropDownHandler).
SetSelectedFunc(dstSelected) SetSelectedFunc(dstSelected)
} }
@ -108,41 +108,41 @@ func translatePageHandler(event *tcell.EventKey) *tcell.EventKey {
switch key { switch key {
case tcell.KeyEsc: case tcell.KeyEsc:
pages.ShowPage("lang_page") mainPage.ShowPage("langPage")
case tcell.KeyCtrlJ: case tcell.KeyCtrlJ:
message := src_box.GetText() message := srcBox.GetText()
if len(message) > 0 { if len(message) > 0 {
result, err := translator.Translate(message) result, err := translator.Translate(message)
if err != nil { if err != nil {
dst_box.SetText(err.Error()) dstBox.SetText(err.Error())
} else { } else {
dst_box.SetText(result) dstBox.SetText(result)
} }
} }
case tcell.KeyCtrlQ: case tcell.KeyCtrlQ:
src_box.SetText("", true) srcBox.SetText("", true)
case tcell.KeyCtrlS: case tcell.KeyCtrlS:
translator.srcLang, translator.dstLang = translator.dstLang, translator.srcLang translator.srcLang, translator.dstLang = translator.dstLang, translator.srcLang
updateTitle() updateTitle()
src_text := src_box.GetText() src_text := srcBox.GetText()
dst_text := dst_box.GetText(false) dst_text := dstBox.GetText(false)
if len(dst_text) > 0 { if len(dst_text) > 0 {
// GetText of Box contains "\n" if it has words // GetText of Box contains "\n" if it has words
src_box.SetText(dst_text[:len(dst_text)-1], true) srcBox.SetText(dst_text[:len(dst_text)-1], true)
} else { } else {
src_box.SetText(dst_text, true) srcBox.SetText(dst_text, true)
} }
dst_box.SetText(src_text) dstBox.SetText(src_text)
case tcell.KeyCtrlO: case tcell.KeyCtrlO:
// play source sound // play source sound
if translator.soundLock.Available() { if translator.soundLock.Available() {
message := src_box.GetText() message := srcBox.GetText()
if len(message) > 0 { if len(message) > 0 {
translator.soundLock.Acquire() translator.soundLock.Acquire()
go func() { go func() {
err := translator.PlaySound(translator.srcLang, message) err := translator.PlaySound(translator.srcLang, message)
if err != nil { if err != nil {
src_box.SetText(err.Error(), true) srcBox.SetText(err.Error(), true)
} }
}() }()
} }
@ -151,13 +151,13 @@ func translatePageHandler(event *tcell.EventKey) *tcell.EventKey {
case tcell.KeyCtrlP: case tcell.KeyCtrlP:
// play destination sound // play destination sound
if translator.soundLock.Available() { if translator.soundLock.Available() {
message := dst_box.GetText(false) message := dstBox.GetText(false)
if len(message) > 0 { if len(message) > 0 {
translator.soundLock.Acquire() translator.soundLock.Acquire()
go func() { go func() {
err := translator.PlaySound(translator.dstLang, message) err := translator.PlaySound(translator.dstLang, message)
if err != nil { if err != nil {
dst_box.SetText(err.Error()) dstBox.SetText(err.Error())
} }
}() }()
} }
@ -172,30 +172,30 @@ func translatePageHandler(event *tcell.EventKey) *tcell.EventKey {
func srcSelected(text string, index int) { func srcSelected(text string, index int) {
translator.srcLang = text translator.srcLang = text
src_box.SetTitle(text) srcBox.SetTitle(text)
src_dropdown.SetTitle(text) srcDropDown.SetTitle(text)
} }
func dstSelected(text string, index int) { func dstSelected(text string, index int) {
translator.dstLang = text translator.dstLang = text
dst_box.SetTitle(text) dstBox.SetTitle(text)
dst_dropdown.SetTitle(text) dstDropDown.SetTitle(text)
} }
func srcDropDownHandler(key tcell.Key) { func srcDropDownHandler(key tcell.Key) {
switch key { switch key {
case tcell.KeyTAB: case tcell.KeyTAB:
app.SetFocus(dst_dropdown) app.SetFocus(dstDropDown)
case tcell.KeyEsc: case tcell.KeyEsc:
pages.HidePage("lang_page") mainPage.HidePage("langPage")
} }
} }
func dstDropDownHandler(key tcell.Key) { func dstDropDownHandler(key tcell.Key) {
switch key { switch key {
case tcell.KeyTAB: case tcell.KeyTAB:
app.SetFocus(src_dropdown) app.SetFocus(srcDropDown)
case tcell.KeyEsc: case tcell.KeyEsc:
pages.HidePage("lang_page") mainPage.HidePage("langPage")
} }
} }