@@ -13,8 +13,13 @@ public partial class NewProject : Window
13
13
public static string newName = null ;
14
14
public static string templateZipPath = null ;
15
15
16
+ bool isInitializing = true ; // to keep OnChangeEvent from firing too early
17
+ int previousSelectedTemplateIndex = - 1 ;
18
+ int previousSelectedModuleIndex = - 1 ;
19
+
16
20
public NewProject ( string unityVersion , string suggestedName , string targetFolder )
17
21
{
22
+ isInitializing = true ;
18
23
InitializeComponent ( ) ;
19
24
20
25
// get version
@@ -25,22 +30,26 @@ public NewProject(string unityVersion, string suggestedName, string targetFolder
25
30
lblNewProjectFolder . Content = targetFolder ;
26
31
27
32
// 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 ;
29
34
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
31
36
if ( MainWindow . unityInstalledVersions . ContainsKey ( unityVersion ) == true )
32
37
{
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 ++ )
37
40
{
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
+ }
40
47
}
41
- UpdateTemplatesDropDown ( item . Value ) ;
48
+
49
+ UpdateTemplatesDropDown ( ( gridAvailableVersions . SelectedItem as UnityInstallation ) . Path ) ;
50
+ UpdateModulesDropdown ( newVersion ) ;
42
51
}
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
44
53
{
45
54
var path = MainWindow . unityInstallationsSource [ 0 ] . Path ;
46
55
gridAvailableVersions . SelectedIndex = 0 ;
@@ -52,7 +61,9 @@ public NewProject(string unityVersion, string suggestedName, string targetFolder
52
61
txtNewProjectName . Focus ( ) ;
53
62
txtNewProjectName . SelectAll ( ) ;
54
63
newProjectName = txtNewProjectName . Text ;
55
- }
64
+
65
+ isInitializing = false ;
66
+ } // NewProject
56
67
57
68
void UpdateTemplatesDropDown ( string unityPath )
58
69
{
@@ -61,6 +72,21 @@ void UpdateTemplatesDropDown(string unityPath)
61
72
cmbNewProjectTemplate . SelectedIndex = 0 ;
62
73
lblTemplateTitleAndCount . Content = "Templates: (" + ( cmbNewProjectTemplate . Items . Count - 1 ) + ")" ;
63
74
}
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
+
64
90
private void BtnCreateNewProject_Click ( object sender , RoutedEventArgs e )
65
91
{
66
92
templateZipPath = ( ( KeyValuePair < string , string > ) cmbNewProjectTemplate . SelectedValue ) . Value ;
@@ -97,6 +123,21 @@ private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
97
123
e . Handled = true ;
98
124
break ;
99
125
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
+
100
141
DialogResult = false ;
101
142
e . Handled = true ;
102
143
break ;
@@ -107,10 +148,10 @@ private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
107
148
108
149
void UpdateSelectedVersion ( )
109
150
{
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 )
112
153
{
113
- newVersion = k . Value . Key ;
154
+ newVersion = k . Version ;
114
155
}
115
156
}
116
157
@@ -143,14 +184,15 @@ void GenerateNewName()
143
184
// FIXME this gets called when list is updated?
144
185
private void GridAvailableVersions_SelectionChanged ( object sender , SelectionChangedEventArgs e )
145
186
{
146
- if ( gridAvailableVersions . SelectedItem == null ) return ;
187
+ if ( gridAvailableVersions . SelectedItem == null || isInitializing == true ) return ;
147
188
// 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 ;
150
191
GenerateNewName ( ) ;
151
192
152
193
// update templates list for selected unity version
153
- UpdateTemplatesDropDown ( k . Value . Value ) ;
194
+ UpdateTemplatesDropDown ( k . Path ) ;
195
+ UpdateModulesDropdown ( k . Version ) ;
154
196
}
155
197
156
198
private void GridAvailableVersions_Loaded ( object sender , RoutedEventArgs e )
@@ -163,5 +205,16 @@ private void GridAvailableVersions_Loaded(object sender, RoutedEventArgs e)
163
205
row . Foreground = Brushes . White ;
164
206
row . FontWeight = FontWeights . Bold ;
165
207
}
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
+ }
166
219
}
167
220
}
0 commit comments