Skip to content

Commit 12b5c30

Browse files
committed
add separate button for create project and repository, closes #218
1 parent 0e348c8 commit 12b5c30

2 files changed

Lines changed: 59 additions & 39 deletions

File tree

UnityLauncherPro/NewProject.xaml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
xmlns:data="clr-namespace:UnityLauncherPro.Data"
88
d:DataContext="{d:DesignInstance Type=local:NewProject}"
99
mc:Ignorable="d"
10-
Title="Create New Project" Height="660" Width="650" Background="{DynamicResource ThemeDarkestBackground}" PreviewKeyDown="Window_PreviewKeyDown" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" ShowInTaskbar="True">
10+
Title="Create New Project" Height="660" Width="670" Background="{DynamicResource ThemeDarkestBackground}" PreviewKeyDown="Window_PreviewKeyDown" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" ShowInTaskbar="True">
1111

1212
<Grid>
1313
<Grid.ColumnDefinitions>
@@ -67,11 +67,13 @@
6767
<!--<Label x:Name="lblNewProjectFolder" Content="(folder)" Foreground="{DynamicResource ThemeButtonForegroundDisabled}" Margin="0" FontSize="10" Padding="5,0,5,3" />-->
6868
<Grid HorizontalAlignment="Stretch" Margin="0,20,0,0">
6969
<Grid.ColumnDefinitions>
70-
<ColumnDefinition Width="0.7*"/>
70+
<ColumnDefinition Width="0.3*"/>
71+
<ColumnDefinition Width="*"/>
7172
<ColumnDefinition Width="*"/>
7273
</Grid.ColumnDefinitions>
73-
<Button Grid.Column="0" Style="{StaticResource CustomButton}" x:Name="btnCancelNewProject" Margin="0,0,3,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCancelNewProject_Click" TabIndex="4" Content="Cancel"/>
74-
<Button Grid.Column="1" Style="{StaticResource CustomButton}" x:Name="btnCreateNewProject" Margin="3,0,0,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCreateNewProject_Click" TabIndex="3" Content="_Create Project"/>
74+
<Button Grid.Column="0" Style="{StaticResource CustomButton}" x:Name="btnCancelNewProject" Margin="0,0,3,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCancelNewProject_Click" TabIndex="4" Content="_Cancel"/>
75+
<Button Grid.Column="1" Style="{StaticResource CustomButton}" x:Name="btnCreateNewProjectAndRepo" Margin="3,0,0,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="btnCreateNewProjectAndRepo_Click" TabIndex="3" Content="New Project+_Repo"/>
76+
<Button Grid.Column="2" Style="{StaticResource CustomButton}" x:Name="btnCreateNewProject" Margin="3,0,0,3" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="35" Click="BtnCreateNewProject_Click" TabIndex="3" Content="_New Project"/>
7577
</Grid>
7678

7779
<Expander x:Name="expVersionControl" Margin="0,10,0,0" Header="Version Control (Github)" Foreground="{DynamicResource ThemeButtonForeground}" IsExpanded="True" Collapsed="expVersionControl_Collapsed" Expanded="expVersionControl_Collapsed">

UnityLauncherPro/NewProject.xaml.cs

Lines changed: 53 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,16 @@ public NewProject(string unityVersion, string suggestedName, string targetFolder
6262

6363
txtNewProjectFolder.Text = targetFolder;
6464

65+
UpdateCreateButtonsEnabledState();
66+
6567
if (MainWindow.unityInstallationsSource.Count == 0)
6668
{
6769
Tools.SetStatus("No Unity installations found! Please add Unity installations first.");
6870
isInitializing = false;
6971
btnCreateNewProject.IsEnabled = false;
72+
btnCreateNewProjectAndRepo.IsEnabled = false;
7073
return;
7174
}
72-
else
73-
{
74-
btnCreateNewProject.IsEnabled = true;
75-
}
7675

7776
// fill available versions, only replace if it's a different collection instance
7877
if (!ReferenceEquals(gridAvailableVersions.ItemsSource, MainWindow.unityInstallationsSource))
@@ -217,10 +216,26 @@ void UpdateModulesDropdown(string version)
217216

218217
bool isCreatingProject = false;
219218
private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e)
219+
{
220+
await CreateNewProject(withRepo: false);
221+
}
222+
223+
private async void btnCreateNewProjectAndRepo_Click(object sender, RoutedEventArgs e)
224+
{
225+
await CreateNewProject(withRepo: true);
226+
}
227+
228+
private async Task CreateNewProject(bool withRepo)
220229
{
221230
if (isCreatingProject) return;
222231
isCreatingProject = true;
223232

233+
btnCreateNewProject.IsEnabled = false;
234+
btnCreateNewProjectAndRepo.IsEnabled = false;
235+
236+
try
237+
{
238+
224239
// check if projectname already exists (only if should be automatically created name)
225240
var targetPath = Path.Combine(targetFolder, txtNewProjectName.Text);
226241
if (txtNewProjectName.IsEnabled == true && Directory.Exists(targetPath) == true)
@@ -279,9 +294,7 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e)
279294
Settings.Default.Save();
280295
}
281296

