Skip to content

Commit 50a071f

Browse files
authored
Merge pull request #4828 from comintern/next
Misc bug fixes.
2 parents 30e857a + 4d588f6 commit 50a071f

File tree

5 files changed

+69
-13
lines changed

5 files changed

+69
-13
lines changed

Rubberduck.Core/CodeAnalysis/CodeMetrics/CodeMetricsViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public ObservableCollection<ICodeMetricResult> Metrics
112112
{
113113
get
114114
{
115-
var results = _resultsByDeclaration?.FirstOrDefault(f => ReferenceEquals(f.Key, SelectedItem.Declaration));
115+
var results = _resultsByDeclaration?.FirstOrDefault(f => ReferenceEquals(f.Key, SelectedItem?.Declaration));
116116
return results?.Value == null ? new ObservableCollection<ICodeMetricResult>() : new ObservableCollection<ICodeMetricResult>(results.Value.Value);
117117
}
118118
}

Rubberduck.Core/Settings/GeneralSettings.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.Xml.Serialization;
66
using Rubberduck.Common;
7+
using Rubberduck.Resources;
78

89
namespace Rubberduck.Settings
910
{
@@ -26,7 +27,20 @@ public interface IGeneralSettings
2627
[XmlType(AnonymousType = true)]
2728
public class GeneralSettings : IGeneralSettings, IEquatable<GeneralSettings>
2829
{
29-
public DisplayLanguageSetting Language { get; set; }
30+
private DisplayLanguageSetting _language = new DisplayLanguageSetting(Locales.DefaultCulture.Name);
31+
32+
public DisplayLanguageSetting Language
33+
{
34+
get => _language;
35+
set
36+
{
37+
if (Locales.AvailableCultures.Exists(culture => culture.Name.Equals(value.Code, StringComparison.OrdinalIgnoreCase)))
38+
{
39+
_language = value;
40+
}
41+
}
42+
}
43+
3044
public bool CanShowSplash { get; set; }
3145
public bool CanCheckVersion { get; set; }
3246
public bool CompileBeforeParse { get; set; }

Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,10 @@ public GeneralSettingsViewModel(
4444
_messageBox = messageBox;
4545
_vbeSettings = vbeSettings;
4646
_experimentalFeatureTypes = experimentalTypesProvider.ExperimentalTypes;
47-
Languages = new ObservableCollection<DisplayLanguageSetting>(
48-
new[]
49-
{
50-
new DisplayLanguageSetting("en-US"),
51-
new DisplayLanguageSetting("fr-CA"),
52-
new DisplayLanguageSetting("de-DE"),
53-
new DisplayLanguageSetting("es-ES"),
54-
new DisplayLanguageSetting("cs-CZ")
55-
});
47+
48+
Languages = new ObservableCollection<DisplayLanguageSetting>(Locales.AvailableCultures
49+
.OrderBy(locale => locale.NativeName)
50+
.Select(locale => new DisplayLanguageSetting(locale.Name)));
5651

5752
LogLevels = new ObservableCollection<MinimumLogLevel>(
5853
LogLevelHelper.LogLevels.Select(l => new MinimumLogLevel(l.Ordinal, l.Name)));
@@ -296,7 +291,8 @@ protected override void TransferSettingsToView(Rubberduck.Settings.GeneralSettin
296291

297292
private void TransferSettingsToView(IGeneralSettings general, IHotkeySettings hottkey)
298293
{
299-
SelectedLanguage = Languages.First(l => l.Code == general.Language.Code);
294+
SelectedLanguage = Languages.FirstOrDefault(culture => culture.Code == general.Language.Code);
295+
300296
Hotkeys = hottkey == null
301297
? new ObservableCollection<HotkeySetting>()
302298
: new ObservableCollection<HotkeySetting>(hottkey.Settings);

Rubberduck.Resources/Locales.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System.Collections.Generic;
2+
using System.Globalization;
3+
using System.Linq;
4+
using System.Reflection;
5+
using System.Resources;
6+
7+
namespace Rubberduck.Resources
8+
{
9+
public static class Locales
10+
{
11+
private static List<CultureInfo> _cultures;
12+
13+
public static CultureInfo DefaultCulture => CultureInfo.GetCultureInfo("en-US");
14+
15+
//Adapted from https://stackoverflow.com/a/32161480/4088852
16+
public static List<CultureInfo> AvailableCultures
17+
{
18+
get
19+
{
20+
if (!(_cultures is null))
21+
{
22+
return _cultures;
23+
}
24+
25+
_cultures = new List<CultureInfo> { DefaultCulture };
26+
var resources = new ResourceManager("Rubberduck.Resources.RubberduckUI", Assembly.GetAssembly(typeof(Locales)));
27+
foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures).Where(locale => !locale.Equals(CultureInfo.InvariantCulture)))
28+
{
29+
try
30+
{
31+
if (!(resources.GetResourceSet(culture, true, false) is null))
32+
{
33+
_cultures.Add(culture);
34+
}
35+
}
36+
catch (CultureNotFoundException)
37+
{
38+
// Ignored.
39+
}
40+
}
41+
42+
return _cultures;
43+
}
44+
}
45+
}
46+
}

Rubberduck.VBEEditor/SafeComWrappers/Abstract/HostApplicationBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public virtual bool TryOpenDocumentDesigner(QualifiedModuleName moduleName)
183183
return false;
184184
}
185185

186-
public virtual IEnumerable<HostAutoMacro> AutoMacroIdentifiers => null;
186+
public virtual IEnumerable<HostAutoMacro> AutoMacroIdentifiers => new HostAutoMacro [] { };
187187

188188
private static string GetName(IVBComponent component)
189189
{

0 commit comments

Comments
 (0)