v/GTT
1
0
mirror of https://github.com/eeeXun/GTT.git synced 2025-05-17 00:00:16 -07:00

feat: add translatorDropDown

This commit is contained in:
eeeXun 2023-01-27 12:24:42 +08:00
parent 0faaa757e3
commit 1115d19b7a
6 changed files with 76 additions and 29 deletions

View File

@ -107,6 +107,10 @@ func updateConfig() {
} }
} }
} }
if config.GetString("translator") != translator.GetEngineName() {
changed = true
config.Set("translator", translator.GetEngineName())
}
if config.GetBool("hide_below") != hideBelow { if config.GetBool("hide_below") != hideBelow {
changed = true changed = true
config.Set("hide_below", hideBelow) config.Set("hide_below", hideBelow)

View File

@ -15,9 +15,14 @@ const (
) )
type GoogleTranslate struct { type GoogleTranslate struct {
srcLang string srcLang string
dstLang string dstLang string
SoundLock *lock.Lock EngineName string
SoundLock *lock.Lock
}
func (t *GoogleTranslate) GetEngineName() string {
return t.EngineName
} }
func (t *GoogleTranslate) GetAllLang() []string { func (t *GoogleTranslate) GetAllLang() []string {

View File

@ -15,9 +15,14 @@ const (
) )
type LibreTranslate struct { type LibreTranslate struct {
srcLang string srcLang string
dstLang string dstLang string
SoundLock *lock.Lock EngineName string
SoundLock *lock.Lock
}
func (t *LibreTranslate) GetEngineName() string {
return t.EngineName
} }
func (t *LibreTranslate) GetAllLang() []string { func (t *LibreTranslate) GetAllLang() []string {

View File

@ -11,6 +11,8 @@ var (
) )
type Translator interface { type Translator interface {
// engine name
GetEngineName() string
// text // text
GetAllLang() []string GetAllLang() []string
GetSrcLang() string GetSrcLang() string
@ -32,12 +34,14 @@ type Translator interface {
func NewGoogleTranslate() *googletranslate.GoogleTranslate { func NewGoogleTranslate() *googletranslate.GoogleTranslate {
return &googletranslate.GoogleTranslate{ return &googletranslate.GoogleTranslate{
SoundLock: lock.NewLock(), EngineName: "GoogleTranslate",
SoundLock: lock.NewLock(),
} }
} }
func NewLibreTranslate() *libretranslate.LibreTranslate { func NewLibreTranslate() *libretranslate.LibreTranslate {
return &libretranslate.LibreTranslate{ return &libretranslate.LibreTranslate{
SoundLock: lock.NewLock(), EngineName: "LibreTranslate",
SoundLock: lock.NewLock(),
} }
} }

View File

@ -26,9 +26,10 @@ var (
dstOutput = tview.NewTextView() dstOutput = tview.NewTextView()
defOutput = tview.NewTextArea() defOutput = tview.NewTextArea()
posOutput = tview.NewTextArea() posOutput = tview.NewTextArea()
translatorDropDown = tview.NewDropDown()
srcLangDropDown = tview.NewDropDown() srcLangDropDown = tview.NewDropDown()
dstLangDropDown = tview.NewDropDown() dstLangDropDown = tview.NewDropDown()
langCycle = ui.NewUICycle(srcLangDropDown, dstLangDropDown) langCycle = ui.NewUICycle(translatorDropDown, srcLangDropDown, dstLangDropDown)
themeDropDown = tview.NewDropDown() themeDropDown = tview.NewDropDown()
transparentDropDown = tview.NewDropDown() transparentDropDown = tview.NewDropDown()
hideBelowDropDown = tview.NewDropDown() hideBelowDropDown = tview.NewDropDown()

68
ui.go
View File

@ -3,6 +3,7 @@ package main
import ( import (
"fmt" "fmt"
"gtt/internal/color" "gtt/internal/color"
"gtt/internal/translate"
"strconv" "strconv"
"github.com/gdamore/tcell/v2" "github.com/gdamore/tcell/v2"
@ -73,6 +74,7 @@ func updateBackgroundColor() {
// dropdown // dropdown
for _, dropdown := range []*tview.DropDown{ for _, dropdown := range []*tview.DropDown{
translatorDropDown,
srcLangDropDown, srcLangDropDown,
dstLangDropDown, dstLangDropDown,
themeDropDown, themeDropDown,
@ -135,6 +137,7 @@ func updateNonConfigColor() {
SetPrefixTextColor(style.PrefixColor()) SetPrefixTextColor(style.PrefixColor())
} }
for _, labelDropDown := range []*tview.DropDown{ for _, labelDropDown := range []*tview.DropDown{
translatorDropDown,
themeDropDown, themeDropDown,
transparentDropDown, transparentDropDown,
hideBelowDropDown, hideBelowDropDown,
@ -163,14 +166,30 @@ func updateNonConfigColor() {
SetTitleColor(style.HighLightColor()) SetTitleColor(style.HighLightColor())
} }
// SetSelectedFunc of DropDown need to update when options change
func updateLangDropDown() {
srcLangDropDown.SetOptions(translator.GetAllLang(),
func(text string, index int) {
translator.SetSrcLang(text)
srcInput.SetTitle(text)
srcLangDropDown.SetTitle(text)
})
dstLangDropDown.SetOptions(translator.GetAllLang(),
func(text string, index int) {
translator.SetDstLang(text)
dstOutput.SetTitle(text)
dstLangDropDown.SetTitle(text)
})
}
func updateAllColor() { func updateAllColor() {
updateBackgroundColor() updateBackgroundColor()
updateBorderColor() updateBorderColor()
updateNonConfigColor() updateNonConfigColor()
} }
// Update title and option // Update language title and option
func updateTitle() { func updateCurrentLang() {
srcInput.SetTitle(translator.GetSrcLang()) srcInput.SetTitle(translator.GetSrcLang())
dstOutput.SetTitle(translator.GetDstLang()) dstOutput.SetTitle(translator.GetDstLang())
srcLangDropDown.SetCurrentOption( srcLangDropDown.SetCurrentOption(
@ -200,10 +219,11 @@ func uiInit() {
posOutput.SetBorder(true).SetTitle("Part of speech") posOutput.SetBorder(true).SetTitle("Part of speech")
// dropdown // dropdown
for _, langDropDown := range []*tview.DropDown{srcLangDropDown, dstLangDropDown} { translatorDropDown.SetLabel("Translator: ").
langDropDown.SetOptions(translator.GetAllLang(), nil). SetOptions(translate.AllTranslator, nil).
SetBorder(true) SetCurrentOption(IndexOf(translator.GetEngineName(), translate.AllTranslator))
} srcLangDropDown.SetBorder(true)
dstLangDropDown.SetBorder(true)
themeDropDown.SetLabel("Theme: "). themeDropDown.SetLabel("Theme: ").
SetOptions(color.AllTheme, nil). SetOptions(color.AllTheme, nil).
SetCurrentOption(IndexOf(style.Theme, color.AllTheme)) SetCurrentOption(IndexOf(style.Theme, color.AllTheme))
@ -251,8 +271,19 @@ func uiInit() {
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(srcLangDropDown, langStrMaxLength, 1, true). AddItem(tview.NewFlex().SetDirection(tview.FlexRow).
AddItem(dstLangDropDown, langStrMaxLength, 1, false). AddItem(tview.NewFlex().SetDirection(tview.FlexColumn).
AddItem(nil, 0, 1, false).
AddItem(tview.NewFlex().SetDirection(tview.FlexRow).
AddItem(translatorDropDown, 0, 1, true),
0, 2, true).
AddItem(nil, 0, 1, false),
1, 1, true).
AddItem(tview.NewFlex().SetDirection(tview.FlexColumn).
AddItem(srcLangDropDown, langStrMaxLength, 1, false).
AddItem(dstLangDropDown, langStrMaxLength, 1, false),
0, 1, false),
2*langStrMaxLength, 1, true).
AddItem(nil, 0, 1, false), AddItem(nil, 0, 1, false),
popOutWindowHeight, 1, true). popOutWindowHeight, 1, true).
AddItem(attachButton(), 1, 1, false). AddItem(attachButton(), 1, 1, false).
@ -291,7 +322,8 @@ func uiInit() {
AddItem(nil, 0, 1, false) AddItem(nil, 0, 1, false)
updateAllColor() updateAllColor()
updateTitle() updateLangDropDown()
updateCurrentLang()
// handler // handler
mainPage.SetInputCapture(mainPageHandler) mainPage.SetInputCapture(mainPageHandler)
@ -318,18 +350,14 @@ func uiInit() {
langWindow.SetInputCapture(popOutWindowHandler) langWindow.SetInputCapture(popOutWindowHandler)
styleWindow.SetInputCapture(popOutWindowHandler) styleWindow.SetInputCapture(popOutWindowHandler)
keyMapWindow.SetInputCapture(popOutWindowHandler) keyMapWindow.SetInputCapture(popOutWindowHandler)
srcLangDropDown.SetDoneFunc(langDropDownHandler). translatorDropDown.SetDoneFunc(langDropDownHandler).
SetSelectedFunc(func(text string, index int) { SetSelectedFunc(func(text string, index int) {
translator.SetSrcLang(text) translator = translators[text]
srcInput.SetTitle(text) updateLangDropDown()
srcLangDropDown.SetTitle(text) updateCurrentLang()
})
dstLangDropDown.SetDoneFunc(langDropDownHandler).
SetSelectedFunc(func(text string, index int) {
translator.SetDstLang(text)
dstOutput.SetTitle(text)
dstLangDropDown.SetTitle(text)
}) })
srcLangDropDown.SetDoneFunc(langDropDownHandler)
dstLangDropDown.SetDoneFunc(langDropDownHandler)
themeDropDown.SetDoneFunc(styleDropDownHandler). themeDropDown.SetDoneFunc(styleDropDownHandler).
SetSelectedFunc(func(text string, index int) { SetSelectedFunc(func(text string, index int) {
style.Theme = text style.Theme = text
@ -442,7 +470,7 @@ func translateWindowHandler(event *tcell.EventKey) *tcell.EventKey {
} }
case tcell.KeyCtrlS: case tcell.KeyCtrlS:
translator.SwapLang() translator.SwapLang()
updateTitle() updateCurrentLang()
srcText := srcInput.GetText() srcText := srcInput.GetText()
dstText := dstOutput.GetText(false) dstText := dstOutput.GetText(false)
if len(dstText) > 0 { if len(dstText) > 0 {