282-
btnCreateNewProject.IsEnabled = false;
283-
284-
if (chkEnableVersionControl.IsChecked == true)
297+
if (withRepo && chkEnableVersionControl.IsChecked == true)
285298
{
286299
// setup local git
287300
try
@@ -352,7 +365,7 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e)
352365
} // if version control enabled
353366

354367
// create readme if enabled
355-
if (chkAddReadme.IsChecked == true)
368+
if (withRepo && chkAddReadme.IsChecked == true)
356369
{
357370
var readmePath = Path.Combine(txtNewProjectFolder.Text, txtNewProjectName.Text, "README.md");
358371
try
@@ -370,7 +383,7 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e)
370383
}
371384

372385
// download .gitignore if enabled
373-
if (chkAddUnityGitIgnore.IsChecked == true)
386+
if (withRepo && chkAddUnityGitIgnore.IsChecked == true)
374387
{
375388
//var gitIgnoreUrl = "https://raw.githubusercontent.com/github/gitignore/refs/heads/main/Unity.gitignore";
376389

@@ -391,13 +404,12 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e)
391404
{
392405
Tools.SetStatus("Failed to create .gitignore file for this project.");
393406
}
394-
}
407+
} // if add gitignore
395408

396-
if (chkEnableVersionControl.IsChecked == true)
409+
if (withRepo && chkEnableVersionControl.IsChecked == true)
397410
{
398411
if (chkInitialCommit.IsChecked == true)
399412
{
400-
Console.WriteLine(1);
401413
try
402414
{
403415
await GithubActions.RunGitAsync(Path.Combine(txtNewProjectFolder.Text, txtNewProjectName.Text), "add .");
@@ -421,11 +433,26 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e)
421433

422434
} // if version control enabled
423435

424-
btnCreateNewProject.IsEnabled = true;
425-
isCreatingProject = false;
436+
}
437+
finally
438+
{
439+
isCreatingProject = false;
440+
UpdateCreateButtonsEnabledState();
441+
}
426442

427443
DialogResult = true;
428-
} // BtnCreateNewProject_Click
444+
}
445+
446+
private void UpdateCreateButtonsEnabledState()
447+
{
448+
bool folderExists = Directory.Exists(txtNewProjectFolder.Text);
449+
bool projectNameAvailable = !string.IsNullOrWhiteSpace(txtNewProjectName.Text) && !Directory.Exists(Path.Combine(targetFolder, txtNewProjectName.Text));
450+
bool onlineTemplateReady = !(listOnlineTemplates.SelectedItem is OnlineTemplateItem selectedOnlineTemplate) || selectedOnlineTemplate.IsDownloaded;
451+
bool versionControlEnabled = chkEnableVersionControl.IsChecked == true;
452+
453+
btnCreateNewProject.IsEnabled = folderExists && projectNameAvailable && onlineTemplateReady && !isCreatingProject;
454+
btnCreateNewProjectAndRepo.IsEnabled = btnCreateNewProject.IsEnabled && versionControlEnabled;
455+
}
429456

430457

431458
private void BtnCancelNewProject_Click(object sender, RoutedEventArgs e)
@@ -434,7 +461,7 @@ private void BtnCancelNewProject_Click(object sender, RoutedEventArgs e)
434461
}
435462

436463

