Skip to content

Commit 714ce45

Browse files
committed
PowerAccent with multi-language selection
- Updated Language enum, method signatures, and settings to support multiple language selections. - Remove ALL language and added special characters language instead. - Modified UI to use ListView with checkboxes for language selection, including a "Select All" option. - Adjusted ViewModel and code-behind to handle multi-selection logic. - Updated Resources.resw and PowerAccentViewModel.cs to reflect these changes.
1 parent 5af2f6f commit 714ce45

File tree

6 files changed

+391
-153
lines changed

6 files changed

+391
-153
lines changed

src/modules/poweraccent/PowerAccent.Core/Languages.cs

Lines changed: 60 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace PowerAccent.Core
1010
{
1111
public enum Language
1212
{
13-
ALL,
13+
SPECIAL,
1414
BG,
1515
CA,
1616
CRH,
@@ -54,52 +54,63 @@ public enum Language
5454

5555
internal sealed class Languages
5656
{
57-
public static string[] GetDefaultLetterKey(LetterKey letter, Language lang)
58-
{
59-
return lang switch
60-
{
61-
Language.ALL => GetDefaultLetterKeyALL(letter), // All
62-
Language.BG => GetDefaultLetterKeyBG(letter), // Bulgarian
63-
Language.CA => GetDefaultLetterKeyCA(letter), // Catalan
64-
Language.CRH => GetDefaultLetterKeyCRH(letter), // Crimean Tatar
65-
Language.CUR => GetDefaultLetterKeyCUR(letter), // Currency
66-
Language.CY => GetDefaultLetterKeyCY(letter), // Welsh
67-
Language.CZ => GetDefaultLetterKeyCZ(letter), // Czech
68-
Language.DK => GetDefaultLetterKeyDK(letter), // Danish
69-
Language.GA => GetDefaultLetterKeyGA(letter), // Gaeilge (Irish)
70-
Language.GD => GetDefaultLetterKeyGD(letter), // Gàidhlig (Scottish Gaelic)
71-
Language.DE => GetDefaultLetterKeyDE(letter), // German
72-
Language.EL => GetDefaultLetterKeyEL(letter), // Greek
73-
Language.EST => GetDefaultLetterKeyEST(letter), // Estonian
74-
Language.EPO => GetDefaultLetterKeyEPO(letter), // Esperanto
75-
Language.FI => GetDefaultLetterKeyFI(letter), // Finnish
76-
Language.FR => GetDefaultLetterKeyFR(letter), // French
77-
Language.HR => GetDefaultLetterKeyHR(letter), // Croatian
78-
Language.HE => GetDefaultLetterKeyHE(letter), // Hebrew
79-
Language.HU => GetDefaultLetterKeyHU(letter), // Hungarian
80-
Language.IS => GetDefaultLetterKeyIS(letter), // Iceland
81-
Language.IPA => GetDefaultLetterKeyIPA(letter), // IPA (International phonetic alphabet)
82-
Language.IT => GetDefaultLetterKeyIT(letter), // Italian
83-
Language.KU => GetDefaultLetterKeyKU(letter), // Kurdish
84-
Language.LT => GetDefaultLetterKeyLT(letter), // Lithuanian
85-
Language.MK => GetDefaultLetterKeyMK(letter), // Macedonian
86-
Language.MI => GetDefaultLetterKeyMI(letter), // Maori
87-
Language.NL => GetDefaultLetterKeyNL(letter), // Dutch
88-
Language.NO => GetDefaultLetterKeyNO(letter), // Norwegian
89-
Language.PI => GetDefaultLetterKeyPI(letter), // Pinyin
90-
Language.PL => GetDefaultLetterKeyPL(letter), // Polish
91-
Language.PT => GetDefaultLetterKeyPT(letter), // Portuguese
92-
Language.RO => GetDefaultLetterKeyRO(letter), // Romanian
93-
Language.ROM => GetDefaultLetterKeyROM(letter), // Middle Eastern Romanization
94-
Language.SK => GetDefaultLetterKeySK(letter), // Slovak
95-
Language.SL => GetDefaultLetterKeySL(letter), // Slovenian
96-
Language.SP => GetDefaultLetterKeySP(letter), // Spain
97-
Language.SR => GetDefaultLetterKeySR(letter), // Serbian
98-
Language.SR_CYRL => GetDefaultLetterKeySRCyrillic(letter), // Serbian Cyrillic
99-
Language.SV => GetDefaultLetterKeySV(letter), // Swedish
100-
Language.TK => GetDefaultLetterKeyTK(letter), // Turkish
101-
_ => throw new ArgumentException("The language {0} is not known in this context", lang.ToString()),
102-
};
57+
public static string[] GetDefaultLetterKey(LetterKey letter, Language[] langs)
58+
{
59+
if (langs.Length == Enum.GetValues(typeof(Language)).Length)
60+
{
61+
return GetDefaultLetterKeyALL(letter);
62+
}
63+
64+
var characters = new List<string>();
65+
foreach (var lang in langs)
66+
{
67+
characters.AddRange(lang switch
68+
{
69+
Language.SPECIAL => GetDefaultLetterKeySPECIAL(letter), // Special Characters
70+
Language.BG => GetDefaultLetterKeyBG(letter), // Bulgarian
71+
Language.CA => GetDefaultLetterKeyCA(letter), // Catalan
72+
Language.CRH => GetDefaultLetterKeyCRH(letter), // Crimean Tatar
73+
Language.CUR => GetDefaultLetterKeyCUR(letter), // Currency
74+
Language.CY => GetDefaultLetterKeyCY(letter), // Welsh
75+
Language.CZ => GetDefaultLetterKeyCZ(letter), // Czech
76+
Language.DK => GetDefaultLetterKeyDK(letter), // Danish
77+
Language.GA => GetDefaultLetterKeyGA(letter), // Gaeilge (Irish)
78+
Language.GD => GetDefaultLetterKeyGD(letter), // Gàidhlig (Scottish Gaelic)
79+
Language.DE => GetDefaultLetterKeyDE(letter), // German
80+
Language.EL => GetDefaultLetterKeyEL(letter), // Greek
81+
Language.EST => GetDefaultLetterKeyEST(letter), // Estonian
82+
Language.EPO => GetDefaultLetterKeyEPO(letter), // Esperanto
83+
Language.FI => GetDefaultLetterKeyFI(letter), // Finnish
84+
Language.FR => GetDefaultLetterKeyFR(letter), // French
85+
Language.HR => GetDefaultLetterKeyHR(letter), // Croatian
86+
Language.HE => GetDefaultLetterKeyHE(letter), // Hebrew
87+
Language.HU => GetDefaultLetterKeyHU(letter), // Hungarian
88+
Language.IS => GetDefaultLetterKeyIS(letter), // Iceland
89+
Language.IPA => GetDefaultLetterKeyIPA(letter), // IPA (International phonetic alphabet)
90+
Language.IT => GetDefaultLetterKeyIT(letter), // Italian
91+
Language.KU => GetDefaultLetterKeyKU(letter), // Kurdish
92+
Language.LT => GetDefaultLetterKeyLT(letter), // Lithuanian
93+
Language.MK => GetDefaultLetterKeyMK(letter), // Macedonian
94+
Language.MI => GetDefaultLetterKeyMI(letter), // Maori
95+
Language.NL => GetDefaultLetterKeyNL(letter), // Dutch
96+
Language.NO => GetDefaultLetterKeyNO(letter), // Norwegian
97+
Language.PI => GetDefaultLetterKeyPI(letter), // Pinyin
98+
Language.PL => GetDefaultLetterKeyPL(letter), // Polish
99+
Language.PT => GetDefaultLetterKeyPT(letter), // Portuguese
100+
Language.RO => GetDefaultLetterKeyRO(letter), // Romanian
101+
Language.ROM => GetDefaultLetterKeyROM(letter), // Middle Eastern Romanization
102+
Language.SK => GetDefaultLetterKeySK(letter), // Slovak
103+
Language.SL => GetDefaultLetterKeySL(letter), // Slovenian
104+
Language.SP => GetDefaultLetterKeySP(letter), // Spain
105+
Language.SR => GetDefaultLetterKeySR(letter), // Serbian
106+
Language.SR_CYRL => GetDefaultLetterKeySRCyrillic(letter), // Serbian Cyrillic
107+
Language.SV => GetDefaultLetterKeySV(letter), // Swedish
108+
Language.TK => GetDefaultLetterKeyTK(letter), // Turkish
109+
_ => throw new ArgumentException("The language {0} is not known in this context", lang.ToString()),
110+
});
111+
}
112+
113+
return characters.Distinct().ToArray();
103114
}
104115

105116
// Store the computed letters for each key, so that subsequent calls don't take as long.
@@ -149,7 +160,7 @@ private static string[] GetDefaultLetterKeyALL(LetterKey letter)
149160
.Union(GetDefaultLetterKeySRCyrillic(letter))
150161
.Union(GetDefaultLetterKeySV(letter))
151162
.Union(GetDefaultLetterKeyTK(letter))
152-
.Union(GetDefaultLetterKeyAllLanguagesOnly(letter))
163+
.Union(GetDefaultLetterKeySPECIAL(letter))
153164
.ToArray();
154165

155166
_allLanguagesCache[letter] = cachedValue;
@@ -160,7 +171,7 @@ private static string[] GetDefaultLetterKeyALL(LetterKey letter)
160171

161172
// Contains all characters that should be shown in all languages but currently don't belong to any of the single languages available for that letter.
162173
// These characters can be removed from this list after they've been added to one of the other languages for that specific letter.
163-
private static string[] GetDefaultLetterKeyAllLanguagesOnly(LetterKey letter)
174+
private static string[] GetDefaultLetterKeySPECIAL(LetterKey letter)
164175
{
165176
return letter switch
166177
{

src/modules/poweraccent/PowerAccent.Core/Services/SettingsService.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ private void ReadSettings()
6666
ExcludedApps = settings.Properties.ExcludedApps.Value;
6767
_keyboardListener.UpdateExcludedApps(ExcludedApps);
6868

69-
SelectedLang = Enum.TryParse(settings.Properties.SelectedLang.Value, out Language selectedLangValue) ? selectedLangValue : Language.ALL;
69+
SelectedLang = settings.Properties.SelectedLang.Value
70+
.Split(',')
71+
.Select(lang => Enum.TryParse(lang, out Language selectedLangValue) ? selectedLangValue : Language.SPECIAL)
72+
.ToArray();
7073

7174
switch (settings.Properties.ToolbarPosition.Value)
7275
{
@@ -187,9 +190,9 @@ public string ExcludedApps
187190
}
188191
}
189192

190-
private Language _selectedLang;
193+
private Language[] _selectedLang;
191194

192-
public Language SelectedLang
195+
public Language[] SelectedLang
193196
{
194197
get
195198
{

0 commit comments

Comments
 (0)