| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -7,7 +7,7 @@ | |||
| 7 | 7 | xmlns:data="clr-namespace:UnityLauncherPro.Data" | |
| 8 | 8 | d:DataContext="{d:DesignInstance Type=local:NewProject}" | |
| 9 | 9 | 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"> | ||
| 11 | 11 | ||
| 12 | 12 | <Grid> | |
| 13 | 13 | <Grid.ColumnDefinitions> | |
@@ -67,11 +67,13 @@ | |||
| 67 | 67 | <!--<Label x:Name="lblNewProjectFolder" Content="(folder)" Foreground="{DynamicResource ThemeButtonForegroundDisabled}" Margin="0" FontSize="10" Padding="5,0,5,3" />--> | |
| 68 | 68 | <Grid HorizontalAlignment="Stretch" Margin="0,20,0,0"> | |
| 69 | 69 | <Grid.ColumnDefinitions> | |
| 70 | - <ColumnDefinition Width="0.7*"/> | ||
| 70 | + <ColumnDefinition Width="0.3*"/> | ||
| 71 | + <ColumnDefinition Width="*"/> | ||
| 71 | 72 | <ColumnDefinition Width="*"/> | |
| 72 | 73 | </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"/> | ||
| 75 | 77 | </Grid> | |
| 76 | 78 | ||
| 77 | 79 | <Expander x:Name="expVersionControl" Margin="0,10,0,0" Header="Version Control (Github)" Foreground="{DynamicResource ThemeButtonForeground}" IsExpanded="True" Collapsed="expVersionControl_Collapsed" Expanded="expVersionControl_Collapsed"> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -62,17 +62,16 @@ public NewProject(string unityVersion, string suggestedName, string targetFolder | |||
| 62 | 62 | ||
| 63 | 63 | txtNewProjectFolder.Text = targetFolder; | |
| 64 | 64 | ||
| 65 | + UpdateCreateButtonsEnabledState(); | ||
| 66 | + | ||
| 65 | 67 | if (MainWindow.unityInstallationsSource.Count == 0) | |
| 66 | 68 | { | |
| 67 | 69 | Tools.SetStatus("No Unity installations found! Please add Unity installations first."); | |
| 68 | 70 | isInitializing = false; | |
| 69 | 71 | btnCreateNewProject.IsEnabled = false; | |
| 72 | + btnCreateNewProjectAndRepo.IsEnabled = false; | ||
| 70 | 73 | return; | |
| 71 | 74 | } | |
| 72 | - else | ||
| 73 | - { | ||
| 74 | - btnCreateNewProject.IsEnabled = true; | ||
| 75 | - } | ||
| 76 | 75 | ||
| 77 | 76 | // fill available versions, only replace if it's a different collection instance | |
| 78 | 77 | if (!ReferenceEquals(gridAvailableVersions.ItemsSource, MainWindow.unityInstallationsSource)) | |
@@ -217,10 +216,26 @@ void UpdateModulesDropdown(string version) | |||
| 217 | 216 | ||
| 218 | 217 | bool isCreatingProject = false; | |
| 219 | 218 | 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) | ||
| 220 | 229 | { | |
| 221 | 230 | if (isCreatingProject) return; | |
| 222 | 231 | isCreatingProject = true; | |
| 223 | 232 | ||
| 233 | + btnCreateNewProject.IsEnabled = false; | ||
| 234 | + btnCreateNewProjectAndRepo.IsEnabled = false; | ||
| 235 | + | ||
| 236 | + try | ||
| 237 | + { | ||
| 238 | + | ||
| 224 | 239 | // check if projectname already exists (only if should be automatically created name) | |
| 225 | 240 | var targetPath = Path.Combine(targetFolder, txtNewProjectName.Text); | |
| 226 | 241 | if (txtNewProjectName.IsEnabled == true && Directory.Exists(targetPath) == true) | |
@@ -279,9 +294,7 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e) | |||
| 279 | 294 | Settings.Default.Save(); | |
| 280 | 295 | } | |
| 281 | 296 | ||
| 282 | - btnCreateNewProject.IsEnabled = false; | ||
| 283 | - | ||
| 284 | - if (chkEnableVersionControl.IsChecked == true) | ||
| 297 | + if (withRepo && chkEnableVersionControl.IsChecked == true) | ||
| 285 | 298 | { | |
| 286 | 299 | // setup local git | |
| 287 | 300 | try | |
@@ -352,7 +365,7 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e) | |||
| 352 | 365 | } // if version control enabled | |
| 353 | 366 | ||
| 354 | 367 | // create readme if enabled | |
| 355 | - if (chkAddReadme.IsChecked == true) | ||
| 368 | + if (withRepo && chkAddReadme.IsChecked == true) | ||
| 356 | 369 | { | |
| 357 | 370 | var readmePath = Path.Combine(txtNewProjectFolder.Text, txtNewProjectName.Text, "README.md"); | |
| 358 | 371 | try | |
@@ -370,7 +383,7 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e) | |||
| 370 | 383 | } | |
| 371 | 384 | ||
| 372 | 385 | // download .gitignore if enabled | |
| 373 | - if (chkAddUnityGitIgnore.IsChecked == true) | ||
| 386 | + if (withRepo && chkAddUnityGitIgnore.IsChecked == true) | ||
| 374 | 387 | { | |
| 375 | 388 | //var gitIgnoreUrl = "https://raw.githubusercontent.com/github/gitignore/refs/heads/main/Unity.gitignore"; | |
| 376 | 389 | ||
@@ -391,13 +404,12 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e) | |||
| 391 | 404 | { | |
| 392 | 405 | Tools.SetStatus("Failed to create .gitignore file for this project."); | |
| 393 | 406 | } | |
| 394 | - } | ||
| 407 | + } // if add gitignore | ||
| 395 | 408 | ||
| 396 | - if (chkEnableVersionControl.IsChecked == true) | ||
| 409 | + if (withRepo && chkEnableVersionControl.IsChecked == true) | ||
| 397 | 410 | { | |
| 398 | 411 | if (chkInitialCommit.IsChecked == true) | |
| 399 | 412 | { | |
| 400 | - Console.WriteLine(1); | ||
| 401 | 413 | try | |
| 402 | 414 | { | |
| 403 | 415 | await GithubActions.RunGitAsync(Path.Combine(txtNewProjectFolder.Text, txtNewProjectName.Text), "add ."); | |
@@ -421,11 +433,26 @@ private async void BtnCreateNewProject_Click(object sender, RoutedEventArgs e) | |||
| 421 | 433 | ||
| 422 | 434 | } // if version control enabled | |
| 423 | 435 | ||
| 424 | - btnCreateNewProject.IsEnabled = true; | ||
| 425 | - isCreatingProject = false; | ||
| 436 | + } | ||
| 437 | + finally | ||
| 438 | + { | ||
| 439 | + isCreatingProject = false; | ||
| 440 | + UpdateCreateButtonsEnabledState(); | ||
| 441 | + } | ||
| 426 | 442 | ||
| 427 | 443 | 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 | + } | ||
| 429 | 456 | ||
| 430 | 457 | ||
| 431 | 458 | private void BtnCancelNewProject_Click(object sender, RoutedEventArgs e) | |
@@ -434,7 +461,7 @@ private void BtnCancelNewProject_Click(object sender, RoutedEventArgs e) | |||
| 434 | 461 | } | |
| 435 | 462 | ||
| 436 | 463 | ||
| 437 | - private void Window_PreviewKeyDown(object sender, KeyEventArgs e) | ||
| 464 | + private async void Window_PreviewKeyDown(object sender, KeyEventArgs e) | ||
| 438 | 465 | { | |
| 439 | 466 | switch (e.Key) | |
| 440 | 467 | { | |
@@ -460,7 +487,7 @@ private void Window_PreviewKeyDown(object sender, KeyEventArgs e) | |||
| 460 | 487 | e.Handled = true; // override writing to textbox | |
| 461 | 488 | break; | |
| 462 | 489 | case Key.Enter: // enter, create proj | |
| 463 | - BtnCreateNewProject_Click(null, null); | ||
| 490 | + await CreateNewProject(withRepo: false); | ||
| 464 | 491 | e.Handled = true; | |
| 465 | 492 | break; | |
| 466 | 493 | case Key.Escape: // esc cancel | |
@@ -523,15 +550,15 @@ private void TxtNewProjectName_TextChanged(object sender, TextChangedEventArgs e | |||
| 523 | 550 | System.Console.WriteLine("Project already exists"); | |
| 524 | 551 | txtNewProjectName.BorderBrush = Brushes.Red; // not visible if focused | |
| 525 | 552 | txtNewProjectName.ToolTip = "Project folder already exists"; | |
| 526 | - btnCreateNewProject.IsEnabled = false; | ||
| 527 | 553 | } | |
| 528 | 554 | else | |
| 529 | 555 | { | |
| 530 | 556 | txtNewProjectName.BorderBrush = null; | |
| 531 | - btnCreateNewProject.IsEnabled = true; | ||
| 532 | 557 | txtNewProjectName.ToolTip = ""; | |
| 533 | 558 | } | |
| 534 | 559 | ||
| 560 | + UpdateCreateButtonsEnabledState(); | ||
| 561 | + | ||
| 535 | 562 | //System.Console.WriteLine("newProjectName: " + txtNewProjectName.Text); | |
| 536 | 563 | ||
| 537 | 564 | newProjectName = txtNewProjectName.Text; | |
@@ -612,14 +639,14 @@ private void CmbNewProjectPlatform_DropDownOpened(object sender, System.EventArg | |||
| 612 | 639 | previousSelectedModuleIndex = cmbNewProjectPlatform.SelectedIndex; | |
| 613 | 640 | } | |
| 614 | 641 | ||
| 615 | - private void gridAvailableVersions_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) | ||
| 642 | + private async void gridAvailableVersions_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) | ||
| 616 | 643 | { | |
| 617 | 644 | // check that we clicked actually on a row | |
| 618 | 645 | var src = VisualTreeHelper.GetParent((DependencyObject)e.OriginalSource); | |
| 619 | 646 | var srcType = src.GetType(); | |
| 620 | 647 | if (srcType == typeof(ContentPresenter)) | |
| 621 | 648 | { | |
| 622 | - BtnCreateNewProject_Click(null, null); | ||
| 649 | + await CreateNewProject(withRepo: false); | ||
| 623 | 650 | } | |
| 624 | 651 | } | |
| 625 | 652 | ||
@@ -635,14 +662,7 @@ private void chkEnableVersionControl_Checked(object sender, RoutedEventArgs e) | |||
| 635 | 662 | { | |
| 636 | 663 | bool state = chkEnableVersionControl.IsChecked == true; | |
| 637 | 664 | ||
| 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; | ||
| 646 | 666 | ||
| 647 | 667 | if (isInitializing) return; | |
| 648 | 668 | ||
@@ -699,16 +719,16 @@ private void txtNewProjectFolder_TextChanged(object sender, TextChangedEventArgs | |||
| 699 | 719 | if (Directory.Exists(txtNewProjectFolder.Text) == false) | |
| 700 | 720 | { | |
| 701 | 721 | txtNewProjectFolder.BorderBrush = Brushes.Red; // not visible if focused | |
| 702 | - btnCreateNewProject.IsEnabled = false; | ||
| 703 | 722 | btnCreateMissingFolder.IsEnabled = true; | |
| 704 | 723 | } | |
| 705 | 724 | else | |
| 706 | 725 | { | |
| 707 | 726 | txtNewProjectFolder.BorderBrush = null; | |
| 708 | - btnCreateNewProject.IsEnabled = true; | ||
| 709 | 727 | targetFolder = txtNewProjectFolder.Text; | |
| 710 | 728 | btnCreateMissingFolder.IsEnabled = false; | |
| 711 | 729 | } | |
| 730 | + | ||
| 731 | + UpdateCreateButtonsEnabledState(); | ||
| 712 | 732 | } | |
| 713 | 733 | ||
| 714 | 734 | private void btnCreateMissingFolder_Click(object sender, RoutedEventArgs e) | |
@@ -942,8 +962,6 @@ private void listOnlineTemplates_SelectionChanged(object sender, SelectionChange | |||
| 942 | 962 | cmbNewProjectTemplate.IsEnabled = false; | |
| 943 | 963 | cmbNewProjectTemplate.SelectedIndex = 0; // Reset to default | |
| 944 | 964 | ||
| 945 | - // disable create button if template not downloaded yet | ||
| 946 | - btnCreateNewProject.IsEnabled = selectedTemplate.IsDownloaded; | ||
| 947 | 965 | btnCreateNewProject.Content = selectedTemplate.IsDownloaded ? "Create Project" : "Download Template First >"; | |
| 948 | 966 | } | |
| 949 | 967 | else | |
@@ -955,9 +973,10 @@ private void listOnlineTemplates_SelectionChanged(object sender, SelectionChange | |||
| 955 | 973 | cmbNewProjectTemplate.IsEnabled = true; | |
| 956 | 974 | ||
| 957 | 975 | // enable create button | |
| 958 | - btnCreateNewProject.IsEnabled = true; | ||
| 959 | 976 | btnCreateNewProject.Content = "Create Project"; | |
| 960 | 977 | } | |
| 978 | + | ||
| 979 | + UpdateCreateButtonsEnabledState(); | ||
| 961 | 980 | } | |
| 962 | 981 | ||
| 963 | 982 | private async void btnDownloadTemplate_Click(object sender, RoutedEventArgs e) | |
@@ -1230,6 +1249,5 @@ private void txtTokenInput_PasswordChanged(object sender, RoutedEventArgs e) | |||
| 1230 | 1249 | btnAuthorizeToken.IsEnabled = tokenSeemsOK; | |
| 1231 | 1250 | } | |
| 1232 | 1251 | ||
| 1233 | - | ||
| 1234 | 1252 | } // class NewProject | |
| 1235 | 1253 | } // namespace UnityLauncherPro | |
| Back | FazBrowse Home | New Git URL |
0 commit comments