ProjectFilterDialog.xaml 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <Window x:Class="Quadarax.Application.Tools.Vsix.FilteredSolutionsExtension.ProjectFilterDialog"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:local="clr-namespace:Quadarax.Application.Tools.Vsix.FilteredSolutionsExtension"
  5. Title="Select Projects for Solution" Height="800" Width="1200"
  6. WindowStartupLocation="CenterScreen" ResizeMode="CanResize"
  7. MinHeight="600" MinWidth="1000">
  8. <Window.Resources>
  9. <local:StringToVisibilityConverter x:Key="StringToVisibilityConverter"/>
  10. <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
  11. </Window.Resources>
  12. <Grid Margin="15">
  13. <Grid.RowDefinitions>
  14. <RowDefinition Height="Auto"/>
  15. <RowDefinition Height="Auto"/>
  16. <RowDefinition Height="Auto"/>
  17. <RowDefinition Height="*"/>
  18. <RowDefinition Height="Auto"/>
  19. <RowDefinition Height="Auto"/>
  20. </Grid.RowDefinitions>
  21. <!-- Solution Info -->
  22. <GroupBox Grid.Row="0" Header="Solution Information" Padding="10" Margin="0,0,0,10">
  23. <StackPanel>
  24. <TextBlock x:Name="SolutionNameTextBlock" FontWeight="Bold" Margin="0,0,0,5" FontSize="14"/>
  25. <TextBlock x:Name="ProjectCountTextBlock" Foreground="Gray"/>
  26. <TextBlock Text="💡 Dependencies are automatically selected/deselected when you check/uncheck projects"
  27. Foreground="DarkBlue" FontStyle="Italic" Margin="0,5,0,0" TextWrapping="Wrap"/>
  28. </StackPanel>
  29. </GroupBox>
  30. <!-- Filter Section -->
  31. <GroupBox Grid.Row="1" Header="Filter Projects" Padding="10" Margin="0,0,0,10">
  32. <Grid>
  33. <Grid.ColumnDefinitions>
  34. <ColumnDefinition Width="Auto"/>
  35. <ColumnDefinition Width="*"/>
  36. <ColumnDefinition Width="Auto"/>
  37. </Grid.ColumnDefinitions>
  38. <Label Grid.Column="0" Content="Filter pattern:" VerticalAlignment="Center"/>
  39. <TextBox Grid.Column="1" x:Name="FilterTextBox" Margin="5,0"
  40. VerticalAlignment="Center" Height="25"
  41. ToolTip="Use * for wildcards (e.g., Test*, *Core*, *.Data) - filters as you type"
  42. TextChanged="FilterTextBox_TextChanged"/>
  43. <Button Grid.Column="2" x:Name="ClearFilterButton" Content="Clear"
  44. Width="60" Click="ClearFilterButton_Click" Margin="5,0,0,0"/>
  45. </Grid>
  46. </GroupBox>
  47. <!-- Selection Controls -->
  48. <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,0,0,10">
  49. <Button x:Name="SelectAllButton" Content="Select All" Width="90" Height="32"
  50. Click="SelectAllButton_Click" Margin="0,0,8,0"/>
  51. <Button x:Name="ClearAllButton" Content="Clear All" Width="90" Height="32"
  52. Click="ClearAllButton_Click" Margin="0,0,8,0"/>
  53. <Button x:Name="SelectTestsButton" Content="Select Tests" Width="90" Height="32"
  54. Click="SelectTestsButton_Click" Margin="0,0,8,0"
  55. ToolTip="Select projects with 'Test' in name and their dependencies"/>
  56. <Separator Width="1" Margin="8,0"/>
  57. <Button x:Name="ExpandAllButton" Content="Expand All" Width="80" Height="32"
  58. Click="ExpandAllButton_Click" Margin="8,0,8,0"
  59. ToolTip="Expand all project dependency trees"/>
  60. <Button x:Name="CollapseAllButton" Content="Collapse All" Width="90" Height="32"
  61. Click="CollapseAllButton_Click" Margin="0,0,8,0"
  62. ToolTip="Collapse all project dependency trees"/>
  63. <Separator Width="1" Margin="8,0"/>
  64. <TextBlock x:Name="SelectionCountTextBlock" VerticalAlignment="Center"
  65. Margin="8,0,0,0" Foreground="DarkBlue" FontWeight="Medium"/>
  66. </StackPanel>
  67. <!-- Project Tree -->
  68. <Border Grid.Row="3" BorderBrush="LightGray" BorderThickness="1" Margin="0,0,0,15">
  69. <TreeView x:Name="ProjectTreeView" ScrollViewer.HorizontalScrollBarVisibility="Auto"
  70. ScrollViewer.VerticalScrollBarVisibility="Auto" Padding="5">
  71. <TreeView.Resources>
  72. <!-- Template for dependency items (children) -->
  73. <DataTemplate x:Key="DependencyTemplate" DataType="{x:Type local:ProjectTreeItem}">
  74. <StackPanel Orientation="Horizontal" Margin="0,1">
  75. <TextBlock Text=" " Width="24"/> <!-- Indentation -->
  76. <Image Source="{Binding ProjectTypeIcon}" Width="14" Height="14"
  77. Margin="0,0,4,0" VerticalAlignment="Center"/>
  78. <TextBlock Text="{Binding DisplayName}"
  79. Foreground="Gray" FontStyle="Italic"
  80. VerticalAlignment="Center"
  81. ToolTip="{Binding ToolTipText}"/>
  82. </StackPanel>
  83. </DataTemplate>
  84. <!-- Template for main projects -->
  85. <HierarchicalDataTemplate DataType="{x:Type local:ProjectTreeItem}" ItemsSource="{Binding Children}"
  86. ItemTemplate="{StaticResource DependencyTemplate}">
  87. <StackPanel Orientation="Vertical" Margin="0,2">
  88. <!-- Main project line -->
  89. <StackPanel Orientation="Horizontal">
  90. <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}"
  91. Checked="ProjectTreeItem_Checked"
  92. Unchecked="ProjectTreeItem_Unchecked"
  93. Margin="0,0,8,0"
  94. VerticalAlignment="Center"
  95. IsEnabled="{Binding IsSelectable}"/>
  96. <Image Source="{Binding ProjectTypeIcon}" Width="16" Height="16"
  97. Margin="0,0,6,0" VerticalAlignment="Center"/>
  98. <TextBlock Text="{Binding DisplayName}" VerticalAlignment="Center"
  99. FontWeight="{Binding FontWeight}"
  100. Foreground="{Binding TextBrush}"
  101. ToolTip="{Binding ToolTipText}"/>
  102. </StackPanel>
  103. <!-- Dependencies label (only for projects with dependencies) -->
  104. <StackPanel Orientation="Horizontal" Margin="24,2,0,0"
  105. Visibility="{Binding HasDependencies, Converter={StaticResource BooleanToVisibilityConverter}}">
  106. <TextBlock Text="Dependencies:"
  107. FontWeight="Normal" Foreground="DarkBlue" FontSize="11"/>
  108. </StackPanel>
  109. </StackPanel>
  110. </HierarchicalDataTemplate>
  111. </TreeView.Resources>
  112. <TreeView.ItemContainerStyle>
  113. <Style TargetType="{x:Type TreeViewItem}">
  114. <Setter Property="IsExpanded" Value="True"/>
  115. <Setter Property="Margin" Value="0,1"/>
  116. </Style>
  117. </TreeView.ItemContainerStyle>
  118. </TreeView>
  119. </Border>
  120. <!-- Status Bar -->
  121. <StatusBar Grid.Row="4" Height="25" Margin="0,0,0,10">
  122. <StatusBarItem>
  123. <TextBlock x:Name="StatusTextBlock" Text="Ready" />
  124. </StatusBarItem>
  125. </StatusBar>
  126. <!-- Action Buttons -->
  127. <StackPanel Grid.Row="5" Orientation="Horizontal" HorizontalAlignment="Right">
  128. <Button x:Name="SaveAsButton" Content="Save As..." Width="100" Height="35"
  129. Click="SaveAsButton_Click" Margin="0,0,10,0"
  130. Background="Green" Foreground="White" FontWeight="Medium"
  131. ToolTip="Save filtered solution to a custom location"/>
  132. <Button x:Name="OkButton" Content="Create Filtered Solution" Width="160" Height="35"
  133. Click="OkButton_Click" IsDefault="True" Margin="0,0,10,0"
  134. Background="DodgerBlue" Foreground="White" FontWeight="Medium"/>
  135. <Button x:Name="CancelButton" Content="Open All Projects" Width="130" Height="35"
  136. Click="CancelButton_Click" IsCancel="True"/>
  137. </StackPanel>
  138. </Grid>
  139. </Window>