From 147cf6e521bc21bc685e87e869d495c502942c3d Mon Sep 17 00:00:00 2001 From: niksedk Date: Wed, 29 Jul 2026 16:15:43 +0200 Subject: [PATCH] Add optional Auto-translate and Speech to text toolbar icons Two new toolbar buttons (off by default, enabled in Settings -> Toolbar) that open Auto-translate and Speech to text, with new icons for the Dark, Light and Classic themes in both Themes.zip and the root Themes folder. Also syncs the root Themes folder with Themes.zip: backfills the missing PointSync icons and fixes the Classic RemoveTextForHi casing. Co-Authored-By: Claude Fable 5 --- Themes/Classic/AutoTranslate.png | Bin 0 -> 1057 bytes Themes/Classic/PointSync.png | Bin 0 -> 1636 bytes ...emoveTextForHI.png => RemoveTextForHi.png} | Bin Themes/Classic/SpeechToText.png | Bin 0 -> 713 bytes Themes/Dark/AutoTranslate.png | Bin 0 -> 975 bytes Themes/Dark/PointSync.png | Bin 0 -> 1244 bytes Themes/Dark/SpeechToText.png | Bin 0 -> 681 bytes Themes/Light/AutoTranslate.png | Bin 0 -> 964 bytes Themes/Light/PointSync.png | Bin 0 -> 1403 bytes Themes/Light/SpeechToText.png | Bin 0 -> 657 bytes src/ui/Assets/Themes.zip | Bin 84432 -> 90209 bytes src/ui/Features/Main/Layout/InitToolbar.cs | 26 ++++++++++++++++++ .../Features/Options/Settings/SettingsPage.cs | 2 ++ .../Options/Settings/SettingsViewModel.cs | 6 ++++ .../Language/Main/LanguageMainToolbar.cs | 4 +++ .../Language/Options/LanguageSettings.cs | 4 +++ src/ui/Logic/Config/SeAppearance.cs | 4 +++ 17 files changed, 46 insertions(+) create mode 100644 Themes/Classic/AutoTranslate.png create mode 100644 Themes/Classic/PointSync.png rename Themes/Classic/{RemoveTextForHI.png => RemoveTextForHi.png} (100%) create mode 100644 Themes/Classic/SpeechToText.png create mode 100644 Themes/Dark/AutoTranslate.png create mode 100644 Themes/Dark/PointSync.png create mode 100644 Themes/Dark/SpeechToText.png create mode 100644 Themes/Light/AutoTranslate.png create mode 100644 Themes/Light/PointSync.png create mode 100644 Themes/Light/SpeechToText.png diff --git a/Themes/Classic/AutoTranslate.png b/Themes/Classic/AutoTranslate.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4e67c3ceb11cbba40832087d5dedc84e0d6c0d GIT binary patch literal 1057 zcmV++1m63JP)j?+}h)9>J9&AiA0Ntuu z6Cl#q@%ndc!DcNUkKYQcsOokg={U}d8-2%?GT?b$uTPGMe6*Q&RL#KX=xCSgx;sTg zS5{U|&&%F z9O|5bSSW94hw2j=1;T53X`8ohftwg0DzLDmz{($aDa_{w)*18jf%Z7!F4rP3NP`fQLx zJbAj>`|Ap@ZQE;VYI+K|;^Pgls;UQ5sZ_ok-#$3^5XytTtNwo-bsRs~`K7Z&5Ocp1(r(TN%w}aTuq4Uj%_WJJE z5^6pU*@A&xmxkMtdsH*!)nE(byMn-NgMk&Q8h1Hvc(*P<= z1E6fX=9&YI2#|O@o>0{nf{{Cpvrqy!jQ5&n)TZd3OcrJn`}1wj;aooM_#@#kw`3BmbI@Ggj>k>3N!EN2-xK0 z4-9K=4ccAubTUk%2s52UkhBtEU?iiSJ5RCz@qR$zXKiBaJdw|0}>my6= zMZT*lU?bK!biVnjcWH%U`OPn#jO?w1+ciAD!z<)30?i7k<&%*^a0Bjy!P-}3x*D!p zPuQ}6VC~;xyw7W5jh-qFuJ?pctp$ykQ9T9nF)F_%# bzhQp?pxJ$1kx^)h00000NkvXXu0mjfR#5f_ literal 0 HcmV?d00001 diff --git a/Themes/Classic/PointSync.png b/Themes/Classic/PointSync.png new file mode 100644 index 0000000000000000000000000000000000000000..ce54e54d3e3cb1af2f7af9deb43b8130e025d361 GIT binary patch literal 1636 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 literal 0 HcmV?d00001 diff --git a/Themes/Dark/PointSync.png b/Themes/Dark/PointSync.png new file mode 100644 index 0000000000000000000000000000000000000000..e201eaa261f72c9f4afd637c2f3734fb589eb833 GIT binary patch literal 1244 zcmV<21S9*2P);#hOuIlQp^!z!&%o@78*_ z&Ius^0OEJ2I)o4)gfQ^eWz8rSizeh%jw#02btJL7yZh##BtU|t9LL$MR;z4lYikVOCGjBlv;k#m zCPdKW23pATyv<6b(rh#uvE`2Ciej-CpMntb5}u%3F29kSymPN@+asLw(Owwka`_p= zpp?Gd3qw;_$H9`Ej8giQ@B8;L*Ar7KL1j`(KiuEnw>jsGbABVSl00Ry*Kiz%5kh`N zOtgxE(Yp@`A%Id!Ez9~bAt;{-xoa33uIpm73!Gy*;#%S+#gdq+VK+f09IoHE5Om&{nFpLoQ06Uy}_{&q|dLbz?)cYCcn=ZXa-N%#vl1`^D2qDh=qdN|+2m>jVN?qZc zuVpfsRyv(Ns#dFaf*`nrmRMe1j&T+i7D6fWbQp%)`F#G5erX6QbKABTQLANH7ki}; zrF719-SeFoNnNmQ`*E}mA>@M&jNU|qOeNQKvz&A8`~E!?M9V0yXq#G#id~X}!TZqL8&8pNz3v5^$3-_H3_`$~k|MG4`G8p6i>No7sMM0_aB~ z-UNVY_Esj7`DkKdVw5q4mFKPy;vQxO0N~B|si~={^R-${1VOO0y1II8Wo0GmcVUI& zSV9(@XnT8mBA3f8YMOR248sd!V`C;3nP#)8>AL=#VHjT@9Ua}AnVGQ@*?zZW=tn>y z65k7z|3@jM(^%oM*(}fHa*bYlAJ`Bw#k%=4S;NeD;EFp(5?I(+D5X~vLZ|ah&^eOa zCxra&I8N(-`!)msE`-PogK;7Pm=XBI24tG1+ENGp2>BbSlmcgrGM>}`0000 literal 0 HcmV?d00001 diff --git a/Themes/Dark/SpeechToText.png b/Themes/Dark/SpeechToText.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ba4467548fc35c536d9f5c090a5f09a54ea041 GIT binary patch literal 681 zcmV;a0#^NrP)^=T~Z{-?9N`NfdnmLVVhtP1PgT%9i zljMjo=4)P@h@2#Os*qTzCC~F#Dn(9?<4lsw+v-(HO#s*?ASM3%Q-gr{2*0G!E9<4WPqUKyp44QmIrfrimV=BHG!>`&#S8bUl@te*{7Br3`5++Im48#|r?) zNY<;>>gmD3!S&_k<=+1O{@Va1NN$pRVvKnN07;SzTWdc8I0j(O_x)+$|9U~2fGCR2 zE2Unh4zGK9dM*zQ4gJbXkR(Z9t$hRF1b_|4aYnS(VcA{)U`r|0-V2N|uK>&f0LjT_ zv$+t*@uhmbUd?>MFdT@YXvSK*n35B~O|5mf17R+6TgP$kWS6m16b>XLm57{GN?psQB9eDq*L|k7{=6IFQUWrF z$OV$m0l-@81woMP1vzjCe#Hkapj0<(G#c;v`uffQ!0PJi_wGtM!am~x&{ literal 0 HcmV?d00001 diff --git a/Themes/Light/AutoTranslate.png b/Themes/Light/AutoTranslate.png new file mode 100644 index 0000000000000000000000000000000000000000..fcaa45f5cafeadc324e77c7c1970946093e9f978 GIT binary patch literal 964 zcmV;#13UbQP)CEm-(kP;T7`Pwjp8x-zGv{#O{|-rQ**n>Wb}ux$gXHy;J+r$9JO!G1kSKnB2&??^J9hvXD!I!FJK6f73| z&fUVYnF~NO!aEe~=NIbY<|5GeM<>t>fGZy?#zpN2^iFKVvQ{A|Q)^CgLfp{4^L2*V z)*`SPlKu1tL!5yVtk^O6}PXViaFZ%Lg$RX(;=qr7Nuo;*}GHWQb zUj*P_v6YNfM9Bf;40PNFlJdU~BU5)*r5DjNKr=e`K8`+&gVInQHsmgzJR2eJpKL+r z-ZfV|OTq51MUh+u`H};?Xl5^gx*$h)v*auQ=LLTbf&fwag;@l@!L1V`e z;0rT*0mL!dzhV0Fq4-1673Q#>sO3IcfFm9i>v7UD>of!QIKnonkq~_bXQIj2bp`f~GbfG6<7RCI zSDPM5A;6HsbD^6T?9sr)A6FysG0xfT6|dZVE?&U3AGU|c zJ>3#Z9*%?$4gP*m@-<#07IT>=fmg3DgdBE!3Yt$vJ|FqwyjSA=n3`T18E=}L*+x%`#GrnTKMhC mDRQ?y>YvjeZ<_l*fxiHy*B&FLLOj?200001%&#EP)9(E6vuz}&Gds>DaeO>rW8d`FiOa%uHyZEf5!K zObmW3AjBCGj0LM!}}mwEHvz2}_! zzyEX2eJ~w_n`aWLpFJHD*3=w}J8!@~0y#fryixaR%FnbQD}dz>o`DGB1#lRpKAXzQ zrwCER#AmMC5s3K+pYoeA_XUC2c&EYNi?WI^kR`wgpzhjve2dM7u%C6Muc6fIi2Wjt zvjnAWSZ(-xXAt!rspPjDe74sJHLCPh$@BsUc+P_tUd3NIQ_}E%7n?9S&PYbmsEvg2o3Y@~CY7 zgt~qqbm{9cw(c4MZ$kO`P3*fRRJ0r$bu4~Et%3f{xHnng{jF&F*aWewe#f1HP+6ae zz!&(r+}uP?em(=OE7`xkhd|sideCD6Vi8yNs7?Zop;@!B8bw1y7%Dx7lv{wj!)op;zCynVKGwxiY77l!NlQ_?Z{*y*l?6k zqfPkYc&5+{==9NDt#Hm9dTyMcc6AlOKV~9oAr?QoIyr42B4%abGXr* zy4y5sZ&2PGqV9>SW3mET$e(G^+qKZ#S0uJGWA;}1I#c)txA`H*0(%KCAIqBKQrK&` z&$CgKZz1SRaGe`A&Ao-~;oaErDKfMy{5I*HOloAG#VCA-%|20n@ z0Q5CMI}XIO69?fezMQp$uN9a|ro|J(F$E~k*+sJb2v%-CzT83j{yl+Dwz;fCTsx7C zwwWW&1|0hmwU6Bztsj{h7=_E_Q}f(GqT&=S+QdJ9y#kBlM8r>2=}i}iYPFYA*|HSP zV)e4iX3kz?!!cr2IE0#>r)beKlI>OIeFQB~Z6jmfM&YJkbfcR>b}B~q^$v1pR2fAl z;%<>~hbnVly`t4PH!C%(bD3%|+R*m)Gmsp_md`yOX-!R1jACB81?x+x?Gr*xpSsi1 z<<`q%(+@HfuQigMTXr#MdPv!Yk4E0z69VZV5{HZ-UE4DcCEAhOh}?#hiHhcOYLY@l z^A9FKGcWr|NlhGqC{z1m0f&mFuXv>R9XeajBTk6Cl|OoV7>ml5b%<0kYw1gLwVou^ zx0wUa^tqn0_W*Tg8uZ?JlY0w_OMO7of?l6|x-EdLDkXguYI}9tx9p zw3=wtnXCb+I|ty635S(2_Tibi6wKO+BLN&|E%}9R`%NWvkQY(D;|%v7qIS&{^IV)s zyPx82kv<)zp}Sz;&4s4I738;j1ugs7{|(}0L6(9tav;%}ao-_c-j^q~6KdR*5s-RN zUq;I8tzsvzXYy0d{rWakw1ebL$HdeENS|betZn3sX~Fl*#D6zMVv5#USzQ1C002ov JPDHLkV1fhBt?U2* literal 0 HcmV?d00001 diff --git a/Themes/Light/SpeechToText.png b/Themes/Light/SpeechToText.png new file mode 100644 index 0000000000000000000000000000000000000000..fc350a43cdc11cafeb0d8447327e067f8ee9f483 GIT binary patch literal 657 zcmV;C0&e|@P)RCK_a6u4muFg z!KCfQrAwvWE+i(7j%w6sOq?{b7)VSN?wS~p#h91~34bJ5?m6^?BG>C#Xkp+x-S7S0 zpYQ$N@BQ9`0~}zFA(6B)GyRD4qOyX)bMBah<`GCc_YtmENJ^;O;I28|cmkF)i1H|4 zXAQh0`Q+z7yOi63L3gNcj{>$?Y^k9%P=#U~j6PsHft1^Up`UIbpqj1PIz9ifzK`XKKq0Kmx zKo80+DyOl{MY7XzR%16o`%qR8c}(7X2!K^IQSSqA2+?sy6T`rN^@6PgteJDDyzp1A zX!VB3CYJ&oq^D0H#%rJ*SSF@Pa*4Ufy#Pvh@=q@qO}qpd^H&3`8k1P=MY6N4o2OK0 zBkhbJ#*`mif$QWFb2S16VtcO}(io@QG2mK-^cUz?gg7cE+5EfU*`V$eRH8f!5$W6(KaW{c|00000NkvXXu0mjf$UP}8 literal 0 HcmV?d00001 diff --git a/src/ui/Assets/Themes.zip b/src/ui/Assets/Themes.zip index ff61189545ae52305c4cf1c53ad9885bcfe51e9a..8a93f90a04427c2e5123fc64b718b407c058c42d 100644 GIT binary patch delta 5662 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 X|LYBc;^))gqn*SL0IeF3qrd+Fr(5e) delta 38 qcmaEOfc3&;)`l&NXSBB;aA5o(E5gdg00c!q_(7I|;gmKbkOu%0p$i58 diff --git a/src/ui/Features/Main/Layout/InitToolbar.cs b/src/ui/Features/Main/Layout/InitToolbar.cs index c3495cde986..6cf4a663452 100644 --- a/src/ui/Features/Main/Layout/InitToolbar.cs +++ b/src/ui/Features/Main/Layout/InitToolbar.cs @@ -250,6 +250,32 @@ private static Grid CreateToolbar(MainViewModel vm) isLastSeparator = false; } + if (appearance.ToolbarShowAutoTranslate) + { + stackPanelLeft.Children.Add(new Button + { + Content = MakeImage("AutoTranslate"), + Command = vm.ShowAutoTranslateCommand, + Background = Brushes.Transparent, + [AutomationProperties.NameProperty] = languageHints.AutoTranslateHint, + [ToolTip.TipProperty] = UiUtil.MakeToolTip(languageHints.AutoTranslateHint, shortcuts, nameof(vm.ShowAutoTranslateCommand)), + }); + isLastSeparator = false; + } + + if (appearance.ToolbarShowSpeechToText) + { + stackPanelLeft.Children.Add(new Button + { + Content = MakeImage("SpeechToText"), + Command = vm.ShowSpeechToTextWhisperCommand, + Background = Brushes.Transparent, + [AutomationProperties.NameProperty] = languageHints.SpeechToTextHint, + [ToolTip.TipProperty] = UiUtil.MakeToolTip(languageHints.SpeechToTextHint, shortcuts, nameof(vm.ShowSpeechToTextWhisperCommand)), + }); + isLastSeparator = false; + } + if (appearance.ToolbarShowSettings) { diff --git a/src/ui/Features/Options/Settings/SettingsPage.cs b/src/ui/Features/Options/Settings/SettingsPage.cs index 5e2aa304250..7fd908ec8d4 100644 --- a/src/ui/Features/Options/Settings/SettingsPage.cs +++ b/src/ui/Features/Options/Settings/SettingsPage.cs @@ -766,6 +766,8 @@ private List CreateSections() MakeCheckboxSetting(Se.Language.Options.Settings.ShowToolbarPointSync, nameof(_vm.ShowToolbarPointSync)), MakeCheckboxSetting(Se.Language.Options.Settings.ShowToolbarBeautifyTimeCodes, nameof(_vm.ShowToolbarBeautifyTimeCodes)), MakeCheckboxSetting(Se.Language.Options.Settings.ShowToolbarBurnIn, nameof(_vm.ShowToolbarBurnIn)), + MakeCheckboxSetting(Se.Language.Options.Settings.ShowToolbarAutoTranslate, nameof(_vm.ShowToolbarAutoTranslate)), + MakeCheckboxSetting(Se.Language.Options.Settings.ShowToolbarSpeechToText, nameof(_vm.ShowToolbarSpeechToText)), MakeCheckboxSetting(Se.Language.Options.Settings.ShowToolbarSettings, nameof(_vm.ShowToolbarSettings)), MakeCheckboxSetting(Se.Language.Options.Settings.ShowToolbarLayout, nameof(_vm.ShowToolbarLayout)), MakeCheckboxSetting(Se.Language.Options.Shortcuts.SourceView, nameof(_vm.ShowToolbarSourceView)), diff --git a/src/ui/Features/Options/Settings/SettingsViewModel.cs b/src/ui/Features/Options/Settings/SettingsViewModel.cs index 6588e1f332d..86658f4aee7 100644 --- a/src/ui/Features/Options/Settings/SettingsViewModel.cs +++ b/src/ui/Features/Options/Settings/SettingsViewModel.cs @@ -207,6 +207,8 @@ partial void OnMaxLinesChanged(int? value) [ObservableProperty] private bool _showToolbarPointSync; [ObservableProperty] private bool _showToolbarBeautifyTimeCodes; [ObservableProperty] private bool _showToolbarBurnIn; + [ObservableProperty] private bool _showToolbarAutoTranslate; + [ObservableProperty] private bool _showToolbarSpeechToText; [ObservableProperty] private bool _fixCommonErrorsSkipStep1; [ObservableProperty] private bool _showToolbarSettings; [ObservableProperty] private bool _showToolbarLayout; @@ -825,6 +827,8 @@ private void LoadSettings() ShowToolbarPointSync = appearance.ToolbarShowPointSync; ShowToolbarBeautifyTimeCodes = appearance.ToolbarShowBeautifyTimeCodes; ShowToolbarBurnIn = appearance.ToolbarShowBurnIn; + ShowToolbarAutoTranslate = appearance.ToolbarShowAutoTranslate; + ShowToolbarSpeechToText = appearance.ToolbarShowSpeechToText; ShowToolbarSettings = appearance.ToolbarShowSettings; ShowToolbarLayout = appearance.ToolbarShowLayout; ShowToolbarSourceView = appearance.ToolbarShowSourceView; @@ -1644,6 +1648,8 @@ private void SaveSettings() appearance.ToolbarShowPointSync = ShowToolbarPointSync; appearance.ToolbarShowBeautifyTimeCodes = ShowToolbarBeautifyTimeCodes; appearance.ToolbarShowBurnIn = ShowToolbarBurnIn; + appearance.ToolbarShowAutoTranslate = ShowToolbarAutoTranslate; + appearance.ToolbarShowSpeechToText = ShowToolbarSpeechToText; appearance.ToolbarShowSettings = ShowToolbarSettings; appearance.ToolbarShowLayout = ShowToolbarLayout; appearance.ToolbarShowSourceView = ShowToolbarSourceView; diff --git a/src/ui/Logic/Config/Language/Main/LanguageMainToolbar.cs b/src/ui/Logic/Config/Language/Main/LanguageMainToolbar.cs index e51ccb8a005..e5fe4695627 100644 --- a/src/ui/Logic/Config/Language/Main/LanguageMainToolbar.cs +++ b/src/ui/Logic/Config/Language/Main/LanguageMainToolbar.cs @@ -16,6 +16,8 @@ public class LanguageMainToolbar public string PointSyncHint { get; set; } public string BeautifyTimeCodesHint { get; set; } public string BurnInHint { get; set; } + public string AutoTranslateHint { get; set; } + public string SpeechToTextHint { get; set; } public string SettingsHint { get; set; } public string LayoutHint { get; set; } public string HelpHint { get; set; } @@ -46,6 +48,8 @@ public LanguageMainToolbar() PointSyncHint = "Point sync via another subtitle {0}"; BeautifyTimeCodesHint = "Beautify time codes {0}"; BurnInHint = "Burn subtitles into a video file {0}"; + AutoTranslateHint = "Auto-translate {0}"; + SpeechToTextHint = "Speech to text {0}"; SettingsHint = "Adjust program settings and preferences {0}"; LayoutHint = "Change toolbar and panel layout {0}"; HelpHint = "Open help website {0}"; diff --git a/src/ui/Logic/Config/Language/Options/LanguageSettings.cs b/src/ui/Logic/Config/Language/Options/LanguageSettings.cs index 694d9d6df37..08d446a7fe1 100644 --- a/src/ui/Logic/Config/Language/Options/LanguageSettings.cs +++ b/src/ui/Logic/Config/Language/Options/LanguageSettings.cs @@ -190,6 +190,8 @@ public class LanguageSettings public string ShowToolbarPointSync { get; set; } public string ShowToolbarBeautifyTimeCodes { get; set; } public string ShowToolbarBurnIn { get; set; } + public string ShowToolbarAutoTranslate { get; set; } + public string ShowToolbarSpeechToText { get; set; } public string ShowToolbarSettings { get; set; } public string ShowToolbarLayout { get; set; } public string ShowToolbarHelp { get; set; } @@ -539,6 +541,8 @@ public LanguageSettings() ShowToolbarPointSync = "Show point sync icon"; ShowToolbarBeautifyTimeCodes = "Show beautify time codes icon"; ShowToolbarBurnIn = "Show burn-in icon"; + ShowToolbarAutoTranslate = "Show auto-translate icon"; + ShowToolbarSpeechToText = "Show speech to text icon"; ShowToolbarSettings = "Show settings icon"; ShowToolbarLayout = "Show layout icon"; ShowToolbarHelp = "Show help icon"; diff --git a/src/ui/Logic/Config/SeAppearance.cs b/src/ui/Logic/Config/SeAppearance.cs index 162f611f74c..f1e098a7b66 100644 --- a/src/ui/Logic/Config/SeAppearance.cs +++ b/src/ui/Logic/Config/SeAppearance.cs @@ -62,6 +62,8 @@ public class SeAppearance public bool ToolbarShowPointSync { get; set; } public bool ToolbarShowBeautifyTimeCodes { get; set; } public bool ToolbarShowBurnIn { get; set; } + public bool ToolbarShowAutoTranslate { get; set; } + public bool ToolbarShowSpeechToText { get; set; } public bool ToolbarShowSettings { get; set; } public bool ToolbarShowLayout { get; set; } public bool ToolbarShowSourceView { get; set; } @@ -136,6 +138,8 @@ public SeAppearance() ToolbarShowPointSync = false; ToolbarShowBeautifyTimeCodes = false; ToolbarShowBurnIn = false; + ToolbarShowAutoTranslate = false; + ToolbarShowSpeechToText = false; ToolbarShowSettings = true; ToolbarShowLayout = true; ToolbarShowSourceView = false;