@@ -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