437-
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
464+
private async void Window_PreviewKeyDown(object sender, KeyEventArgs e)
438465
{
439466
switch (e.Key)
440467
{
@@ -460,7 +487,7 @@ private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
460487
e.Handled = true; // override writing to textbox
461488
break;
462489
case Key.Enter: // enter, create proj
463-
BtnCreateNewProject_Click(null, null);
490+
await CreateNewProject(withRepo: false);
464491
e.Handled = true;
465492
break;
466493
case Key.Escape: // esc cancel
@@ -523,15 +550,15 @@ private void TxtNewProjectName_TextChanged(object sender, TextChangedEventArgs e
523550
System.Console.WriteLine("Project already exists");
524551
txtNewProjectName.BorderBrush = Brushes.Red; // not visible if focused
525552
txtNewProjectName.ToolTip = "Project folder already exists";
526-
btnCreateNewProject.IsEnabled = false;
527553
}
528554
else
529555
{
530556
txtNewProjectName.BorderBrush = null;
531-
btnCreateNewProject.IsEnabled = true;
532557
txtNewProjectName.ToolTip = "";
533558
}
534559

560+
UpdateCreateButtonsEnabledState();
561+
535562
//System.Console.WriteLine("newProjectName: " + txtNewProjectName.Text);
536563

537564
newProjectName = txtNewProjectName.Text;
@@ -612,14 +639,14 @@ private void CmbNewProjectPlatform_DropDownOpened(object sender, System.EventArg
612639
previousSelectedModuleIndex = cmbNewProjectPlatform.SelectedIndex;
613640
}
614641

615-
private void gridAvailableVersions_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
642+
private async void gridAvailableVersions_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
616643
{
617644
// check that we clicked actually on a row
618645
var src = VisualTreeHelper.GetParent((DependencyObject)e.OriginalSource);
619646
var srcType = src.GetType();
620647
if (srcType == typeof(ContentPresenter))
621648
{
622-
BtnCreateNewProject_Click(null, null);
649+
await CreateNewProject(withRepo: false);
623650
}
624651
}
625652

@@ -635,14 +662,7 @@ private void chkEnableVersionControl_Checked(object sender, RoutedEventArgs e)
635662
{
636663
bool state = chkEnableVersionControl.IsChecked == true;
637664

638-
if (state == true)
639-
{
640-
btnCreateNewProject.Content = "Create Project + GitHub Repo";
641-
}
642-
else
643-
{
644-
btnCreateNewProject.Content = "Create Project";
645-
}
665+
btnCreateNewProjectAndRepo.IsEnabled = state;
646666

647667
if (isInitializing) return;
648668

@@ -699,16 +719,16 @@ private void txtNewProjectFolder_TextChanged(object sender, TextChangedEventArgs
699719
if (Directory.Exists(txtNewProjectFolder.Text) == false)
700720
{
701721
txtNewProjectFolder.BorderBrush = Brushes.Red; // not visible if focused
702-
btnCreateNewProject.IsEnabled = false;
703722
btnCreateMissingFolder.IsEnabled = true;
704723
}
705724
else
706725
{
707726
txtNewProjectFolder.BorderBrush = null;
708-
btnCreateNewProject.IsEnabled = true;
709727
targetFolder = txtNewProjectFolder.Text;
710728
btnCreateMissingFolder.IsEnabled = false;
711729
}
730+
731+
UpdateCreateButtonsEnabledState();
712732
}
713733

714734
private void btnCreateMissingFolder_Click(object sender, RoutedEventArgs e)
@@ -942,8 +962,6 @@ private void listOnlineTemplates_SelectionChanged(object sender, SelectionChange
942962
cmbNewProjectTemplate.IsEnabled = false;
943963
cmbNewProjectTemplate.SelectedIndex = 0; // Reset to default
944964

945-
// disable create button if template not downloaded yet
946-
btnCreateNewProject.IsEnabled = selectedTemplate.IsDownloaded;
947965
btnCreateNewProject.Content = selectedTemplate.IsDownloaded ? "Create Project" : "Download Template First >";
948966
}
949967
else
@@ -955,9 +973,10 @@ private void listOnlineTemplates_SelectionChanged(object sender, SelectionChange
955973
cmbNewProjectTemplate.IsEnabled = true;
956974

957975
// enable create button
958-
btnCreateNewProject.IsEnabled = true;
959976
btnCreateNewProject.Content = "Create Project";
960977
}
978+
979+
UpdateCreateButtonsEnabledState();
961980
}
962981

963982
private async void btnDownloadTemplate_Click(object sender, RoutedEventArgs e)
@@ -1230,6 +1249,5 @@ private void txtTokenInput_PasswordChanged(object sender, RoutedEventArgs e)
12301249
btnAuthorizeToken.IsEnabled = tokenSeemsOK;
12311250
}
12321251

1233-
12341252
} // class NewProject
12351253
} // namespace UnityLauncherPro

0 commit comments

Comments
 (0)