Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 8bdceda

Browse files
make TreeViewOptionsDialog remember the last selection
1 parent 6c46af6 commit 8bdceda

1 file changed

Lines changed: 39 additions & 7 deletions

File tree

src/Main/Base/Project/Src/Gui/Dialogs/TreeViewOptionsDialog.xaml.cs

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,10 @@ public TreeViewOptionsDialog(IEnumerable<IOptionPanelDescriptor> optionPanels)
4646
throw new ArgumentNullException("optionPanels");
4747
InitializeComponent();
4848

49-
ICSharpCode.SharpDevelop.Gui.FormLocationHelper.ApplyWindow(this, "TreeViewOptionsDialog.WindowBounds", true);
49+
FormLocationHelper.ApplyWindow(this, "TreeViewOptionsDialog.WindowBounds", true);
5050

5151
var list = optionPanels.Select(op => new OptionPanelNode(op, this)).ToList();
5252
treeView.ItemsSource = list;
53-
if (list.Count > 0) {
54-
list[0].IsSelected = true;
55-
}
5653
}
5754

5855
void okButtonClick(object sender, RoutedEventArgs e)
@@ -71,9 +68,42 @@ void cancelButtonClick(object sender, RoutedEventArgs e)
7168
Close();
7269
}
7370

71+
protected override void OnSourceInitialized(EventArgs e)
72+
{
73+
base.OnSourceInitialized(e);
74+
string[] lastOpenedPanelID = SD.PropertyService.Get("TreeViewOptionsDialog.LastOpenedPanelID", "UIOptions/SelectCulture").Split('/');
75+
76+
OptionPanelNode lastOpenedPanelNode = null;
77+
for (int i = 0; i < lastOpenedPanelID.Length; i++) {
78+
IEnumerable<OptionPanelNode> currentList;
79+
if (lastOpenedPanelNode == null) {
80+
currentList = (IEnumerable<OptionPanelNode>)treeView.ItemsSource;
81+
} else {
82+
currentList = lastOpenedPanelNode.Children;
83+
}
84+
var nextNode = currentList.FirstOrDefault(op => lastOpenedPanelID[i].Equals(op.ID, StringComparison.Ordinal));
85+
if (nextNode == null)
86+
break;
87+
lastOpenedPanelNode = nextNode;
88+
}
89+
if (lastOpenedPanelNode != null)
90+
lastOpenedPanelNode.IsSelected = true;
91+
}
92+
7493
protected override void OnClosed(EventArgs e)
7594
{
7695
base.OnClosed(e);
96+
var selectedPanelNode = treeView.SelectedItem as OptionPanelNode;
97+
string openedPanelID = "";
98+
while (selectedPanelNode != null) {
99+
if (openedPanelID.Length > 0)
100+
openedPanelID = "/" + openedPanelID;
101+
openedPanelID = selectedPanelNode.ID + openedPanelID;
102+
selectedPanelNode = selectedPanelNode.Parent;
103+
}
104+
if (openedPanelID == "")
105+
openedPanelID = "UIOptions/SelectCulture";
106+
SD.PropertyService.Set("TreeViewOptionsDialog.LastOpenedPanelID", openedPanelID);
77107
foreach (IDisposable op in optionPanels.OfType<IDisposable>()) {
78108
op.Dispose();
79109
}
@@ -128,10 +158,12 @@ public OptionPanelNode(IOptionPanelDescriptor optionPanel, OptionPanelNode paren
128158
this.dialog = parent.dialog;
129159
}
130160

161+
public string ID {
162+
get { return OptionPanelDescriptor.ID; }
163+
}
164+
131165
public string Title {
132-
get {
133-
return OptionPanelDescriptor.Label;
134-
}
166+
get { return OptionPanelDescriptor.Label; }
135167
}
136168

137169
IOptionPanel optionPanel;

0 commit comments

Comments
 (0)