@@ -13,8 +13,13 @@ public partial class NewProject : Window
1313 public static string newName = null ;
1414 public static string templateZipPath = null ;
1515
16+ bool isInitializing = true ; // to keep OnChangeEvent from firing too early
17+ int previousSelectedTemplateIndex = - 1 ;
18+ int previousSelectedModuleIndex = - 1 ;
19+
1620 public NewProject ( string unityVersion , string suggestedName , string targetFolder )
1721 {
22+ isInitializing = true ;
1823 InitializeComponent ( ) ;
1924
2025 // get version
@@ -25,22 +30,26 @@ public NewProject(string unityVersion, string suggestedName, string targetFolder
2530 lblNewProjectFolder . Content = targetFolder ;
2631
2732 // fill available versions, TODO could show which modules are installed
28- if ( gridAvailableVersions . ItemsSource == null ) gridAvailableVersions . ItemsSource = MainWindow . unityInstalledVersions ;
33+ if ( gridAvailableVersions . ItemsSource == null ) gridAvailableVersions . ItemsSource = MainWindow . unityInstallationsSource ;
2934
30- // we dont have that version installed, TODO show info or pick closest?, for now picks the first item
35+ // we have that version installed
3136 if ( MainWindow . unityInstalledVersions . ContainsKey ( unityVersion ) == true )
3237 {
33- // autopick this unity version
34- var item = Tools . GetEntry ( MainWindow . unityInstalledVersions , unityVersion ) ;
35- int index = gridAvailableVersions . Items . IndexOf ( item ) ;
36- if ( index > - 1 )
38+ // find this unity version, TODO theres probably easier way than looping all
39+ for ( int i = 0 ; i < MainWindow . unityInstallationsSource . Length ; i ++ )
3740 {
38- gridAvailableVersions . SelectedIndex = index ;
39- gridAvailableVersions . ScrollIntoView ( item ) ;
41+ if ( MainWindow . unityInstallationsSource [ i ] . Version == newVersion )
42+ {
43+ gridAvailableVersions . SelectedIndex = i ;
44+ gridAvailableVersions . ScrollIntoView ( gridAvailableVersions . SelectedItem ) ;
45+ break ;
46+ }
4047 }
41- UpdateTemplatesDropDown ( item . Value ) ;
48+
49+ UpdateTemplatesDropDown ( ( gridAvailableVersions . SelectedItem as UnityInstallation ) . Path ) ;
50+ UpdateModulesDropdown ( newVersion ) ;
4251 }
43- else // we dont have requested unity version, get templates for the first item
52+ else // we dont have requested unity version, select first item then
4453 {
4554 var path = MainWindow . unityInstallationsSource [ 0 ] . Path ;
4655 gridAvailableVersions . SelectedIndex = 0 ;
@@ -52,7 +61,9 @@ public NewProject(string unityVersion, string suggestedName, string targetFolder
5261 txtNewProjectName . Focus ( ) ;
5362 txtNewProjectName . SelectAll ( ) ;
5463 newProjectName = txtNewProjectName . Text ;
55- }
64+
65+ isInitializing = false ;
66+ } // NewProject
5667
5768 void UpdateTemplatesDropDown ( string unityPath )
5869 {
@@ -61,6 +72,21 @@ void UpdateTemplatesDropDown(string unityPath)
6172 cmbNewProjectTemplate . SelectedIndex = 0 ;
6273 lblTemplateTitleAndCount . Content = "Templates: (" + ( cmbNewProjectTemplate . Items . Count - 1 ) + ")" ;
6374 }
75+
76+
77+ void UpdateModulesDropdown ( string version )
78+ {
79+ // get modules and stick into combobox
80+ cmbNewProjectPlatform . ItemsSource = Tools . GetPlatformsForUnityVersion ( version ) ;
81+ System . Console . WriteLine ( Tools . GetPlatformsForUnityVersion ( version ) . Length ) ;
82+
83+ // TODO remember this selection next time
84+ cmbNewProjectPlatform . SelectedIndex = 0 ;
85+ //lblTemplateTitleAndCount.Content = "Templates: (" + (cmbNewProjectTemplate.Items.Count - 1) + ")";
86+ }
87+
88+
89+
6490 private void BtnCreateNewProject_Click ( object sender , RoutedEventArgs e )
6591 {
6692 templateZipPath = ( ( KeyValuePair < string , string > ) cmbNewProjectTemplate . SelectedValue ) . Value ;
@@ -97,6 +123,21 @@ private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
97123 e . Handled = true ;
98124 break ;
99125 case Key . Escape : // esc cancel
126+ // if pressed esc while combobox is open, close that one instead of closing window
127+ if ( cmbNewProjectTemplate . IsDropDownOpen )
128+ {
129+ cmbNewProjectTemplate . IsDropDownOpen = false ;
130+ if ( previousSelectedTemplateIndex > - 1 ) cmbNewProjectTemplate . SelectedIndex = previousSelectedTemplateIndex ;
131+ return ;
132+ }
133+
134+ if ( cmbNewProjectPlatform . IsDropDownOpen )
135+ {
136+ cmbNewProjectPlatform . IsDropDownOpen = false ;
137+ if ( previousSelectedModuleIndex > - 1 ) cmbNewProjectPlatform . SelectedIndex = previousSelectedModuleIndex ;
138+ return ;
139+ }
140+
100141 DialogResult = false ;
101142 e . Handled = true ;
102143 break ;
@@ -107,10 +148,10 @@ private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
107148
108149 void UpdateSelectedVersion ( )
109150 {
110- var k = gridAvailableVersions . SelectedItem as KeyValuePair < string , string > ? ;
111- if ( k != null && k . Value . Key != newVersion )
151+ var k = gridAvailableVersions . SelectedItem as UnityInstallation ;
152+ if ( k != null && k . Version != newVersion )
112153 {
113- newVersion = k . Value . Key ;
154+ newVersion = k . Version ;
114155 }
115156 }
116157
@@ -143,14 +184,15 @@ void GenerateNewName()
143184 // FIXME this gets called when list is updated?
144185 private void GridAvailableVersions_SelectionChanged ( object sender , SelectionChangedEventArgs e )
145186 {
146- if ( gridAvailableVersions . SelectedItem == null ) return ;
187+ if ( gridAvailableVersions . SelectedItem == null || isInitializing == true ) return ;
147188 // new row selected, generate new project name for this version
148- var k = gridAvailableVersions . SelectedItem as KeyValuePair < string , string > ? ;
149- newVersion = k . Value . Key ;
189+ var k = gridAvailableVersions . SelectedItem as UnityInstallation ;
190+ newVersion = k . Version ;
150191 GenerateNewName ( ) ;
151192
152193 // update templates list for selected unity version
153- UpdateTemplatesDropDown ( k . Value . Value ) ;
194+ UpdateTemplatesDropDown ( k . Path ) ;
195+ UpdateModulesDropdown ( k . Version ) ;
154196 }
155197
156198 private void GridAvailableVersions_Loaded ( object sender , RoutedEventArgs e )
@@ -163,5 +205,16 @@ private void GridAvailableVersions_Loaded(object sender, RoutedEventArgs e)
163205 row . Foreground = Brushes . White ;
164206 row . FontWeight = FontWeights . Bold ;
165207 }
208+
209+ private void CmbNewProjectTemplate_DropDownOpened ( object sender , System . EventArgs e )
210+ {
211+ // on open, take current selection, so can undo later
212+ previousSelectedTemplateIndex = cmbNewProjectTemplate . SelectedIndex ;
213+ }
214+
215+ private void CmbNewProjectPlatform_DropDownOpened ( object sender , System . EventArgs e )
216+ {
217+ previousSelectedModuleIndex = cmbNewProjectPlatform . SelectedIndex ;
218+ }
166219 }
167220}
0 commit comments