Browse Source

make TreeViewOptionsDialog remember the last selection

pull/517/head
Siegfried Pammer 12 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
throw new ArgumentNullException("optionPanels"); throw new ArgumentNullException("optionPanels");
InitializeComponent(); 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(); var list = optionPanels.Select(op => new OptionPanelNode(op, this)).ToList();
treeView.ItemsSource = list; treeView.ItemsSource = list;
if (list.Count > 0) {
list[0].IsSelected = true;
}
} }
void okButtonClick(object sender, RoutedEventArgs e) void okButtonClick(object sender, RoutedEventArgs e)
@ -71,9 +68,42 @@ namespace ICSharpCode.SharpDevelop.Gui
Close(); 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) protected override void OnClosed(EventArgs e)
{ {
base.OnClosed(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>()) { foreach (IDisposable op in optionPanels.OfType<IDisposable>()) {
op.Dispose(); op.Dispose();
} }
@ -128,10 +158,12 @@ namespace ICSharpCode.SharpDevelop.Gui
this.dialog = parent.dialog; this.dialog = parent.dialog;
} }
public string ID {
get { return OptionPanelDescriptor.ID; }
}
public string Title { public string Title {
get { get { return OptionPanelDescriptor.Label; }
return OptionPanelDescriptor.Label;
}
} }
IOptionPanel optionPanel; IOptionPanel optionPanel;

Loading…
Cancel
Save