Browse Source

make TreeViewOptionsDialog remember the last selection

pull/517/head
Siegfried Pammer 11 years ago
parent
commit
8bdcedaa75
  1. 46
      src/Main/Base/Project/Src/Gui/Dialogs/TreeViewOptionsDialog.xaml.cs

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

@ -46,13 +46,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -46,13 +46,10 @@ namespace ICSharpCode.SharpDevelop.Gui
throw new ArgumentNullException("optionPanels");
InitializeComponent();
ICSharpCode.SharpDevelop.Gui.FormLocationHelper.ApplyWindow(this, "TreeViewOptionsDialog.WindowBounds", true);
FormLocationHelper.ApplyWindow(this, "TreeViewOptionsDialog.WindowBounds", true);
var list = optionPanels.Select(op => new OptionPanelNode(op, this)).ToList();
treeView.ItemsSource = list;
if (list.Count > 0) {
list[0].IsSelected = true;
}
}
void okButtonClick(object sender, RoutedEventArgs e)
@ -71,9 +68,42 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -71,9 +68,42 @@ namespace ICSharpCode.SharpDevelop.Gui
Close();
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
string[] lastOpenedPanelID = SD.PropertyService.Get("TreeViewOptionsDialog.LastOpenedPanelID", "UIOptions/SelectCulture").Split('/');
OptionPanelNode lastOpenedPanelNode = null;
for (int i = 0; i < lastOpenedPanelID.Length; i++) {
IEnumerable<OptionPanelNode> currentList;
if (lastOpenedPanelNode == null) {
currentList = (IEnumerable<OptionPanelNode>)treeView.ItemsSource;
} else {
currentList = lastOpenedPanelNode.Children;
}
var nextNode = currentList.FirstOrDefault(op => lastOpenedPanelID[i].Equals(op.ID, StringComparison.Ordinal));
if (nextNode == null)
break;
lastOpenedPanelNode = nextNode;
}
if (lastOpenedPanelNode != null)
lastOpenedPanelNode.IsSelected = true;
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
var selectedPanelNode = treeView.SelectedItem as OptionPanelNode;
string openedPanelID = "";
while (selectedPanelNode != null) {
if (openedPanelID.Length > 0)
openedPanelID = "/" + openedPanelID;
openedPanelID = selectedPanelNode.ID + openedPanelID;
selectedPanelNode = selectedPanelNode.Parent;
}
if (openedPanelID == "")
openedPanelID = "UIOptions/SelectCulture";
SD.PropertyService.Set("TreeViewOptionsDialog.LastOpenedPanelID", openedPanelID);
foreach (IDisposable op in optionPanels.OfType<IDisposable>()) {
op.Dispose();
}
@ -128,10 +158,12 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -128,10 +158,12 @@ namespace ICSharpCode.SharpDevelop.Gui
this.dialog = parent.dialog;
}
public string ID {
get { return OptionPanelDescriptor.ID; }
}
public string Title {
get {
return OptionPanelDescriptor.Label;
}
get { return OptionPanelDescriptor.Label; }
}
IOptionPanel optionPanel;

Loading…
Cancel
Save