Make the side panel scroll as a whole, which works much better on small screens when repo has lots of tags and branches

This commit is contained in:
Noisyfox 2024-07-04 15:40:06 +08:00
parent b193579d3c
commit 8378104ce2
3 changed files with 358 additions and 409 deletions

View file

@ -1205,8 +1205,8 @@
<Grid> <Grid>
<Border Name="PART_Background" CornerRadius="{TemplateBinding CornerRadius}" Background="Transparent"/> <Border Name="PART_Background" CornerRadius="{TemplateBinding CornerRadius}" Background="Transparent"/>
<Grid Name="PART_Header" ColumnDefinitions="16,*" Margin="{TemplateBinding Level, Mode=OneWay, Converter={StaticResource TreeViewItemLeftMarginConverter}}"> <Grid Name="PART_Header" ColumnDefinitions="Auto,*" Margin="{TemplateBinding Level, Mode=OneWay, Converter={StaticResource TreeViewItemLeftMarginConverter}}">
<Panel Name="PART_ExpandCollapseChevronContainer"> <Panel Name="PART_ExpandCollapseChevronContainer" Width="{StaticResource TreeViewItemIndent}">
<ToggleButton Name="PART_ExpandCollapseChevron" <ToggleButton Name="PART_ExpandCollapseChevron"
Classes="tree_expander" Classes="tree_expander"
Focusable="False" Focusable="False"

View file

