Skip to content

Commit 5be4882

Browse files
committed
new project: improve new project automatic naming (add unity minor versio number to name, and fallback to timestamp if a-z letters are taken), if press ESC while combobox dropdown is open then close that dropdown (instead of closing window), adding platform selection (combobox to select target platform)
1 parent 4eb001c commit 5be4882

File tree

4 files changed

+91
-33
lines changed

4 files changed

+91
-33
lines changed

UnityLauncherPro/NewProject.xaml

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
66
xmlns:local="clr-namespace:UnityLauncherPro"
77
mc:Ignorable="d"
8-
Title="Create New Project" Height="310" Width="352" Background="{DynamicResource ThemeDarkestBackground}" PreviewKeyDown="Window_PreviewKeyDown" ResizeMode="NoResize" WindowStartupLocation="CenterOwner">
8+
Title="Create New Project" Height="310" Width="450" Background="{DynamicResource ThemeDarkestBackground}" PreviewKeyDown="Window_PreviewKeyDown" ResizeMode="NoResize" WindowStartupLocation="CenterOwner">
99
<Window.Resources>
1010
<!-- custom buttons -->
1111
<Style x:Key="CustomButton" TargetType="{x:Type Button}">
@@ -175,30 +175,33 @@
175175
<Grid>
176176
<StackPanel Margin="10,3">
177177
<Label Content="Unity Version" Foreground="{DynamicResource ThemeButtonForeground}" Margin="0,0,0,3" Padding="5,5,5,3" />
178-
<DataGrid x:Name="gridAvailableVersions" KeyboardNavigation.TabNavigation = "None" SelectionMode="Single" Height="120" Margin="3,0" VerticalAlignment="Top" HeadersVisibility="None" AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True" Foreground="{DynamicResource ThemeButtonForeground}" Background="{DynamicResource ThemeMainBackgroundColor}" SelectionChanged="GridAvailableVersions_SelectionChanged" IsTabStop="True" TabIndex="1" Loaded="GridAvailableVersions_Loaded" EnableRowVirtualization="False" VerticalScrollBarVisibility="Visible">
178+
<DataGrid x:Name="gridAvailableVersions" KeyboardNavigation.TabNavigation = "None" SelectionMode="Single" Height="120" Margin="0" VerticalAlignment="Top" HeadersVisibility="None" AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True" Foreground="{DynamicResource ThemeButtonForeground}" Background="{DynamicResource ThemeMainBackgroundColor}" SelectionChanged="GridAvailableVersions_SelectionChanged" IsTabStop="True" TabIndex="1" Loaded="GridAvailableVersions_Loaded" EnableRowVirtualization="False" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled">
179179
<DataGrid.Columns>
180-
<DataGridTextColumn Header="Key" Binding="{Binding Key}" IsReadOnly="True" CanUserResize="False" MinWidth="300" />
180+
<DataGridTextColumn Header="Version" Binding="{Binding Version}" IsReadOnly="True" CanUserResize="False" MinWidth="80" />
181+
<DataGridTextColumn Header="Platforms" Binding="{Binding PlatformsCombined}" IsReadOnly="True" CanUserResize="False" MinWidth="370" />
181182
</DataGrid.Columns>
182183
</DataGrid>
183184

184185
<Grid HorizontalAlignment="Stretch" Margin="0,3,0,0">
185186
<Grid.ColumnDefinitions>
186-
<ColumnDefinition Width="60*"/>
187-
<ColumnDefinition Width="*"/>
187+
<ColumnDefinition Width="40*"/>
188+
<ColumnDefinition Width="20*"/>
188189
<ColumnDefinition Width="40*"/>
189190
</Grid.ColumnDefinitions>
190-
<Label Grid.Column="0" Content="Project Name:" Foreground="{DynamicResource ThemeButtonForeground}" Margin="0" Padding="5,5,5,0" />
191+
<Label Grid.Column="0" Content="Project Name:" Foreground="{DynamicResource ThemeButtonForeground}" Margin="0" Padding="0,5,5,0" />
192+
<Label Grid.Column="1" Content="Platform:" Foreground="{DynamicResource ThemeButtonForeground}" Margin="0" Padding="0,5,0,0" />
191193
<Label x:Name="lblTemplateTitleAndCount" Grid.Column="2" Content="Templates:" Foreground="{DynamicResource ThemeButtonForeground}" Margin="0" Padding="5,5,5,0" />
192194
</Grid>
193195

194196
<Grid HorizontalAlignment="Stretch" Margin="0,3,0,0">
195197
<Grid.ColumnDefinitions>
196-
<ColumnDefinition Width="60*"/>
197-
<ColumnDefinition Width="*"/>
198+
<ColumnDefinition Width="40*"/>
199+
<ColumnDefinition Width="20*"/>
198200
<ColumnDefinition Width="40*"/>
199201
</Grid.ColumnDefinitions>
200-
<TextBox Grid.Column="0" x:Name="txtNewProjectName" VerticalAlignment="Center" IsUndoEnabled="True" TextChanged="TxtNewProjectName_TextChanged" PreviewKeyDown="TxtNewProjectName_PreviewKeyDown" TabIndex="0" Margin="4,2" Grid.ColumnSpan="2" />
201-
<ComboBox Grid.Column="2" x:Name="cmbNewProjectTemplate" DisplayMemberPath="Key" SelectedIndex="0" Margin="4,0" TabIndex="2" />
202+
<TextBox Grid.Column="0" x:Name="txtNewProjectName" VerticalAlignment="Center" IsUndoEnabled="True" TextChanged="TxtNewProjectName_TextChanged" PreviewKeyDown="TxtNewProjectName_PreviewKeyDown" TabIndex="0" Margin="0,2,6,2" />
203+
<ComboBox Grid.Column="1" x:Name="cmbNewProjectPlatform" SelectedIndex="0" Margin="0,0,0,0" TabIndex="2" DropDownOpened="CmbNewProjectPlatform_DropDownOpened" />
204+
<ComboBox Grid.Column="2" x:Name="cmbNewProjectTemplate" DisplayMemberPath="Key" SelectedIndex="0" Margin="6,0,0,0" TabIndex="2" DropDownOpened="CmbNewProjectTemplate_DropDownOpened" />
202205
</Grid>
203206

