This repository was archived by the owner on Sep 11, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathMainWindowConfigHandler.cs
More file actions
129 lines (115 loc) · 3.8 KB
/
Copy pathMainWindowConfigHandler.cs
File metadata and controls
129 lines (115 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using MahApps.Metro.Controls;
using SPCode.Interop;
using SPCode.UI.Components;
using SPCode.UI.Windows;
using static SPCode.Interop.TranslationProvider;
namespace SPCode.UI;
public partial class MainWindow
{
/// <summary>
/// Fills the config menu with all available configs.
/// </summary>
public void FillConfigMenu()
{
ConfigMenu.Items.Clear();
for (var i = 0; i < Program.Configs.Count; ++i)
{
var item = new MenuItem
{
Header = Program.Configs[i].Name, IsCheckable = true, IsChecked = i == Program.SelectedConfig
};
item.Click += Item_Click;
ConfigMenu.Items.Add(item);
}
ConfigMenu.Items.Add(new Separator());
var editItem = new MenuItem() { Header = Translate("EditConfig") };
editItem.Click += EditItem_Click;
ConfigMenu.Items.Add(editItem);
}
private void EditItem_Click(object sender, RoutedEventArgs e)
{
var configWindow = new ConfigWindow() { Owner = this, ShowInTaskbar = false };
DimmMainWindow();
configWindow.ShowDialog();
RestoreMainWindow();
}
private async void Item_Click(object sender, RoutedEventArgs e)
{
var name = (string)((MenuItem)sender).Header;
await ChangeConfig(name);
LoggingControl.LogAction($"Changed to config \"{name}\".", 2);
}
/// <summary>
/// Changes to the specified config.
/// </summary>
/// <param name="index">The config index to change to</param>
public async Task ChangeConfig(int index)
{
if (index < 0 || index >= Program.Configs.Count)
{
return;
}
var config = Program.Configs[index];
await Task.Run(() =>
{
config.LoadSMDef();
});
this.Invoke(() =>
{
if (config.RejectedPaths.Any())
{
var sb = new StringBuilder();
sb.Append(
"SPCode was unauthorized to access the following directories to parse their includes: \n");
foreach (var path in config.RejectedPaths)
{
sb.Append($" - {path}\n");
}
LoggingControl.LogAction(sb.ToString());
}
var name = config.Name;
for (var i = 0; i < ConfigMenu.Items.Count - 2; ++i)
{
var item = (MenuItem)ConfigMenu.Items[i];
item.IsChecked = name == (string)item.Header;
}
Program.SelectedConfig = index;
Program.OptionsObject.Program_SelectedConfig = config.Name;
if (EditorReferences.Any())
{
foreach (var editor in EditorReferences)
{
editor.LoadAutoCompletes();
editor.editor.SyntaxHighlighting = new AeonEditorHighlighting();
editor.InvalidateVisual();
}
}
OBDirList.ItemsSource = config.SMDirectories; // very slow
OBDirList.Items.Refresh();
OBDirList.SelectedIndex = 0;
});
}
/// <summary>
/// Overload of ChangeConfig to take the name of the config.
/// </summary>
/// <param name="name">Name of the config to change to.</param>
private async Task ChangeConfig(string name)
{
for (var i = 0; i < Program.Configs.Count; ++i)
{
if (Program.Configs[i].Name == name)
{
await ChangeConfig(i);
return;
}
}
}
}