-
Notifications
You must be signed in to change notification settings - Fork 73
Expand file tree
/
Copy pathMainWindow.xaml
More file actions
811 lines (747 loc) · 89.6 KB
/
MainWindow.xaml
File metadata and controls
811 lines (747 loc) · 89.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:UnityLauncherPro"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:controls="clr-namespace:UnityLauncherPro.Controls"
xmlns:converters="clr-namespace:UnityLauncherPro.Converters" x:Class="UnityLauncherPro.MainWindow"
mc:Ignorable="d"
Title="UnityLauncherPro" Height="670" Width="880" WindowStartupLocation="CenterScreen" Background="{DynamicResource ThemeDarkestBackground}" MinWidth="780" MinHeight="650" AllowsTransparency="True" WindowStyle="None" Margin="0" KeyDown="OnWindowKeyDown" Closing="Window_Closing" SizeChanged="Window_SizeChanged" Icon="Images/icon.ico" SourceInitialized="Window_SourceInitialized" MouseDown="Window_MouseDown">
<Window.Resources>
<converters:LastModifiedConverter x:Key="lastModifiedConverter"/>
<converters:LastModifiedConverterTooltip x:Key="LastModifiedConverterTooltip"/>
<converters:ReleaseDateConverter x:Key="releaseDateConverter"/>
<converters:ThumbnailConverter x:Key="thumbnailConverter"/>
</Window.Resources>
<!-- UI -->
<Grid Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="23" />
<RowDefinition Height="*" />
<RowDefinition Height="25" />
</Grid.RowDefinitions>
<!-- menubar -->
<Grid Grid.Row="0" UseLayoutRounding="False">
<Button PreviewMouseDoubleClick="Button_PreviewMouseDoubleClick">
<Button.Template>
<ControlTemplate>
<Rectangle Fill="{DynamicResource ThemeDarkMenuBar}" MouseDown="OnRectangleMouseDown"/>
</ControlTemplate>
</Button.Template>
</Button>
<Image Source="Images/icon.png" x:Name="IconImage" RenderOptions.BitmapScalingMode="NearestNeighbor" HorizontalAlignment="Left" Width="16" Height="16" Margin="4,0,0,0" SnapsToDevicePixels="True" UseLayoutRounding="True" />
<Label Content="UnityLauncherPro" IsHitTestVisible="False" Margin="19,0,0,-5" Foreground="{DynamicResource ThemeMainTitle}" FontSize="12" HorizontalAlignment="Left" />
<!-- minimize -->
<Button x:Name="btnMinimize" BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" HorizontalAlignment="Right" VerticalAlignment="Top" Height="23" Width="23" Background="Transparent" Click="BtnMinimize_Click" Margin="0,0,27,0" Padding="2,0,2,8" IsTabStop="False">
<TextBlock Text="–" FontSize="15" Foreground="{DynamicResource ThemeWindowMinClose}" Padding="0" Height="23" HorizontalAlignment="Center"/>
</Button>
<!-- close -->
<Button x:Name="btnClose" BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" HorizontalAlignment="Right" VerticalAlignment="Top" Height="23" Width="23" Background="Transparent" Click="BtnClose_Click" Padding="0,2" IsTabStop="False">
<TextBlock Text="❌" FontSize="10" Foreground="{DynamicResource ThemeWindowMinClose}" Padding="5,3,4,4" HorizontalAlignment="Center" />
</Button>
</Grid>
<!-- main content : Tabs -->
<TabControl Grid.Row="1" x:Name="tabControl" Background="{DynamicResource ThemeMainBackgroundColor}" BorderBrush="{x:Null}" Padding="0" Margin="0" SelectionChanged="OnTabSelectionChanged" PreviewKeyDown="tabControl_PreviewKeyDown">
<!-- Tab: Projects-->
<TabItem Header="Projects" Style="{DynamicResource TabItemStyle1}" Padding="0,0,0,0" Margin="-1,1,1,-1" BorderBrush="{x:Null}">
<Grid>
<controls:SearchBoxControl x:Name="searchBoxProjects" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="6,5,0,0" />
<Button Style="{StaticResource CustomButton}" ToolTip="Browse and add existing project to list" x:Name="btnAddProjectFolder" Content="Add Project.." Height="22" Width="78" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,4,38,0" Click="BtnAddProjectFolder_Click" TabIndex="10" Grid.Column="1" />
<Button Style="{StaticResource CustomButton}" ToolTip="Refresh list (F5)" x:Name="btnRefreshProjectList" Content="⟳" Height="22" Width="26" HorizontalAlignment="Right" VerticalAlignment="Top" FontSize="16" Margin="0,4,3,0" Padding="1,-2,1,1" Click="BtnRefreshProjectList_Click" TabIndex="11" Grid.Column="1"/>
<DataGrid x:Name="gridRecent" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" SelectionMode="Single" Margin="4,30,2,42" CanUserAddRows="False" Background="{x:Null}" BorderBrush="{x:Null}" ColumnHeaderStyle="{StaticResource HeaderStyle}" Padding="0" HorizontalScrollBarVisibility="Disabled" HeadersVisibility="Column" Foreground="{DynamicResource ThemeGridForeground}" HorizontalGridLinesBrush="{DynamicResource ThemeDatagridLines}" VerticalGridLinesBrush="{DynamicResource ThemeGridVerticalGridLines}" AutoGenerateColumns="False" PreviewKeyDown="GridRecent_PreviewKeyDown" Loaded="GridRecent_Loaded" TabIndex="2" CellEditEnding="GridRecent_CellEditEnding" PreviewMouseDoubleClick="GridRecent_PreviewMouseDoubleClick" ContextMenuOpening="GridRecent_ContextMenuOpening" BeginningEdit="GridRecent_BeginningEdit" RowHeight="21" ColumnReordered="GridRecent_ColumnReordered" Sorting="gridRecent_Sorting" Grid.ColumnSpan="2" >
<DataGrid.CommandBindings>
<CommandBinding Command="ApplicationCommands.Copy" Executed="CopyRowFolderToClipBoard" CanExecute="CanExecute_Copy"/>
<CommandBinding Command="{x:Static local:MainWindow.KillProcessCommand}" Executed="KillSelectedProcess"/>
</DataGrid.CommandBindings>
<DataGrid.Columns>
<DataGridTextColumn Header="Project" x:Name="txtColumnTitle" CellStyle="{StaticResource NoFocusCellStyle}" Binding="{Binding Title}" ClipboardContentBinding="{x:Null}" IsReadOnly="True" Width="150">
</DataGridTextColumn>
<DataGridTextColumn Header="Version" Binding="{Binding Version}" ClipboardContentBinding="{x:Null}" IsReadOnly="True" Width="72">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="{DynamicResource ThemeGridRedText}" />
<Setter Property="BorderBrush" Value="Orange" />
<Style.Triggers>
<DataTrigger Binding="{Binding Version, Converter={StaticResource VersionInstalledConverter}}" Value="1">
<Setter Property="Foreground" Value="{DynamicResource ThemeGridGreenText}" />
<!--<Setter Property="BorderBrush" Value="{x:Null}" />-->
</DataTrigger>
<DataTrigger Binding="{Binding Version, Converter={StaticResource VersionInstalledConverter}}" Value="-1">
<Setter Property="Foreground" Value="{DynamicResource ThemeGridGreenText}" />
<!--<Setter Property="BorderBrush" Value="Orange" />-->
</DataTrigger>
<DataTrigger Binding="{Binding InfoLabel, IsAsync=True}" Value="{x:Null}">
<Setter Property="BorderBrush" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip>
<TextBlock Text="{Binding InfoLabel, IsAsync=True}" TextWrapping="Wrap" MaxWidth="480"/>
</ToolTip>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding InfoLabel}" Value="{x:Null}">
<Setter Property="ToolTip" Value="{x:Null}"/>
</DataTrigger>
<DataTrigger Binding="{Binding InfoLabel}" Value="">
<Setter Property="ToolTip" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<!--CellStyle="{StaticResource NoFocusCellStyle"}-->
<DataGridTextColumn Header="Path" x:Name="txtColumnPath" Binding="{Binding Path}" ClipboardContentBinding="{x:Null}" IsReadOnly="True" Width="185">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding folderExists, Converter={StaticResource ProjectExistsConverter}}" Value="false">
<Setter Property="Foreground" Value="{DynamicResource ThemeGridRedText}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<!--<DataGridTextColumn CellStyle="{StaticResource NoFocusCellStyle}" Binding="{Binding Modified, StringFormat=\{0:dd/MM/yyyy HH:mm:ss\}}" ClipboardContentBinding="{x:Null}" Header="Modified" IsReadOnly="True" Width="120"/>-->
<DataGridTextColumn Header="Modified"
Binding="{Binding Modified, Converter={StaticResource lastModifiedConverter}}"
ClipboardContentBinding="{x:Null}"
IsReadOnly="True"
Width="120">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip>
<TextBlock Text="{Binding Modified, Converter={StaticResource LastModifiedConverterTooltip}}" />
</ToolTip>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Arguments" Binding="{Binding Arguments}" CellStyle="{StaticResource NoFocusCellStyle}" ClipboardContentBinding="{x:Null}" IsReadOnly="False" Width="100">
</DataGridTextColumn>
<DataGridTextColumn Header="Branch" x:Name="txtColumnGitBranch" Binding="{Binding GITBranch}" CellStyle="{StaticResource NoFocusCellStyle}" ClipboardContentBinding="{x:Null}" IsReadOnly="True" Width="60">
</DataGridTextColumn>
<!--TODO platform as dropdown?-->
<!--<DataGridTextColumn CellStyle="{StaticResource NoFocusCellStyle}" Binding="{Binding TargetPlatform}" ClipboardContentBinding="{x:Null}" Header="Platform" IsReadOnly="True" Width="100"/>-->
<!--<DataGridComboBoxColumn x:Name="cmbPlatform" CellStyle="{StaticResource NoFocusCellStyle}" SelectedItemBinding="{Binding TargetPlatform, NotifyOnSourceUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ClipboardContentBinding="{x:Null}" Header="Platform" IsReadOnly="True" Width="100"/>-->
<!--<DataGridComboBoxColumn x:Name="cmbPlatform" CellStyle="{StaticResource NoFocusCellStyle}" ClipboardContentBinding="{x:Null}" Header="Platform" IsReadOnly="True" Width="100"/>-->
<!--<DataGridComboBoxColumn Header="Platform" IsReadOnly="False" SelectedItemBinding="{Binding TargetPlatform}" ItemsSource="{Binding Source={StaticResource platformEnum}}" />-->
<DataGridTemplateColumn Header="Platform" Width="90">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Platform" IsHitTestVisible="False"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate >
<DataTemplate >
<!--<ComboBox Style="{StaticResource DataGridComboBox}" ItemsSource="{Binding TargetPlatforms}" SelectedValue="{Binding TargetPlatform}" x:Name="cmbPlatformSelection" OverridesDefaultStyle="True" VerticalAlignment="Center" HorizontalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalContentAlignment="Stretch" IsEnabled="{Binding ElementName=chkEnablePlatformSelection, Path=IsChecked}" Height="18" Foreground="{DynamicResource ThemeButtonForeground}" DropDownClosed="CmbPlatformSelection_DropDownClosed" MinWidth="80"/>-->
<ComboBox Style="{StaticResource DataGridComboBox}" ItemsSource="{Binding TargetPlatforms}" SelectedValue="{Binding TargetPlatform}" x:Name="cmbPlatformSelection" OverridesDefaultStyle="False" IsEnabled="{Binding ElementName=chkEnablePlatformSelection, Path=IsChecked}" Height="18" Foreground="{DynamicResource ThemeButtonForeground}" DropDownClosed="CmbPlatformSelection_DropDownClosed" MinWidth="80"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="SRP" x:Name="txtColumnRenderPipeline" Binding="{Binding SRP}" CellStyle="{StaticResource NoFocusCellStyle}" ClipboardContentBinding="{x:Null}" IsReadOnly="True" Width="50">
</DataGridTextColumn>
</DataGrid.Columns>
<!-- right click context menu -->
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuItemCopyVersion" Header="Copy Unity Version" Click="MenuItemCopyVersion_Click" />
<MenuItem x:Name="menuItemCopyPath" Header="Copy Project Path" Click="MenuItemCopyPath_Click" />
<MenuItem x:Name="menuItemShowProjectInExplorer" Header="Show in Explorer" Click="MenuItemShowProjectInExplorer_Click" />
<MenuItem x:Name="menuItemBrowsePersistentDataPath" Header="Open PersistentDataPath" Click="MenuItemBrowsePersistentDataPath_Click" />
<MenuItem x:Name="menuCreateDesktopShortCut" Header="Create Shortcut on Desktop" Click="MenuCreateDesktopShortCut_Click" />
<Separator/>
<MenuItem x:Name="menuItemKillProcess" Header="Kill Process" Click="MenuItemKillProcess_Click" />
<Separator/>
<MenuItem x:Name="menuStartWebGLServer" Header="Start WebGL server" Click="MenuStartWebGLServer_Click" />
<MenuItem x:Name="menuInstallLastAPK" Header="Install & Run latest APK" Click="menuInstallLastAPK_Click" />
<Separator/>
<MenuItem Header="Build">
<MenuItem x:Name="menuBatchBuildAndroid" Header="Android" Click="MenuBatchBuildAndroid_Click"/>
<MenuItem x:Name="menuBatchBuildIOS" Header="IOS" Click="MenuBatchBuildIOS_Click"/>
<MenuItem x:Name="menuBatchBuildCustom" Header="Custom" Click="MenuBatchBuildCustom_Click"/>
</MenuItem>
<MenuItem Header="Tools">
<MenuItem x:Name="menuExcludeFromDefender" Header="Exclude Path From Defender" Click="menuExcludeFromDefender_Click"/>
</MenuItem>
<Separator/>
<MenuItem x:Name="menuRemoveProject" Header="Remove from recent list" Click="MenuRemoveProject_Click" />
<Separator/>
<Image Margin="0,0,0,0" SnapsToDevicePixels="True" MouseDown="Image_MouseDown">
<Image.Width>
<Binding Path="PlacementTarget.SelectedItem" RelativeSource="{RelativeSource AncestorType=ContextMenu}"
Converter="{StaticResource thumbnailConverter}" ConverterParameter="Width"/>
</Image.Width>
<Image.Height>
<Binding Path="PlacementTarget.SelectedItem" RelativeSource="{RelativeSource AncestorType=ContextMenu}"
Converter="{StaticResource thumbnailConverter}" ConverterParameter="Height"/>
</Image.Height>
<Image.Source>
<Binding Path="PlacementTarget.SelectedItem" RelativeSource="{RelativeSource AncestorType=ContextMenu}"
Converter="{StaticResource thumbnailConverter}"/>
</Image.Source>
</Image>
<!--<MenuItem x:Name="menuProjectProperties" Header="Properties..." Click="menuProjectProperties_Click" />-->
</ContextMenu>
</DataGrid.ContextMenu>
<!-- TODO cannot have this enabled, otherwise needs additional .Clear() at start before setting itemsource data -->
<!-- sample data for testing -->
<!--
<local:Project TargetPlatform="win64" GITBranch="Best" Modified="" Title="M dfgh dfghMO" Path="A:/temp" Version="2099.1.2.3" />
<local:Project GITBranch="" Modified="" Title="asdgdfg" Path="A:/temp" Version="5.6.7f1"/>
<local:Project GITBranch="" Modified="" Title="Mghdfghdf dfghdfgMO" Path="A:/temp" Version="2018.3.13f1"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="fghdhdfgh" Path="A:/temp" Version="2018.3.13f1"/>
<local:Project GITBranch="" Modified="" Title="MdfMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MdfgMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MdfghMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="5.6.7f1"/>
<local:Project GITBranch="" Modified="" Title="ddfghfghdfgh" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2018.3.13f1"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMdfghO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MdfghMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="dfgh" Path="A:/temp" Version="5.6.7f1"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2018.3.13f1"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="Mdfg hMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMd fghO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="MMdfg hO" Path="A:/temp" Version="2099.1.2.3"/>
<local:Project GITBranch="" Modified="" Title="Md fghMO" Path="A:/temp" Version="2099.1.2.3"/>-->
</DataGrid>
<!-- bottom buttoms row -->
<Grid VerticalAlignment="Bottom" Margin="4,0,8,5" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="14*" />
<ColumnDefinition Width="17*" />
<ColumnDefinition Width="15*" />
<ColumnDefinition Width="50*" />
<ColumnDefinition Width="14*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="32" />
</Grid.RowDefinitions>
<Button Grid.Column="0" Style="{StaticResource CustomButton}" x:Name="btnUpgradeProject" Background="{DynamicResource ThemeButtonBackground}" Margin="5,0,0,0" Click="BtnUpgradeProject_Click">
<Label Content="_Upgrade" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="1" ToolTip="With selected Unity" Style="{StaticResource CustomButton}" x:Name="btnCreateEmptyProject" Background="{DynamicResource ThemeButtonBackground}" Margin="8,0,0,0" Click="BtnCreateEmptyProject_Click" >
<Label Content="_New Project" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="2" Style="{StaticResource CustomButton}" x:Name="btnLaunchUnity" Background="{DynamicResource ThemeButtonBackground}" Margin="8,0,0,0" Click="BtnLaunchUnity_Click" >
<Label Content="_Run Unity" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="3" Style="{StaticResource CustomButton}" x:Name="btnLaunchProject" Background="{DynamicResource ThemeButtonBackground}" Margin="8,0,0,0" Click="BtnLaunchProject_Click" AutomationProperties.AccessKey="o" >
<Label Content="_Open Project" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="4" Style="{StaticResource CustomButton}" x:Name="btnExplore" Background="{DynamicResource ThemeButtonBackground}" Margin="8,0,0,0" Click="BtnExplore_Click" >
<Label Content="_Explore" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</Grid>
</Grid>
</TabItem>
<!-- Tab: Unitys -->
<TabItem Header="Editors" Style="{DynamicResource TabItemStyle1}" Padding="0,0,0,0" Margin="-1,1,1,-1" BorderBrush="{x:Null}" Background="Black">
<Grid>
<!-- search box -->
<controls:SearchBoxControl x:Name="searchBoxUnitys" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="6,5,0,0" />
<Button Style="{StaticResource CustomButton}" ToolTip="Refresh installations (F5)" x:Name="btnRefreshUnityList" Content="⟳" Height="22" Width="26" HorizontalAlignment="Right" VerticalAlignment="Top" FontSize="16" Margin="0,4,3,0" Padding="1,-2,1,1" Click="BtnRefreshUnityList_Click"/>
<DataGrid x:Name="dataGridUnitys" SelectionMode="Single" Margin="4,30,2,42" Background="{x:Null}" BorderBrush="{x:Null}" ColumnHeaderStyle="{StaticResource HeaderStyle}" Padding="0" HorizontalScrollBarVisibility="Disabled" HeadersVisibility="Column" Foreground="{DynamicResource ThemeGridForeground}" HorizontalGridLinesBrush="{DynamicResource ThemeDatagridLines}" VerticalGridLinesBrush="{DynamicResource ThemeGridVerticalGridLines}" CanUserAddRows="False" AutoGenerateColumns="False" PreviewKeyDown="DataGridUnitys_PreviewKeyDown" PreviewMouseDoubleClick="DataGridUnitys_PreviewMouseDoubleClick">
<DataGrid.CommandBindings>
<CommandBinding Command="ApplicationCommands.Copy" Executed="CopyRowFolderToClipBoard" CanExecute="CanExecute_Copy"/>
</DataGrid.CommandBindings>
<DataGrid.Columns>
<DataGridTextColumn ClipboardContentBinding="{x:Null}" IsReadOnly="True" MinWidth="16">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsPreferred}" Value="true">
<Setter Property="Text" Value="★" />
<Setter Property="TextAlignment" Value="Center" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Version}" ClipboardContentBinding="{x:Null}" Header="Version" IsReadOnly="True" MinWidth="90">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderBrush" Value="Orange" />
<Style.Triggers>
<DataTrigger Binding="{Binding InfoLabel, IsAsync=True}" Value="{x:Null}">
<Setter Property="BorderBrush" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Release" Binding="{Binding ReleaseType}" IsReadOnly="True" CanUserResize="False" MinWidth="50" />
<DataGridTextColumn Binding="{Binding PlatformsCombined}" ClipboardContentBinding="{x:Null}" Header="Platforms" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding Installed, StringFormat=\{0:dd/MM/yyyy HH:mm:ss\}}" ClipboardContentBinding="{x:Null}" Header="Installed" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding ProjectCount}" ClipboardContentBinding="{x:Null}" Header="Projects" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding Path}" ClipboardContentBinding="{x:Null}" Header="Path" IsReadOnly="True"/>
</DataGrid.Columns>
<!-- right click context menu -->
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuItemCopyVersionInstalled" Header="Copy Unity Version" Click="MenuItemCopyVersion_Click" />
<MenuItem x:Name="menuItemCopyEditorPath" Header="Copy Editor Path" Click="MenuItemCopyPath_Click" />
<MenuItem x:Name="menuItemShowUnityInExplorer" Header="Show in Explorer" Click="MenuItemShowProjectInExplorer_Click" />
<MenuItem x:Name="menuItemSetPreferredUnityVersion" Header="Set as Preferred Version" Click="MenuItemSetPreferredUnityVersion_Click"/>
<Separator></Separator>
<MenuItem x:Name="menuOpenReleasesApi" Header="Open in Releases API" Click="menuOpenReleasesApi_Click"/>
<MenuItem x:Name="menuCheckUnityUpdates" Header="Check Updates" Click="BtnUpdateUnity_Click"/>
<!--<MenuItem x:Name="menuItemEditPackages" Header="Edit Packages" Click="MenuItemEditPackages_Click"/>-->
<Separator></Separator>
<MenuItem Header="Download">
<MenuItem x:Name="menuItemDownloadAndroidModule" Header="Download Android module" Click="MenuItemDownloadAndroidModule_Click"/>
<MenuItem x:Name="menuItemDownloadIOSModule" Header="Download IOS module" Click="MenuItemDownloadIOSModule_Click"/>
<MenuItem x:Name="menuItemDownloadWebGLModule" Header="Download WebGL module" Click="MenuItemDownloadWebGLModule_Click" />
<MenuItem x:Name="menuItemDownloadLinuxModule" Header="Download Linux modules" Click="MenuItemDownloadLinuxModule_Click"/>
<MenuItem x:Name="menuItemDownloadIL2CPPModule" Header="Download IL2CPP module" Click="menuItemDownloadIL2CPPModule_Click"/>
<MenuItem x:Name="menuItemDownloadWinDedicatedServerModule" Header="Download Windows Dedicated module" Click="menuItemDownloadWinDedicatedServerModule_Click"/>
<MenuItem x:Name="menuItemDownloadLinuxDedicatedServerModule" Header="Download Linux Dedicated module" Click="menuItemDownloadLinuxDedicatedServerModule_Click"/>
</MenuItem>
<Separator></Separator>
<MenuItem x:Name="menuUninstallEditor" Header="Uninstall" Click="menuUninstallEditor_Click"/>
</ContextMenu>
</DataGrid.ContextMenu>
<!-- sample data for testing -->
<local:UnityInstallation Version="3000.1.2f1" Path="c:/proggies/unity3000" Installed="12.12.2020" />
</DataGrid>
<!-- bottom buttoms row -->
<Grid VerticalAlignment="Bottom" Margin="4,0,8,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20*" />
<ColumnDefinition Width="17*" />
<ColumnDefinition Width="20*" />
<ColumnDefinition Width="40*" />
<ColumnDefinition Width="15*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="32" />
</Grid.RowDefinitions>
<Button Grid.Column="0" Style="{StaticResource CustomButton}" x:Name="btnReleaseNotes" Margin="5,0,0,0" Click="BtnReleaseNotes_Click">
<Label Content="Release _Notes" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="1" ToolTip="With selected Unity" Style="{StaticResource CustomButton}" x:Name="btnCreateEmptyProjectUnity" Margin="8,0,0,0" Click="BtnCreateEmptyProjectUnity_Click" >
<Label Content="_New Project" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="2" Style="{StaticResource CustomButton}" x:Name="btnUpdateUnity" Margin="8,0,0,0" Click="BtnUpdateUnity_Click">
<Label Content="Check Updates" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="3" Style="{StaticResource CustomButton}" x:Name="btnRunUnity" Margin="8,0,0,0" Click="BtnRunUnity_Click" >
<Label Content="_Run Unity" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="4" Style="{StaticResource CustomButton}" x:Name="btnExploreUnity" Margin="8,0,0,0" Click="BtnExploreUnity_Click" >
<Label Content="_Explore" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</Grid>
</Grid>
</TabItem>
<!-- Tab: Updates -->
<TabItem Header="Updates" Style="{DynamicResource TabItemStyle1}" Padding="0,0,0,0" Margin="-1,1,1,-1" BorderBrush="{x:Null}" Background="Black" >
<Grid>
<!-- search box -->
<controls:SearchBoxControl x:Name="searchBoxUpdates" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="6,5,0,0" />
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="240,2,0,0" >
<RadioButton x:Name="rdoAll" Content="All" IsChecked="True" Checked="rdoAll_Checked" GroupName="groupUpdateFilter" Margin="0,0,10,0" />
<RadioButton x:Name="rdoLTS" Content="LTS" Checked="rdoAll_Checked" GroupName="groupUpdateFilter" Margin="0,0,10,0" />
<RadioButton x:Name="rdoTech" Content="Tech" Checked="rdoAll_Checked" GroupName="groupUpdateFilter" Margin="0,0,10,0" />
<RadioButton x:Name="rdoAlphas" Content="Alpha" Checked="rdoAll_Checked" GroupName="groupUpdateFilter" Margin="0,0,10,0" />
<RadioButton x:Name="rdoBetas" Content="Beta" Checked="rdoAll_Checked" GroupName="groupUpdateFilter" />
</StackPanel>
<!-- hash build downloader, hidden for now, until have some UI ideas -->
<!--<TextBox x:Name="txtDownloadFromHash" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="80" ToolTip="Try to download hidden release using this ChangeSet Hash" Padding="0,3,0,0" Margin="730,4,48,0" VerticalAlignment="Top" Width="100" PreviewKeyDown="txtDownloadFromHash_PreviewKeyDown" />-->
<Button Style="{StaticResource CustomButton}" ToolTip="Fetch released versions" x:Name="btnRefreshUpdatesList" Content="⟳" Height="22" Width="26" HorizontalAlignment="Right" VerticalAlignment="Top" FontSize="16" Margin="0,4,3,0" Padding="1,-2,1,1" Click="OnGetUnityUpdatesClick"/>
<DataGrid x:Name="dataGridUpdates" SelectionMode="Single" Margin="4,30,2,42" Background="{x:Null}" BorderBrush="{x:Null}" ColumnHeaderStyle="{StaticResource HeaderStyle}" Padding="0" HorizontalScrollBarVisibility="Disabled" HeadersVisibility="Column" Foreground="{DynamicResource ThemeGridForeground}" HorizontalGridLinesBrush="{DynamicResource ThemeDatagridLines}" VerticalGridLinesBrush="{DynamicResource ThemeGridVerticalGridLines}" AutoGenerateColumns="False" PreviewKeyDown="DataGridUpdates_PreviewKeyDown" PreviewMouseDoubleClick="DataGridUpdates_PreviewMouseDoubleClick" Sorting="dataGridUpdates_Sorting">
<DataGrid.CommandBindings>
<CommandBinding Command="ApplicationCommands.Copy" Executed="CopyRowFolderToClipBoard" CanExecute="CanExecute_Copy"/>
</DataGrid.CommandBindings>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ReleaseDate, Converter={StaticResource releaseDateConverter}}" ClipboardContentBinding="{x:Null}" MinWidth="100" Header="Released" IsReadOnly="True">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip">
<Setter.Value>
<TextBlock Text="{Binding ReleaseDate, StringFormat=\{0:dd/MM/yyyy\}}" />
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Version}" ClipboardContentBinding="{x:Null}" Header="Version" IsReadOnly="True" MinWidth="222">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding Version, Converter={StaticResource VersionInstalledConverter}}" Value="1">
<Setter Property="Foreground" Value="{DynamicResource ThemeGridGreenText}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
<!-- right click context menu -->
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuItemCopyUpdatesVersion" Header="Copy Unity Version" Click="MenuItemCopyVersion_Click" />
<MenuItem x:Name="menuItemDownloadInBrowser" Header="Download in Browser" Click="MenuItemDownloadInBrowser_Click" />
<MenuItem x:Name="menuItemCopyUpdateDownloadURL" Header="Copy Download URL" Click="MenuItemCopyUpdateDownloadURL_Click" />
<MenuItem x:Name="menuItemUpdatesReleaseNotes" Header="Open Release Notes" Click="MenuItemUpdatesReleaseNotes_Click" />
</ContextMenu>
</DataGrid.ContextMenu>
<!-- sample data for testing -->
<local:UnityVersion ReleaseDate="2020-10-10" Version="5000.1.2.3"/>
</DataGrid>
<!-- bottom buttoms row -->
<Grid VerticalAlignment="Bottom" Margin="4,0,8,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20*" />
<ColumnDefinition Width="18*" />
<ColumnDefinition Width="28*" />
<ColumnDefinition Width="14*" />
<ColumnDefinition Width="18*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="32" />
</Grid.RowDefinitions>
<Button Grid.Column="0" Style="{StaticResource CustomButton}" x:Name="btnDownloadInBrowser" Margin="5,0,0,0" Click="BtnDownloadInBrowser_Click">
<Label Content="_Download installer in browser" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="1" Style="{StaticResource CustomButton}" x:Name="btnDownloadInBrowserFull" Margin="5,0,0,0" Click="BtnDownloadInBrowserFull_Click">
<Label Content="_Download editor in browser" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="2" Style="{StaticResource CustomButton}" x:Name="btnDownloadInstallUpdate" Margin="5,0,0,0" Click="btnDownloadInstallUpdate_Click">
<Label Content="Download & Install" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Grid.Column="3" Style="{StaticResource CustomButton}" x:Name="btnOpenWebsite" Margin="5,0,0,0" Click="BtnOpenWebsite_Click" >
<Label Content="Release Notes" Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Control}, Mode=FindAncestor}}" />
</Button>
<Button Grid.Column="4" Style="{StaticResource CustomButton}" x:Name="btnShowCumulatedReleaseNotes" Margin="5,0,0,0" Click="BtnShowCumulatedReleaseNotes_Click" ToolTip="Show all Release Notes between the selected version and the older, closest one installed. Only works for final and patch versions." >
<Label Content="Cumulative Release Notes" Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Control}, Mode=FindAncestor}}" />
</Button>
</Grid>
</Grid>
</TabItem>
<!-- Tab: Tools -->
<TabItem Header="Tools" Style="{DynamicResource TabItemStyle1}" Padding="0,0,0,0" Margin="-1,1,1,-1" BorderBrush="{x:Null}" Background="Black" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True">
<Grid PreviewKeyDown="Grid_PreviewKeyDown">
<Grid.RowDefinitions>
<RowDefinition Height="124" />
<RowDefinition Height="32" />
<RowDefinition Height="50*" />
</Grid.RowDefinitions>
<!-- 1st part -->
<Grid Grid.Row="0" VerticalAlignment="Top">
<StackPanel Orientation="Vertical" Margin="10" VerticalAlignment="Top" HorizontalAlignment="Left">
<!--border to avoid next row moving when button is selected-->
<Border VerticalAlignment="Top" Height="40" Margin="0,0,0,2" HorizontalAlignment="Left">
<!-- folders -->
<StackPanel Orientation="Horizontal" Margin="0,4,10,4" VerticalAlignment="Top">
<Label Content="Folders" Foreground="{DynamicResource ThemeButtonForeground}" />
<Button Style="{StaticResource CustomButton}" x:Name="btnOpenEditorLogsFolder" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="BtnOpenEditorLogsFolder_Click" ToolTip="Browse Editor logs folder or Right click to open editor.log" PreviewMouseDown="btnOpenEditorLogsFolder_PreviewMouseDown">
<Label Content="_Editor Logs" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnOpenPlayerLogs" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="BtnOpenPlayerLogs_Click" ToolTip="Browse Player logs folder">
<Label Content="_Player Logs" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnOpenCrashLogs" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="BtnOpenCrashLogs_Click" ToolTip="Browse Crash logs folder">
<Label Content="_Crash Logs" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnAssetPackages" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Browse AssetStore downloads folder" Click="BtnAssetPackages_Click">
<Label Content="A_sset packages" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnCrashDumps" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Browse Crash dumps folder" Click="BtnCrashDumps_Click">
<Label Content="Crash _Dumps" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnUnityCache" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Browse Unity Cache folder" Click="BtnUnityCache_Click">
<Label Content="_Unity Cache" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnGICache" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Browse Unity GI Cache folder" Click="BtnGICache_Click">
<Label Content="_GI Cache" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnHubLogs" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Browse Unity GI Cache folder" Click="btnHubLogs_Click">
<Label Content="Hub Logs" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</StackPanel>
</Border>
<!-- tools -->
<Border VerticalAlignment="Top" Height="37" HorizontalAlignment="Left" Margin="0">
<StackPanel Orientation="Horizontal" Margin="2,0" VerticalAlignment="Top">
<Label Content="Tools" Foreground="{DynamicResource ThemeButtonForeground}" />
<Button Style="{StaticResource CustomButton}" x:Name="btnOpenADBLogCat" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="BtnOpenADBLogCat_Click" ToolTip="Start ADB logcat commandline">
<Label Content="_ADB logcat" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnExcludeFolderForDefender" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Exclude all Editor folders from Windows Defender" Click="btnExcludeFolderForDefender_Click">
<Label Content="Exclude Folders*" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</StackPanel>
</Border>
<!-- links -->
<StackPanel Orientation="Horizontal" Margin="2,0" VerticalAlignment="Top">
<Label Content="Links" Foreground="{DynamicResource ThemeButtonForeground}" />
<Button Style="{StaticResource CustomButton}" x:Name="btnResources" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="BtnResources_Click" ToolTip="List of resources, cheatsheets, sdk downloads in github page">
<Label Content="Resources 🔗" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</StackPanel>
</StackPanel>
</Grid>
<!-- 2nd part -->
<Grid Grid.Row="1" VerticalAlignment="Top">
<StackPanel Orientation="Horizontal" Margin="0">
<Label Content="Build Report" Foreground="{DynamicResource ThemeButtonForeground}" HorizontalAlignment="Left" VerticalAlignment="Top" VerticalContentAlignment="Center" />
<Button x:Name="btnClearBuildReport" Style="{StaticResource CustomButton}" ToolTip="Clear report" Content="🗑" Height="22" Width="22" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="16" Margin="0,4,10,0" Padding="1,-2,1,1" Click="BtnClearBuildReport_Click" />
<Button x:Name="btnRefreshBuildReport" Style="{StaticResource CustomButton}" ToolTip="Get latest Build Report from Editor.log" Content="⟳" Height="22" Width="22" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="16" Margin="0,4,10,0" Padding="1,-2,1,1" Click="BtnRefreshBuildReport_Click"/>
<!--<CheckBox x:Name="chkAutoUpdateBuildReport" Content="AutoUpdate" Foreground="{DynamicResource ButtonForeground}" Margin="0,0,0,3" ToolTip="" HorizontalAlignment="Right" VerticalAlignment="Top" Height="26" VerticalContentAlignment="Center" IsEnabled="False"/>-->
<!-- search box -->
<controls:SearchBoxControl x:Name="searchBoxBuildReport" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="6,5,0,0" />
<Label x:Name="lblBuildReportIndex" Height="26" Foreground="{DynamicResource ThemeSearchForeground}" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="10,0,0,0" Content="-/-"/>
<Button x:Name="btnPrevBuildReport" Style="{StaticResource CustomButton}" ToolTip="Previous Build Report" Content="←" Height="22" Width="22" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="16" Margin="0,4,0,0" Padding="1,-2,1,1" Click="BtnPrevBuildReport_Click" IsEnabled="False"/>
<Button x:Name="btnNextBuildReport" Style="{StaticResource CustomButton}" ToolTip="Next Build Report" Content="→" Height="22" Width="22" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="16" Margin="8,4,10,0" Padding="1,-2,1,1" Click="BtnNextBuildReport_Click" IsEnabled="False"/>
</StackPanel>
</Grid>
<!-- 3rd part -->
<Grid Grid.Row="2" VerticalAlignment="Top">
<Grid ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="64*" />
<ColumnDefinition Width="30*" />
</Grid.ColumnDefinitions>
<!--Grid.Column="0"-->
<DataGrid x:Name="gridBuildReport" SelectionMode="Single" CanUserAddRows="False" Margin="4,0,2,0" Background="{x:Null}" BorderBrush="{x:Null}" ColumnHeaderStyle="{StaticResource HeaderStyle}" Padding="0" HorizontalScrollBarVisibility="Auto" HeadersVisibility="Column" Foreground="{DynamicResource ThemeGridForeground}" HorizontalGridLinesBrush="{DynamicResource ThemeDatagridLines}" VerticalGridLinesBrush="{DynamicResource ThemeGridVerticalGridLines}" AutoGenerateColumns="False" VerticalAlignment="Top" PreviewMouseDoubleClick="GridBuildReport_PreviewMouseDoubleClick" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Visible">
<DataGrid.CommandBindings>
<CommandBinding Command="ApplicationCommands.Copy" Executed="CopyRowFolderToClipBoard" CanExecute="CanExecute_Copy"/>
</DataGrid.CommandBindings>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Size}" ClipboardContentBinding="{x:Null}" Header="Size" IsReadOnly="True" Width="75"/>
<DataGridTextColumn Binding="{Binding Percentage}" ClipboardContentBinding="{x:Null}" Header="%" IsReadOnly="True" Width="55" />
<DataGridTextColumn Binding="{Binding Path}" ClipboardContentBinding="{x:Null}" Header="Path" IsReadOnly="True" Width="333" />
<DataGridTextColumn Binding="{Binding Format}" ClipboardContentBinding="{x:Null}" Header="Format" IsReadOnly="True" Width="65"/>
</DataGrid.Columns>
<!-- right click context menu -->
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuItemExploreBuildItem" Header="Open Explorer here" Click="MenuItemExploreBuildItem_Click" />
<MenuItem x:Name="menuItemCopyPathToClipboard" Header="Copy Path to clipboard" Click="menuItemCopyPathToClipboard_Click" />
</ContextMenu>
</DataGrid.ContextMenu>
<!-- sample data for testing -->
<local:BuildReportItem Size="10.0 mb" Percentage="50.0%" Path="Assets/Textures/sample.png" />
<local:BuildReportItem Size="10.0 mb" Percentage="50.0%" Path="Assets/Textures/sample.png" />
<local:BuildReportItem Size="10.0 mb" Percentage="50.0%" Path="Assets/Textures/sample.png" />
</DataGrid>
<StackPanel Grid.Column="1" Orientation="Vertical">
<DataGrid x:Name="gridBuildReportData" SelectionMode="Single" CanUserAddRows="False" Margin="4,0,2,0" Background="{x:Null}" BorderBrush="{x:Null}" ColumnHeaderStyle="{StaticResource HeaderStyle}" Padding="0" HorizontalScrollBarVisibility="Disabled" HeadersVisibility="Column" Foreground="{DynamicResource ThemeGridForeground}" HorizontalGridLinesBrush="{DynamicResource ThemeDatagridLines}" VerticalGridLinesBrush="{DynamicResource ThemeGridVerticalGridLines}" AutoGenerateColumns="False" VerticalAlignment="Top" PreviewMouseDoubleClick="GridBuildReport_PreviewMouseDoubleClick" HorizontalContentAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Type" Binding="{Binding Category}" IsReadOnly="True" CanUserResize="False" MinWidth="80" />
<DataGridTextColumn Header="Size" Binding="{Binding Size}" IsReadOnly="True" CanUserResize="False" MinWidth="80" />
<DataGridTextColumn Header="%" Binding="{Binding Percentage}" IsReadOnly="True" CanUserResize="False" MinWidth="80" />
</DataGrid.Columns>
<local:BuildReportItem Category="Texture" Size="10.0 mb" Percentage="50.0%" />
</DataGrid>
<Label Content="Elapsed time:" Foreground="{DynamicResource ThemeButtonForeground}" HorizontalAlignment="Stretch" VerticalAlignment="Top"/>
<TextBox CaretBrush="#FFE2E2E2" x:Name="txtBuildTime" Background="{DynamicResource ThemeTextBoxBackground}" BorderBrush="{x:Null}" Foreground="#FFC7C7C7" SelectionBrush="#FF003966" BorderThickness="0" UndoLimit="64" IsReadOnly="True" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="4,0,4,0" />
</StackPanel>
</Grid>
</Grid>
<!--<DataGrid x:Name="gridBuildReport" SelectionMode="Single" CanUserAddRows="False" Margin="4,0,2,0" Background="{x:Null}" BorderBrush="{x:Null}" ColumnHeaderStyle="{StaticResource HeaderStyle}" Padding="0" HorizontalScrollBarVisibility="Visible" HeadersVisibility="Column" Foreground="{DynamicResource ThemeGridForeground}" HorizontalGridLinesBrush="{DynamicResource ThemeDatagridLines}" VerticalGridLinesBrush="{DynamicResource ThemeGridVerticalGridLines}" AutoGenerateColumns="False" VerticalAlignment="Top" PreviewMouseDoubleClick="GridBuildReport_PreviewMouseDoubleClick" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Top">-->
</Grid>
</TabItem>
<!-- Tab: Settings -->
<TabItem Header="Settings" Style="{DynamicResource TabItemStyle1}" Padding="0,0,0,0" Margin="-1,1,1,-1" BorderBrush="{x:Null}" Background="Black">
<Grid x:Name="gridSettingsBg" Focusable="True" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<!-- top labels-->
<RowDefinition Height="26" />
<!-- install locations list box -->
<RowDefinition Height="70" />
<!-- list buttons -->
<RowDefinition Height="31" />
<!-- settings -->
<RowDefinition Height="70*" />
<!-- links -->
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<!-- top labels -->
<Label Grid.Row="0" Content="Unity Installation(s) Parent Folder(s)" Foreground="{DynamicResource ThemeButtonForeground}" HorizontalAlignment="Left" VerticalAlignment="Bottom" ToolTip="Search will try to find Unity installations under these folders"/>
<Label x:Name="lblFoundXInstallations" Grid.Row="0" Content="Found .. Installations" Foreground="{DynamicResource ThemeButtonForeground}" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>
<!-- locations list -->
<ListBox x:Name="lstRootFolders" Grid.Row="1" Background="{DynamicResource ThemeButtonBackground}" Margin="4,0,2,0" Foreground="{DynamicResource ThemeButtonForeground}" VerticalAlignment="Top" MinHeight="65" >
<System:String>C:\Program Files\Unity\Hub\Editor</System:String>
<System:String>C:\Program Files</System:String>
</ListBox>
<!-- locations add/remove -->
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0" VerticalAlignment="Top" >
<Button Style="{StaticResource CustomButton}" x:Name="btnAddInstallationFolder" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Click="BtnAddInstallationFolder_Click" Width="116">
<Label Content="_Add Folder" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Button Style="{StaticResource CustomButton}" x:Name="btnRemoveInstallationFolder" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Click="BtnRemoveInstallationFolder_Click">
<Label Content="_Remove Folder" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</StackPanel>
<!-- settings-->
<StackPanel Grid.Row="3" Orientation="Horizontal">
<StackPanel Grid.Row="3" Orientation="Vertical" Margin="5,0,3,3" >
<GroupBox Grid.Row="3" Header="Projects" VerticalAlignment="Top" Margin="3,0,0,0">
<StackPanel Grid.Row="3" Orientation="Vertical" Margin="3,5,0,0" >
<CheckBox x:Name="chkSearchProjectPath" Content="Search project path also" ToolTip="Searches from project folder path and project name" HorizontalAlignment="Left" Checked="ChkSearchProjectPath_Checked" Unchecked="ChkSearchProjectPath_Checked"/>
<CheckBox x:Name="chkEnableProjectRename" Content="Enable Project title rename (F2)" ToolTip="Renames project title only, DOES NOT rename project folder! New name is saved into ProjectSettings/ProjectName.txt" Checked="ChkEnableProjectRename_Checked" Unchecked="ChkEnableProjectRename_Checked" HorizontalAlignment="Left"/>
<CheckBox x:Name="chkShowPlatform" Content="Show current target platform (if exists in .csproj)" ToolTip="Shows target platform column" Checked="ChkShowPlatform_Checked" Unchecked="ChkShowPlatform_Checked" HorizontalAlignment="Left"/>
<CheckBox x:Name="chkEnablePlatformSelection" Content="Enable Platform Selection (Experimental!)" Checked="ChkEnablePlatformSelection_Checked" Unchecked="ChkEnablePlatformSelection_Checked" ToolTip="Select target platform" HorizontalAlignment="Left"/>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,0,0">
<CheckBox x:Name="chkShowGitBranchColumn" Content="Show git branch" Checked="ChkShowGitBranchColumn_CheckedChanged" Unchecked="ChkShowGitBranchColumn_CheckedChanged" ToolTip="Shows column for project git branch info" HorizontalAlignment="Left"/>
<CheckBox x:Name="chkGetGitBranchRecursively" Content="Search Parent Folders for branch info" Checked="ChkGetGitBranchRecursively_CheckedChanged" Unchecked="ChkGetGitBranchRecursively_CheckedChanged" ToolTip="Search parent folders recursively to find current branch" HorizontalAlignment="Left" Margin="14,0,0,3"/>
<CheckBox x:Name="chkCheckPlasticBranch" Content="Check Plastic branch" ToolTip="Checks for plastic branch, if .git doesnt exists" HorizontalAlignment="Left" Margin="14,0,0,3" Checked="ChkCheckPlasticBranch_Checked" Unchecked="ChkCheckPlasticBranch_Checked"/>
</StackPanel>
<CheckBox x:Name="chkAskNameForQuickProject" Content="Ask name for New Project" Checked="ChkAskNameForQuickProject_Checked" Unchecked="ChkAskNameForQuickProject_Checked" ToolTip="If disabled, uses automatic quick project naming (Should be enabled, unless you want instant project creation)" HorizontalAlignment="Left"/>
<CheckBox x:Name="chkCheckSRP" Content="Show SRP column" ToolTip="Display Scriptable Render Pipeline column" HorizontalAlignment="Left" Checked="chkCheckSRP_Checked" Unchecked="chkCheckSRP_Checked"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<CheckBox x:Name="chkShowMissingFolderProjects" Content="Show projects that don't exist on disk" Checked="ChkShowMissingFolderProjects_CheckedChanged" Unchecked="ChkShowMissingFolderProjects_CheckedChanged" ToolTip="List in recent projects, even if the project folder is missing" HorizontalAlignment="Left"/>
<Button Style="{StaticResource CustomButton}" x:Name="btnPurgeMissingFolders" Margin="12,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Cleanup projects with missing project folder from the recent list (in settings data)" Click="btnPurgeMissingFolders_Click">
<Label Content="Purge list" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</StackPanel>
<CheckBox x:Name="chkShowLauncherArgumentsColumn" Content="Show commandline arguments column" Unchecked="ChkShowLauncherArgumentsColumn_CheckedChanged" Checked="ChkShowLauncherArgumentsColumn_CheckedChanged" ToolTip="Shows column for custom project commandline params" HorizontalAlignment="Left"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<Label Foreground="{DynamicResource ThemeButtonForeground}" Padding="0,5,5,0" HorizontalAlignment="Left">Project name:</Label>
<RadioButton x:Name="radioProjNameFolder" Content="ProjectName.txt or Folder" Margin="3,0,0,0" GroupName="toggleGroupProjectName" IsChecked="True" Checked="RadioProjNameFolder_Checked" ToolTip="Take project name from project folder name OR ProjectName.txt if file exists in ProjectSettings/ folder" HorizontalAlignment="Left"/>
<RadioButton x:Name="radioProjNameProductName" Content="Settings ProductName" Margin="5,0,0,0" GroupName="toggleGroupProjectName" Checked="RadioProjNameProductName_Checked" ToolTip="Take project name from player settings ProductName field" HorizontalAlignment="Left"/>
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,0,0">
<CheckBox x:Name="chkOverride40ProjectCount" Content="Maximum recent projects count" ToolTip="(Experimental) Save all recent projects to preferences and merge into recent list" HorizontalAlignment="Left" Checked="chkOverride40ProjectCount_Checked" Unchecked="chkOverride40ProjectCount_Checked"/>
<TextBox x:Name="txtMaxProjectCount" Text="128" ToolTip="40 projects come from Unity registry, rest are added and taken from preferences data" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="50" Padding="0,3,0,0" HorizontalAlignment="Left" Margin="5,0,0,0" LostFocus="txtMaxProjectCount_LostFocus" TextChanged="txtMaxProjectCount_TextChanged" Height="22" />
<Label Content="(Experimental!)" Foreground="{DynamicResource ThemeButtonForeground}" />
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,0,4">
<CheckBox x:Name="chkUseInitScript" Content="Use Init script for new projects" ToolTip="Runs editor script on new project (to do custom setup)" HorizontalAlignment="Left" Checked="chkUseInitScript_Checked" Unchecked="chkUseInitScript_Checked"/>
<TextBox x:Name="txtCustomInitFileURL" BorderBrush="Transparent" MinWidth="191" MaxWidth="191" ToolTip="URL OR local folder to fetch init file from (NOTE: Not automatically fetched, only if press Fetch button)" Padding="0,3,0,0" Margin="5,0,0,0" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" Text="https://raw.githubusercontent.com/unitycoder/UnityInitializeProject/main/Assets/Editor/InitializeProject.cs" PreviewKeyDown="txtCustomInitFileURL_PreviewKeyDown" LostFocus="txtCustomInitFileURL_LostFocus" />
<Button x:Name="btnExploreScriptsFolder" Style="{StaticResource CustomButton}" ToolTip="Explore Scripts folder" Content="..." Height="22" Width="22" HorizontalAlignment="Right" VerticalAlignment="Top" FontSize="16" Padding="1,-2,1,1" Click="btnExploreScriptsFolder_Click" Margin="5,0,0,0"/>
<Button Style="{StaticResource CustomButton}" x:Name="btnFetchLatestInitScript" Margin="5,0,0,0" FontSize="11" Height="24" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Copies latest script from this location (Renames existing script as *.bak)" Click="btnFetchLatestInitScript_Click">
<Label Content="Fetch" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,0,4">
<Label Content="Root Folder for New Projects" Foreground="{DynamicResource ThemeButtonForeground}" Padding="2,3,5,3" />
<TextBox x:Name="txtRootFolderForNewProjects" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="256" ToolTip="Root folder for quick New Projects (so that you dont have to pick project folder every time)" Padding="0,3,0,0" TextChanged="TxtRootFolderForNewProjects_TextChanged" Width="150" />
<Button Style="{StaticResource CustomButton}" x:Name="btnBrowseProjectRootFolder" Content="..." Margin="6,0,0,0" MinWidth="22" Click="BtnBrowseProjectRootFolder_Click" MinHeight="22" FontSize="16" ToolTip="Browse for new projects root folder.." />
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal">
<Label Content="Webgl Relative Build Path (inside Builds/)" Foreground="{DynamicResource ThemeButtonForeground}" Padding="2,3,5,3" />
<TextBox x:Name="txtWebglRelativePath" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="192" ToolTip="Inside Builds/ folder you might have separate folder for webgl builds, like webgl/. Used for starting WebGL server there" Padding="0,3,0,0" TextChanged="TxtWebglRelativePath_TextChanged" />
</StackPanel>
</StackPanel>
</GroupBox>
<GroupBox Grid.Row="3" Header="UI" VerticalAlignment="Top" Margin="3,0,0,0">
<StackPanel Grid.Row="3" Orientation="Vertical" Margin="3,5,0,0" >
<CheckBox x:Name="chkHumanFriendlyDateTime" Content="Use human friendly Last Modified" ToolTip="Last modified date format" HorizontalAlignment="Left" Checked="ChkHumanFriendlyDateTime_Checked" Unchecked="ChkHumanFriendlyDateTime_Checked"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<CheckBox x:Name="chkUseCustomLastModified" Content="Date format" ToolTip="Last modified date format" HorizontalAlignment="Left" Checked="ChkUseCustomLastModified_Checked" Unchecked="ChkUseCustomLastModified_Checked"/>
<TextBox x:Name="txtCustomDateTimeFormat" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="150" ToolTip="Default is dd/MM/yyyy HH:mm:ss" Padding="0,3,0,0" Margin="5,0,0,0" Text="dd/MM/yyyy HH:mm:ss" LostFocus="TxtCustomDateTimeFormat_LostFocus" TextChanged="TxtCustomDateTimeFormat_TextChanged"/>
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,0,4">
<CheckBox x:Name="chkUseCustomTheme" Content="Load custom theme" ToolTip="Loads theme.ini from application folder" Checked="ChkUseCustomTheme_Checked" Unchecked="ChkUseCustomTheme_Checked" HorizontalAlignment="Left"/>
<TextBox x:Name="txtCustomThemeFile" BorderBrush="Transparent" MinWidth="128" ToolTip="Default is theme.ini" Padding="0,3,0,0" Margin="5,0,0,0" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" Text="theme.ini" LostFocus="TxtCustomThemeFile_LostFocus" PreviewKeyDown="TxtCustomThemeFile_PreviewKeyDown" />
<Button Style="{StaticResource CustomButton}" ToolTip="Reload theme" x:Name="btnReloadTheme" Content="⟳" Height="22" Width="22" HorizontalAlignment="Right" VerticalAlignment="Top" FontSize="16" Padding="1,-2,1,1" Click="BtnReloadTheme_Click" Margin="5,0,0,0"/>
<Button Style="{StaticResource CustomButton}" ToolTip="Explore Themes folder" x:Name="btnExploreFolder" Content="..." Height="22" Width="22" HorizontalAlignment="Right" VerticalAlignment="Top" FontSize="16" Padding="1,-2,1,1" Click="BtnExploreFolder_Click" Margin="5,0,0,0"/>
<Button Style="{StaticResource CustomButton}" ToolTip="Open theme editor" x:Name="btnThemeEditor" Content="✎" Height="22" Width="22" HorizontalAlignment="Right" VerticalAlignment="Top" Padding="1,-2,1,1" Click="BtnThemeEditor_Click" Margin="5,0,0,0"/>
</StackPanel>
</StackPanel>
</GroupBox>
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Vertical" Margin="5,0,0,0" >
<GroupBox Grid.Row="3" Header="General" VerticalAlignment="Top" Margin="0,0,3,0">
<StackPanel Grid.Row="3" Orientation="Vertical" Margin="3,5,0,0" >
<CheckBox x:Name="chkMinimizeToTaskbar" Content="Minimize to tray" Checked="ChkMinimizeToTaskbar_CheckedChanged" Unchecked="ChkMinimizeToTaskbar_CheckedChanged" ToolTip="When minimized, hides application into taskbar icon area" HorizontalAlignment="Left" />
<CheckBox x:Name="chkQuitAfterOpen" Content="Close after opening project" Checked="ChkQuitAfterOpen_CheckedChanged" Unchecked="ChkQuitAfterOpen_CheckedChanged" ToolTip="Closes launcher after running project (not really useful)" HorizontalAlignment="Left"/>
<CheckBox x:Name="chkQuitAfterCommandline" Content="Close after launching from Explorer" Unchecked="ChkQuitAfterCommandline_CheckedChanged" Checked="ChkQuitAfterCommandline_CheckedChanged" ToolTip="Close launcher after running from commandline or Explorer (recommended)" HorizontalAlignment="Left"/>
<CheckBox x:Name="chkAllowSingleInstanceOnly" Content="Allow single instance only" Checked="ChkAllowSingleInstanceOnly_CheckedChanged" Unchecked="ChkAllowSingleInstanceOnly_CheckedChanged" ToolTip="Activates already running instance, instead of starting new exe (not working if app is minized to taskbar)" HorizontalAlignment="Left"/>
<CheckBox x:Name="useAlphaReleaseNotesSite" Content="Use Unity Alpha Release Notes Site (only for final versions) " ToolTip="Use the superior (but alpha) Unity Release Notes (https://alpha.release-notes.ds.unity3d.com/) site when clicking on the ReleaseNotes button. Otherwise will default to the normal build page." Checked="UseAlphaReleaseNotes_Checked" Unchecked="UseAlphaReleaseNotes_Checked"/>
<CheckBox x:Name="useUnofficialReleaseList" Content="Use Unofficial Release Watch List (for latest downloads)" ToolTip="Checks latest releases from https://github.com/unitycoder/UnofficialUnityReleasesWatcher (if not yet available in The Unity Releases API)" Checked="useUnofficialReleaseList_Checked" Unchecked="useUnofficialReleaseList_Checked"/>
<CheckBox x:Name="chkDisableUnityHubLaunch" Content="Disable UnityHub launch at Editor start" ToolTip="Overrides UnityHub IPC port. Note: You will be logged out in Editor!" Checked="chkDisableUnityHubLaunch_Checked" Unchecked="chkDisableUnityHubLaunch_Checked"/>
<CheckBox x:Name="chkFetchAdditionalInfo" Content="Fetch additional info about Editor" ToolTip="Reads releases API for security related info" Checked="chkFetchAdditionalInfo_Checked" Unchecked="chkFetchAdditionalInfo_Checked"/>
<CheckBox x:Name="chkFetchOnlineTemplates" Content="New Project window: Fetch online templates" ToolTip="Automatically fetch template listfrom Unity servers" Checked="chkFetchOnlineTemplates_Checked" Unchecked="chkFetchOnlineTemplates_Checked"/>
<CheckBox x:Name="chkStreamerMode" Content="Streamer Mode (hide project names and folders)" ToolTip="Hide project names and folders in main view" Checked="ChkStreamerMode_Checked" Unchecked="ChkStreamerMode_Checked" HorizontalAlignment="Left"/>
<!--<StackPanel Orientation="Horizontal" Margin="0,0,0,4">
<TextBox x:Name="txtTemplatePackagesFolder" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" ToolTip="Folder for your custom unitypackage templates (for new project)" Padding="0,3,0,0" Width="110" TextChanged="TxtTemplatePackagesFolder_TextChanged" />
<Button Style="{StaticResource CustomButton}" x:Name="btnBrowseTemplateUnityPackagesFolder" Content="..." Margin="6,0,0,0" MinWidth="22" MinHeight="22" FontSize="16" ToolTip="Browse for new projects root folder.." Click="BtnBrowseTemplateUnityPackagesFolder_Click" />
<Label Content="UnityPackage Templates Folder" Foreground="{DynamicResource ThemeButtonForeground}" />
</StackPanel>-->
</StackPanel>
</GroupBox>
<GroupBox Grid.Row="3" Header="System" VerticalAlignment="Top" Margin="0,0,3,0">
<StackPanel Grid.Row="3" Orientation="Vertical" Margin="3,5,0,0" >
<CheckBox x:Name="chkRegisterExplorerMenu" Content="Register Explorer context menu" Unchecked="ChkRegisterExplorerMenu_CheckedChanged" Checked="ChkRegisterExplorerMenu_CheckedChanged" ToolTip="Add registry entry for Explorer context menu" HorizontalAlignment="Left"/>
<CheckBox x:Name="chkRegisterInstallAPKMenu" Content="Register 'Install APK' Explorer context menu" ToolTip="Add registry entry for Explorer 'Install APK' context menu" HorizontalAlignment="Left" Checked="chkRegisterInstallAPKMenu_Checked" Unchecked="chkRegisterInstallAPKMenu_Checked"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<CheckBox x:Name="chkRunAutomatically" Content="Run automatically on startup" ToolTip="Run automatically using startup registry key" HorizontalAlignment="Left" Checked="ChkRunAutomatically_Checked" Unchecked="ChkRunAutomatically_Checked"/>
<CheckBox x:Name="chkRunAutomaticallyMinimized" Content="as minimized" ToolTip="Minimize to tray when started automatically" HorizontalAlignment="Left" Checked="ChkRunAutomaticallyMinimized_Checked" Unchecked="ChkRunAutomaticallyMinimized_Checked" Margin="5,0,0,3"/>
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,6,0,0">
<Label Content="Initial WebGL server port" Foreground="{DynamicResource ThemeButtonForeground}" />
<TextBox x:Name="txtWebglPort" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="80" ToolTip="Initial port for first local WebGL webserver process (next one will be +1)" Padding="0,3,0,0" TextChanged="txtWebglPort_TextChanged" HorizontalAlignment="Left" Text="50000" LostFocus="txtWebglPort_LostFocus" Margin="1,0,0,0" Height="22" />
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,0,4" HorizontalAlignment="Left">
<Label Content="Shortcut .bat files folder" Foreground="{DynamicResource ThemeButtonForeground}" HorizontalAlignment="Left" />
<TextBox x:Name="txtShortcutBatchFileFolder" BorderBrush="Transparent" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="169" ToolTip="Save generated .bat files here (they are run from Desktop Shortcut)" Padding="0,3,0,0" HorizontalAlignment="Left" MaxWidth="169" LostFocus="TxtShortcutBatchFileFolder_LostFocus" TextChanged="TxtShortcutBatchFileFolder_TextChanged" Margin="5,0,0,0" Height="22" />
<Button Style="{StaticResource CustomButton}" x:Name="btnBrowseBatchFileFolder" Content="..." Margin="5,0,0,0" MinWidth="22" Click="BtnBrowseBatchFileFolder_Click" MinHeight="22" FontSize="16" ToolTip="Browse for .bat folder (default location is inside AppData/UnityLauncherPro/ and works fine, so this is optional)" HorizontalAlignment="Left" />
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,0,4" HorizontalAlignment="Left">
<Label Content="ADB args:" Foreground="{DynamicResource ThemeButtonForeground}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Margin="0,1,0,-4" />
<TextBox x:Name="txtLogCatArgs" BorderBrush="Transparent" Text="-s Unity ActivityManager PackageManager dalvikvm DEBUG -v color" CaretBrush="{DynamicResource ThemeSearchCaret}" Background="{DynamicResource ThemeTextBoxBackground}" SelectionBrush="{DynamicResource ThemeSearchSelection}" Foreground="{DynamicResource ThemeSearchForeground}" MinWidth="250" ToolTip="ADB commandline arguments" Padding="0,3,0,0" TextChanged="TxtLogCatArgs_TextChanged" Width="250" Height="22" />
<Button Style="{StaticResource CustomButton}" x:Name="btnResetLogCatArgs" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Reset to default logcat args" Click="BtnResetLogCatArgs_Click">
<Label Content="Reset" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,6,0,0">
<Button x:Name="btnPatchHubConfig" ToolTip="Modifies json file to set 'manual:true' values into 'false', so that can add modules using Hub. NOTE: This cannot be reversed (not keeping track which values were already 'false')" Style="{StaticResource CustomButton}" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btnPatchHubConfig_Click">
<Label Content="Patch Hub editors.json" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
<Label Content="*If want to install modules from Hub" Foreground="{DynamicResource ThemeButtonForeground}" />
</StackPanel>
</StackPanel>
</GroupBox>
</StackPanel>
</StackPanel>
<!-- links-->
<Label x:Name="lblVersion" Grid.Row="4" Foreground="{DynamicResource ThemeButtonForeground}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,114,10" Content="" HorizontalContentAlignment="Right"/>
<Button Grid.Row="4" Style="{StaticResource CustomButton}" x:Name="btnOpenGithub" Margin="0,0,15,10" HorizontalAlignment="Right" VerticalAlignment="Bottom" Click="BtnOpenGithub_Click">
<Label Content="View in Github" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
</Button>
</Grid>
</TabItem>
</TabControl>
<Grid Grid.Row="2" UseLayoutRounding="False">
<StatusBar VerticalAlignment="Center" Margin="3,0,15,0" Background="{x:Null}" Foreground="{DynamicResource ThemeStatusText}">
<StatusBarItem>
<TextBlock x:Name="txtStatus" Margin="6,0,3,0" VerticalAlignment="Center" Text="Ready"/>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right">
<Label x:Name="btnBuildStatus" Content="◯" ToolTip="Builds" Foreground="{DynamicResource ThemeButtonForegroundDisabled}" Padding="0,0,0,0"/>
</StatusBarItem>
</StatusBar>
</Grid>
</Grid>
</Window>