204207
<Label x:Name="lblNewProjectFolder" Content="(folder)" Foreground="{DynamicResource ThemeButtonBackground}" Margin="0" FontSize="10" Padding="5,0,5,3" />
@@ -207,10 +210,10 @@
207210
<ColumnDefinition Width="*"/>
208211
<ColumnDefinition Width="*"/>
209212
</Grid.ColumnDefinitions>
210-
<Button Grid.Column="0" Style="{StaticResource CustomButton}" x:Name="btnCancelNewProject" Background="{DynamicResource ThemeButtonBackground}" Foreground="#FFC1C1C1" Margin="3,0,3,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCancelNewProject_Click" TabIndex="4" >
213+
<Button Grid.Column="0" Style="{StaticResource CustomButton}" x:Name="btnCancelNewProject" Background="{DynamicResource ThemeButtonBackground}" Foreground="#FFC1C1C1" Margin="0,0,3,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCancelNewProject_Click" TabIndex="4" >
211214
<Label Foreground="{DynamicResource ThemeButtonForeground}" Content="Cancel"/>
212215
</Button>
213-
<Button Grid.Column="1" Style="{StaticResource CustomButton}" x:Name="btnCreateNewProject" Background="{DynamicResource ThemeButtonBackground}" Foreground="#FFC1C1C1" Margin="3,0,3,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCreateNewProject_Click" TabIndex="3">
216+
<Button Grid.Column="1" Style="{StaticResource CustomButton}" x:Name="btnCreateNewProject" Background="{DynamicResource ThemeButtonBackground}" Foreground="#FFC1C1C1" Margin="3,0,0,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCreateNewProject_Click" TabIndex="3">
214217
<Label Foreground="{DynamicResource ThemeButtonForeground}" Content="_Create"/>
215218
</Button>
216219
</Grid>

UnityLauncherPro/NewProject.xaml.cs

Lines changed: 71 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

UnityLauncherPro/Tools.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,8 @@ public static string GetSuggestedProjectName(string version, string baseFolder)
10811081
}
10821082

10831083
// find next free folder checking all "unityversion_a-z" characters
1084-
var unityBaseVersion = version.Substring(0, version.IndexOf('.'));
1084+
var unityBaseVersion = version.Substring(0, version.LastIndexOf('.'));
1085+
unityBaseVersion = unityBaseVersion.Replace(".", "_");
10851086
for (int i = 97; i < 122; i++)
10861087
{
10871088
var newProject = unityBaseVersion + "_" + ((char)i);
@@ -1096,7 +1097,8 @@ public static string GetSuggestedProjectName(string version, string baseFolder)
10961097
return newProject;
10971098
}
10981099
}
1099-
return null;
1100+
// couldnt find free letter to use, lets add timestamp then
1101+
return unityBaseVersion + "_" + DateTime.Now.ToString("ddMMyyyy_HHmmss");
11001102
}
11011103

11021104
static void CreateEmptyProjectFolder(string path, string version)

UnityLauncherPro/UpgradeWindow.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@
189189
<Button Style="{StaticResource CustomButton}" x:Name="btnUpgradeProject" Background="{DynamicResource ThemeButtonBackground}" Foreground="#FFC1C1C1" Margin="0,434,8,0" BorderBrush="{x:Null}" HorizontalAlignment="Right" Width="159" VerticalAlignment="Top" Height="51" Click="BtnUpgradeProject_Click" >
190190
<Label Foreground="{DynamicResource ThemeButtonForeground}" Content="_Upgrade Project"/>
191191
</Button>
192-
<DataGrid x:Name="gridAvailableVersions" SelectionMode="Single" HorizontalAlignment="Left" Height="304" Margin="10,121,0,0" VerticalAlignment="Top" Width="393" HeadersVisibility="None" AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True" Foreground="{DynamicResource ThemeButtonForeground}" Background="{DynamicResource ThemeMainBackgroundColor}" PreviewKeyDown="GridAvailableVersions_PreviewKeyDown" Loaded="GridAvailableVersions_Loaded" PreviewMouseDoubleClick="GridAvailableVersions_PreviewMouseDoubleClick" VerticalScrollBarVisibility="Visible">
192+
<DataGrid x:Name="gridAvailableVersions" SelectionMode="Single" HorizontalAlignment="Left" Height="304" Margin="10,121,0,0" VerticalAlignment="Top" Width="393" HeadersVisibility="None" AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True" Foreground="{DynamicResource ThemeButtonForeground}" Background="{DynamicResource ThemeMainBackgroundColor}" PreviewKeyDown="GridAvailableVersions_PreviewKeyDown" Loaded="GridAvailableVersions_Loaded" PreviewMouseDoubleClick="GridAvailableVersions_PreviewMouseDoubleClick" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled">
193193
<DataGrid.Columns>
194194
<DataGridTextColumn Header="Key" Binding="{Binding Key}" IsReadOnly="True" />
195195
<DataGridTextColumn Header="Value" Binding="{Binding Value}" IsReadOnly="True" />

0 commit comments

Comments
 (0)