@ -119,7 +119,7 @@
</Grid> </Grid>
<!-- Dashboard --> <!-- Dashboard -->
<Grid Grid.Row="1" Margin="0,0,0,8" RowDefinitions="Auto,Auto,28,Auto,28,*,28,Auto,28,Auto,28,Auto" IsVisible="{Binding !IsSearching}"> <Grid Grid.Row="1" Margin="0,0,0,8" RowDefinitions="Auto,Auto,*" IsVisible="{Binding !IsSearching}">
<!-- Page Switcher for Right Panel --> <!-- Page Switcher for Right Panel -->
<Border Grid.Row="0" Margin="8,0,4,0" BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}" CornerRadius="6"> <Border Grid.Row="0" Margin="8,0,4,0" BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}" CornerRadius="6">
<Border CornerRadius="6" ClipToBounds="True"> <Border CornerRadius="6" ClipToBounds="True">
@ -231,16 +231,18 @@
</TextBox.InnerRightContent> </TextBox.InnerRightContent>
</TextBox> </TextBox>
<ScrollViewer Grid.Row="2" HorizontalScrollBarVisibility="Disabled">
<Grid RowDefinitions="28,Auto,28,Auto,28,Auto,28,Auto,28,Auto">
<!-- Local Branches --> <!-- Local Branches -->
<TextBlock Grid.Row="2" Classes="group_header_label" Text="{DynamicResource Text.Repository.LocalBranches}"/> <TextBlock Grid.Row="0" Classes="group_header_label" Text="{DynamicResource Text.Repository.LocalBranches}"/>
<TreeView Grid.Row="3" <TreeView Grid.Row="1"
x:Name="localBranchTree" x:Name="localBranchTree"
MaxHeight="400"
Margin="8,0,4,0" Margin="8,0,4,0"
SelectionMode="Multiple" SelectionMode="Multiple"
ItemsSource="{Binding LocalBranchTrees}" ItemsSource="{Binding LocalBranchTrees}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled"
ContextRequested="OnLocalBranchContextMenuRequested" ContextRequested="OnLocalBranchContextMenuRequested"
SelectionChanged="OnLocalBranchTreeSelectionChanged"> SelectionChanged="OnLocalBranchTreeSelectionChanged">
<TreeView.Styles> <TreeView.Styles>
@ -301,19 +303,19 @@
</TreeView> </TreeView>
<!-- Remotes --> <!-- Remotes -->
<Grid Grid.Row="4" ColumnDefinitions="*,Auto"> <Grid Grid.Row="2" ColumnDefinitions="*,Auto">
<TextBlock Grid.Column="0" Classes="group_header_label" Text="{DynamicResource Text.Repository.Remotes}"/> <TextBlock Grid.Column="0" Classes="group_header_label" Text="{DynamicResource Text.Repository.Remotes}"/>
<Button Grid.Column="1" Classes="icon_button" Width="14" Margin="8,0" Command="{Binding AddRemote}" ToolTip.Tip="{DynamicResource Text.Repository.Remotes.Add}"> <Button Grid.Column="1" Classes="icon_button" Width="14" Margin="8,0" Command="{Binding AddRemote}" ToolTip.Tip="{DynamicResource Text.Repository.Remotes.Add}">
<Path Width="12" Height="12" Data="{StaticResource Icons.Remote.Add}"/> <Path Width="12" Height="12" Data="{StaticResource Icons.Remote.Add}"/>
</Button> </Button>
</Grid> </Grid>
<TreeView Grid.Row="5" <TreeView Grid.Row="3"
x:Name="remoteBranchTree" x:Name="remoteBranchTree"
Margin="8,0,4,0" Margin="8,0,4,0"
SelectionMode="Multiple" SelectionMode="Multiple"
ItemsSource="{Binding RemoteBranchTrees}" ItemsSource="{Binding RemoteBranchTrees}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled"
ContextRequested="OnRemoteBranchContextMenuRequested" ContextRequested="OnRemoteBranchContextMenuRequested"
SelectionChanged="OnRemoteBranchTreeSelectionChanged"> SelectionChanged="OnRemoteBranchTreeSelectionChanged">
<TreeView.Styles> <TreeView.Styles>
@ -364,7 +366,7 @@
</TreeView> </TreeView>
<!-- Tags --> <!-- Tags -->
<ToggleButton Grid.Row="6" Classes="group_expander" IsChecked="{Binding IsTagGroupExpanded, Mode=TwoWay}"> <ToggleButton Grid.Row="4" Classes="group_expander" IsChecked="{Binding IsTagGroupExpanded, Mode=TwoWay}">
<Grid ColumnDefinitions="Auto,*,Auto"> <Grid ColumnDefinitions="Auto,*,Auto">
<TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Tags}"/> <TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Tags}"/>
<TextBlock Grid.Column="1" Text="{Binding Tags, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/> <TextBlock Grid.Column="1" Text="{Binding Tags, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
@ -373,86 +375,63 @@
</Button> </Button>
</Grid> </Grid>
</ToggleButton> </ToggleButton>
<DataGrid Grid.Row="7" <TreeView Grid.Row="5"
x:Name="tagsList" x:Name="tagsList"
Margin="8,0,4,0" Margin="8,0,4,0"
Background="Transparent" Background="Transparent"
ItemsSource="{Binding VisibleTags}" ItemsSource="{Binding VisibleTags}"
SelectionMode="Single" SelectionMode="Single"
CanUserReorderColumns="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
CanUserResizeColumns="False" ScrollViewer.VerticalScrollBarVisibility="Disabled"
CanUserSortColumns="False"
IsReadOnly="True"
HeadersVisibility="None"
Focusable="False" Focusable="False"
RowHeight="24"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"
IsVisible="{Binding IsTagGroupExpanded, Mode=OneWay}" IsVisible="{Binding IsTagGroupExpanded, Mode=OneWay}"
SelectionChanged="OnTagDataGridSelectionChanged" SelectionChanged="OnTagSelectionChanged"
ContextRequested="OnTagContextRequested" ContextRequested="OnTagContextRequested">
PropertyChanged="OnTagPropertyChanged"> <TreeView.Styles>
<DataGrid.Styles> <Style Selector="TreeViewItem">
<Style Selector="DataGridRow">
<Setter Property="CornerRadius" Value="4" /> <Setter Property="CornerRadius" Value="4" />
</Style> </Style>
<Style Selector="DataGridRow /template/ Border#RowBorder"> <Style Selector="TreeViewItem /template/ Panel#PART_ExpandCollapseChevronContainer">
<Setter Property="ClipToBounds" Value="True" /> <Setter Property="IsVisible" Value="False" />
</Style> </Style>
<Style Selector="Grid.repository_leftpanel DataGridRow:pointerover /template/ Rectangle#BackgroundRectangle"> <Style Selector="Grid.repository_leftpanel TreeViewItem /template/ Border#PART_LayoutRoot:pointerover Border#PART_Background">
<Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" /> <Setter Property="Background" Value="{DynamicResource Brush.AccentHovered}" />
<Setter Property="Opacity" Value=".5"/>
</Style>
<Style Selector="Grid.repository_leftpanel DataGridRow:selected /template/ Rectangle#BackgroundRectangle">
<Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" />
<Setter Property="Opacity" Value="1"/>
</Style>
<Style Selector="Grid.repository_leftpanel:focus-within DataGridRow:selected /template/ Rectangle#BackgroundRectangle">
<Setter Property="Fill" Value="{DynamicResource Brush.Accent}" />
<Setter Property="Opacity" Value=".65"/> <Setter Property="Opacity" Value=".65"/>
</Style> </Style>
<Style Selector="Grid.repository_leftpanel:focus-within DataGridRow:selected:pointerover /template/ Rectangle#BackgroundRectangle"> <Style Selector="Grid.repository_leftpanel TreeViewItem:selected /template/ Border#PART_LayoutRoot Border#PART_Background">
<Setter Property="Fill" Value="{DynamicResource Brush.Accent}" /> <Setter Property="Background" Value="{DynamicResource Brush.AccentHovered}" />
<Setter Property="Opacity" Value="1"/>
</Style>
<Style Selector="Grid.repository_leftpanel:focus-within TreeViewItem:selected /template/ Border#PART_LayoutRoot Border#PART_Background">
<Setter Property="Background" Value="{DynamicResource Brush.Accent}" />
<Setter Property="Opacity" Value=".65"/>
</Style>
<Style Selector="Grid.repository_leftpanel:focus-within TreeViewItem:selected /template/ Border#PART_LayoutRoot:pointerover Border#PART_Background">
<Setter Property="Background" Value="{DynamicResource Brush.Accent}" />
<Setter Property="Opacity" Value=".8"/> <Setter Property="Opacity" Value=".8"/>
</Style> </Style>
</DataGrid.Styles> </TreeView.Styles>
<DataGrid.Columns> <TreeView.ItemTemplate>
<DataGridTemplateColumn Header="ICON"> <TreeDataTemplate x:DataType="{x:Type m:Tag}">
<DataGridTemplateColumn.CellTemplate> <Grid Height="24" ColumnDefinitions="Auto,*,Auto" Background="Transparent">
<DataTemplate x:DataType="{x:Type m:Tag}"> <Path Grid.Column="0" Width="10" Height="10" Margin="8,0" Data="{StaticResource Icons.Tag}"/>
<Path Width="10" Height="10" Margin="8,0" Data="{StaticResource Icons.Tag}"/> <TextBlock Grid.Column="1" Text="{Binding Name}" Classes="monospace" TextTrimming="CharacterEllipsis" />
</DataTemplate> <ToggleButton Grid.Column="2" Classes="filter"
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" Header="NAME">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="{x:Type m:Tag}">
<TextBlock Text="{Binding Name}" Classes="monospace" TextTrimming="CharacterEllipsis" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="FILTER">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="{x:Type m:Tag}">
<ToggleButton Classes="filter"
Margin="0,0,8,0" Margin="0,0,8,0"
Background="Transparent" Background="Transparent"
Checked="OnToggleFilter" Checked="OnToggleFilter"
Unchecked="OnToggleFilter" Unchecked="OnToggleFilter"
IsChecked="{Binding IsFiltered}"/> IsChecked="{Binding IsFiltered}"/>
</DataTemplate> </Grid>
</DataGridTemplateColumn.CellTemplate> </TreeDataTemplate>
</DataGridTemplateColumn> </TreeView.ItemTemplate>
</DataGrid.Columns> </TreeView>
</DataGrid>
<!-- Submodules --> <!-- Submodules -->
<ToggleButton Grid.Row="8" Classes="group_expander" IsChecked="{Binding IsSubmoduleGroupExpanded, Mode=TwoWay}"> <ToggleButton Grid.Row="6" Classes="group_expander" IsChecked="{Binding IsSubmoduleGroupExpanded, Mode=TwoWay}">
<Grid ColumnDefinitions="Auto,*,Auto,Auto"> <Grid ColumnDefinitions="Auto,*,Auto,Auto">
<TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Submodules}"/> <TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Submodules}"/>
<TextBlock Grid.Column="1" Text="{Binding Submodules, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/> <TextBlock Grid.Column="1" Text="{Binding Submodules, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
@ -475,65 +454,58 @@
</Button> </Button>
</Grid> </Grid>
</ToggleButton> </ToggleButton>
<DataGrid Grid.Row="9" <TreeView Grid.Row="7"
MaxHeight="200"
Margin="8,0,4,0" Margin="8,0,4,0"
Background="Transparent" Background="Transparent"
ItemsSource="{Binding Submodules}" ItemsSource="{Binding Submodules}"
SelectionMode="Single" SelectionMode="Single"
CanUserReorderColumns="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
CanUserResizeColumns="False" ScrollViewer.VerticalScrollBarVisibility="Disabled"
CanUserSortColumns="False"
IsReadOnly="True"
HeadersVisibility="None"
Focusable="False" Focusable="False"
RowHeight="26"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"
ContextRequested="OnSubmoduleContextRequested" ContextRequested="OnSubmoduleContextRequested"
DoubleTapped="OnDoubleTappedSubmodule" DoubleTapped="OnDoubleTappedSubmodule"
IsVisible="{Binding IsSubmoduleGroupExpanded, Mode=OneWay}"> IsVisible="{Binding IsSubmoduleGroupExpanded, Mode=OneWay}">
<DataGrid.Styles> <TreeView.Styles>
<Style Selector="DataGridRow"> <Style Selector="TreeViewItem">
<Setter Property="CornerRadius" Value="4" /> <Setter Property="CornerRadius" Value="4" />
</Style> </Style>
<Style Selector="DataGridRow /template/ Border#RowBorder"> <Style Selector="TreeViewItem /template/ Panel#PART_ExpandCollapseChevronContainer">
<Setter Property="ClipToBounds" Value="True" /> <Setter Property="IsVisible" Value="False" />
</Style> </Style>
<Style Selector="DataGridRow:pointerover /template/ Rectangle#BackgroundRectangle"> <Style Selector="Grid.repository_leftpanel TreeViewItem /template/ Border#PART_LayoutRoot:pointerover Border#PART_Background">
<Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" /> <Setter Property="Background" Value="{DynamicResource Brush.AccentHovered}" />
<Setter Property="Opacity" Value=".65"/>
</Style> </Style>
<Style Selector="Grid.repository_leftpanel TreeViewItem:selected /template/ Border#PART_LayoutRoot Border#PART_Background">
<Style Selector="DataGridRow:selected /template/ Rectangle#BackgroundRectangle"> <Setter Property="Background" Value="{DynamicResource Brush.AccentHovered}" />
<Setter Property="Fill" Value="{DynamicResource Brush.Accent}" /> <Setter Property="Opacity" Value="1"/>
</Style> </Style>
</DataGrid.Styles> <Style Selector="Grid.repository_leftpanel:focus-within TreeViewItem:selected /template/ Border#PART_LayoutRoot Border#PART_Background">
<Setter Property="Background" Value="{DynamicResource Brush.Accent}" />
<Setter Property="Opacity" Value=".65"/>
</Style>
<Style Selector="Grid.repository_leftpanel:focus-within TreeViewItem:selected /template/ Border#PART_LayoutRoot:pointerover Border#PART_Background">
<Setter Property="Background" Value="{DynamicResource Brush.Accent}" />
<Setter Property="Opacity" Value=".8"/>
</Style>
</TreeView.Styles>
<DataGrid.Columns> <TreeView.ItemTemplate>
<DataGridTemplateColumn Header="ICON"> <TreeDataTemplate>
<DataGridTemplateColumn.CellTemplate> <Grid Height="24" ColumnDefinitions="Auto,*" Background="Transparent">
<DataTemplate> <Path Grid.Column="0" Width="10" Height="10" Margin="8,0" Data="{StaticResource Icons.Submodule}"/>
<Path Width="10" Height="10" Margin="8,0" Data="{StaticResource Icons.Submodule}"/> <Border Grid.Column="1" Padding="0,0,4,0">
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" Header="NAME">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Padding="0,0,4,0">
<TextBlock Text="{Binding}" ClipToBounds="True" Classes="monospace" TextTrimming="CharacterEllipsis"/> <TextBlock Text="{Binding}" ClipToBounds="True" Classes="monospace" TextTrimming="CharacterEllipsis"/>
</Border> </Border>
</DataTemplate> </Grid>
</DataGridTemplateColumn.CellTemplate> </TreeDataTemplate>
</DataGridTemplateColumn> </TreeView.ItemTemplate>
</DataGrid.Columns> </TreeView>
</DataGrid>
<!-- Worktrees --> <!-- Worktrees -->
<ToggleButton Grid.Row="10" Classes="group_expander" IsChecked="{Binding IsWorktreeGroupExpanded, Mode=TwoWay}"> <ToggleButton Grid.Row="8" Classes="group_expander" IsChecked="{Binding IsWorktreeGroupExpanded, Mode=TwoWay}">
<Grid ColumnDefinitions="Auto,*,Auto,Auto"> <Grid ColumnDefinitions="Auto,*,Auto,Auto">
<TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Worktrees}"/> <TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Worktrees}"/>
<TextBlock Grid.Column="1" Text="{Binding Worktrees, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/> <TextBlock Grid.Column="1" Text="{Binding Worktrees, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
@ -556,71 +528,60 @@
</Button> </Button>
</Grid> </Grid>
</ToggleButton> </ToggleButton>
<DataGrid Grid.Row="11" <TreeView Grid.Row="9"
MaxHeight="200"
Margin="8,0,4,0" Margin="8,0,4,0"
Background="Transparent" Background="Transparent"
ItemsSource="{Binding Worktrees}" ItemsSource="{Binding Worktrees}"
SelectionMode="Single" SelectionMode="Single"
CanUserReorderColumns="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
CanUserResizeColumns="False" ScrollViewer.VerticalScrollBarVisibility="Disabled"
CanUserSortColumns="False"
IsReadOnly="True"
HeadersVisibility="None"
Focusable="False" Focusable="False"
RowHeight="26"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"
ContextRequested="OnWorktreeContextRequested" ContextRequested="OnWorktreeContextRequested"
DoubleTapped="OnDoubleTappedWorktree" DoubleTapped="OnDoubleTappedWorktree"
IsVisible="{Binding IsWorktreeGroupExpanded, Mode=OneWay}"> IsVisible="{Binding IsWorktreeGroupExpanded, Mode=OneWay}">
<DataGrid.Styles> <TreeView.Styles>
<Style Selector="DataGridRow"> <Style Selector="TreeViewItem">
<Setter Property="CornerRadius" Value="4" /> <Setter Property="CornerRadius" Value="4" />
</Style> </Style>
<Style Selector="DataGridRow /template/ Border#RowBorder"> <Style Selector="TreeViewItem /template/ Panel#PART_ExpandCollapseChevronContainer">
<Setter Property="ClipToBounds" Value="True" /> <Setter Property="IsVisible" Value="False" />
</Style> </Style>
<Style Selector="DataGridRow:pointerover /template/ Rectangle#BackgroundRectangle"> <Style Selector="Grid.repository_leftpanel TreeViewItem /template/ Border#PART_LayoutRoot:pointerover Border#PART_Background">
<Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" /> <Setter Property="Background" Value="{DynamicResource Brush.AccentHovered}" />
<Setter Property="Opacity" Value=".65"/>
</Style> </Style>
<Style Selector="Grid.repository_leftpanel TreeViewItem:selected /template/ Border#PART_LayoutRoot Border#PART_Background">
<Style Selector="DataGridRow:selected /template/ Rectangle#BackgroundRectangle"> <Setter Property="Background" Value="{DynamicResource Brush.AccentHovered}" />
<Setter Property="Fill" Value="{DynamicResource Brush.Accent}" /> <Setter Property="Opacity" Value="1"/>
</Style> </Style>
</DataGrid.Styles> <Style Selector="Grid.repository_leftpanel:focus-within TreeViewItem:selected /template/ Border#PART_LayoutRoot Border#PART_Background">
<Setter Property="Background" Value="{DynamicResource Brush.Accent}" />
<Setter Property="Opacity" Value=".65"/>
</Style>
<Style Selector="Grid.repository_leftpanel:focus-within TreeViewItem:selected /template/ Border#PART_LayoutRoot:pointerover Border#PART_Background">
<Setter Property="Background" Value="{DynamicResource Brush.Accent}" />
<Setter Property="Opacity" Value=".8"/>
</Style>
</TreeView.Styles>
<DataGrid.Columns> <TreeView.ItemTemplate>
<DataGridTemplateColumn Header="ICON"> <TreeDataTemplate>
<DataGridTemplateColumn.CellTemplate> <Grid Height="24" ColumnDefinitions="Auto,*,Auto" Background="Transparent">
<DataTemplate> <Path Grid.Column="0" Width="10" Height="10" Margin="8,0,0,0" Data="{StaticResource Icons.Worktree}"/>
<Path Width="10" Height="10" Margin="8,0,0,0" Data="{StaticResource Icons.Worktree}"/> <TextBlock Grid.Column="1" Classes="monospace" Margin="8,0,0,0" TextTrimming="CharacterEllipsis">
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" Header="FullPath">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Classes="monospace" Margin="8,0,0,0" TextTrimming="CharacterEllipsis">
<Run Text="{Binding FullPath}"/> <Run Text="{Binding FullPath}"/>
<Run Text="{Binding Name}" Foreground="{DynamicResource Brush.FG2}"/> <Run Text="{Binding Name}" Foreground="{DynamicResource Brush.FG2}"/>
</TextBlock> </TextBlock>
</DataTemplate> <Path Grid.Column="2" Width="10" Height="10" Margin="4,0,8,0" Data="{StaticResource Icons.Lock}" Fill="{DynamicResource Brush.FG2}" IsVisible="{Binding IsLocked}"/>
</DataGridTemplateColumn.CellTemplate> </Grid>
</DataGridTemplateColumn> </TreeDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<DataGridTemplateColumn Header="FullPath"> </Grid>
<DataGridTemplateColumn.CellTemplate> </ScrollViewer>
<DataTemplate>
<Path Width="10" Height="10" Margin="4,0,8,0" Data="{StaticResource Icons.Lock}" Fill="{DynamicResource Brush.FG2}" IsVisible="{Binding IsLocked}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid> </Grid>
<!-- Commit Search Panel --> <!-- Commit Search Panel -->

View file

@ -255,14 +255,14 @@ namespace SourceGit.Views
} }
} }
private void OnTagDataGridSelectionChanged(object sender, SelectionChangedEventArgs e) private void OnTagSelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
if (sender is DataGrid datagrid && datagrid.SelectedItem != null) if (sender is TreeView tree && tree.SelectedItem != null)
{ {
localBranchTree.UnselectAll(); localBranchTree.UnselectAll();
remoteBranchTree.UnselectAll(); remoteBranchTree.UnselectAll();
var tag = datagrid.SelectedItem as Models.Tag; var tag = tree.SelectedItem as Models.Tag;
if (DataContext is ViewModels.Repository repo) if (DataContext is ViewModels.Repository repo)
repo.NavigateToCommit(tag.SHA); repo.NavigateToCommit(tag.SHA);
} }
@ -270,28 +270,16 @@ namespace SourceGit.Views
private void OnTagContextRequested(object sender, ContextRequestedEventArgs e) private void OnTagContextRequested(object sender, ContextRequestedEventArgs e)
{ {
if (sender is DataGrid datagrid && datagrid.SelectedItem != null && DataContext is ViewModels.Repository repo) if (sender is TreeView tree && tree.SelectedItem != null && DataContext is ViewModels.Repository repo)
{ {
var tag = datagrid.SelectedItem as Models.Tag; var tag = tree.SelectedItem as Models.Tag;
var menu = repo.CreateContextMenuForTag(tag); var menu = repo.CreateContextMenuForTag(tag);
datagrid.OpenContextMenu(menu); tree.OpenContextMenu(menu);
} }
e.Handled = true; e.Handled = true;
} }
private void OnTagPropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e)
{
if (e.Property == DataGrid.ItemsSourceProperty && DataContext is ViewModels.Repository vm)
{
if (vm.VisibleTags == null)
return;
var desiredHeight = tagsList.RowHeight * vm.VisibleTags.Count;
tagsList.Height = Math.Min(200, desiredHeight);
}
}
private void OnToggleFilter(object sender, RoutedEventArgs e) private void OnToggleFilter(object sender, RoutedEventArgs e)
{ {
if (sender is ToggleButton toggle) if (sender is ToggleButton toggle)
@ -318,11 +306,11 @@ namespace SourceGit.Views
private void OnSubmoduleContextRequested(object sender, ContextRequestedEventArgs e) private void OnSubmoduleContextRequested(object sender, ContextRequestedEventArgs e)
{ {
if (sender is DataGrid datagrid && datagrid.SelectedItem != null && DataContext is ViewModels.Repository repo) if (sender is TreeView tree && tree.SelectedItem != null && DataContext is ViewModels.Repository repo)
{ {
var submodule = datagrid.SelectedItem as string; var submodule = tree.SelectedItem as string;
var menu = repo.CreateContextMenuForSubmodule(submodule); var menu = repo.CreateContextMenuForSubmodule(submodule);
datagrid.OpenContextMenu(menu); tree.OpenContextMenu(menu);
} }
e.Handled = true; e.Handled = true;
@ -330,9 +318,9 @@ namespace SourceGit.Views
private void OnDoubleTappedSubmodule(object sender, TappedEventArgs e) private void OnDoubleTappedSubmodule(object sender, TappedEventArgs e)
{ {
if (sender is DataGrid datagrid && datagrid.SelectedItem != null && DataContext is ViewModels.Repository repo) if (sender is TreeView tree && tree.SelectedItem != null && DataContext is ViewModels.Repository repo)
{ {
var submodule = datagrid.SelectedItem as string; var submodule = tree.SelectedItem as string;
(DataContext as ViewModels.Repository).OpenSubmodule(submodule); (DataContext as ViewModels.Repository).OpenSubmodule(submodule);
} }
@ -341,11 +329,11 @@ namespace SourceGit.Views
private void OnWorktreeContextRequested(object sender, ContextRequestedEventArgs e) private void OnWorktreeContextRequested(object sender, ContextRequestedEventArgs e)
{ {
if (sender is DataGrid datagrid && datagrid.SelectedItem != null && DataContext is ViewModels.Repository repo) if (sender is TreeView tree && tree.SelectedItem != null && DataContext is ViewModels.Repository repo)
{ {
var worktree = datagrid.SelectedItem as Models.Worktree; var worktree = tree.SelectedItem as Models.Worktree;
var menu = repo.CreateContextMenuForWorktree(worktree); var menu = repo.CreateContextMenuForWorktree(worktree);
datagrid.OpenContextMenu(menu); tree.OpenContextMenu(menu);
} }
e.Handled = true; e.Handled = true;
@ -353,9 +341,9 @@ namespace SourceGit.Views
private void OnDoubleTappedWorktree(object sender, TappedEventArgs e) private void OnDoubleTappedWorktree(object sender, TappedEventArgs e)
{ {
if (sender is DataGrid datagrid && datagrid.SelectedItem != null && DataContext is ViewModels.Repository repo) if (sender is TreeView tree && tree.SelectedItem != null && DataContext is ViewModels.Repository repo)
{ {
var worktree = datagrid.SelectedItem as Models.Worktree; var worktree = tree.SelectedItem as Models.Worktree;
(DataContext as ViewModels.Repository).OpenWorktree(worktree); (DataContext as ViewModels.Repository).OpenWorktree(worktree);
} }