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:
parent
0faaa757e3
commit
1115d19b7a
@ -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)
|
||||||
|
@ -17,9 +17,14 @@ const (
|
|||||||
type GoogleTranslate struct {
|
type GoogleTranslate struct {
|
||||||
srcLang string
|
srcLang string
|
||||||
dstLang string
|
dstLang string
|
||||||
|
EngineName string
|
||||||
SoundLock *lock.Lock
|
SoundLock *lock.Lock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *GoogleTranslate) GetEngineName() string {
|
||||||
|
return t.EngineName
|
||||||
|
}
|
||||||
|
|
||||||
func (t *GoogleTranslate) GetAllLang() []string {
|
func (t *GoogleTranslate) GetAllLang() []string {
|
||||||
return lang
|
return lang
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,14 @@ const (
|
|||||||
type LibreTranslate struct {
|
type LibreTranslate struct {
|
||||||
srcLang string
|
srcLang string
|
||||||
dstLang string
|
dstLang string
|
||||||
|
EngineName string
|
||||||
SoundLock *lock.Lock
|
SoundLock *lock.Lock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *LibreTranslate) GetEngineName() string {
|
||||||
|
return t.EngineName
|
||||||
|
}
|
||||||
|
|
||||||
func (t *LibreTranslate) GetAllLang() []string {
|
func (t *LibreTranslate) GetAllLang() []string {
|
||||||
return lang
|
return lang
|
||||||
}
|
}
|
||||||
|
@ -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{
|
||||||
|
EngineName: "GoogleTranslate",
|
||||||
SoundLock: lock.NewLock(),
|
SoundLock: lock.NewLock(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLibreTranslate() *libretranslate.LibreTranslate {
|
func NewLibreTranslate() *libretranslate.LibreTranslate {
|
||||||
return &libretranslate.LibreTranslate{
|
return &libretranslate.LibreTranslate{
|
||||||
|
EngineName: "LibreTranslate",
|
||||||
SoundLock: lock.NewLock(),
|
SoundLock: lock.NewLock(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
main.go
3
main.go
@ -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
68
ui.go
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user