mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-21 20:24:59 +00:00
refactor: launcher tab bar scroller visibility
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
parent
59e4f0d388
commit
e757e63bf7
2 changed files with 35 additions and 40 deletions
|
@ -6,9 +6,14 @@
|
|||
xmlns:c="using:SourceGit.Converters"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="SourceGit.Views.LauncherTabBar"
|
||||
x:DataType="vm:Launcher">
|
||||
x:DataType="vm:Launcher"
|
||||
x:Name="ThisControl">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto">
|
||||
<RepeatButton x:Name="LeftScrollIndicator" Grid.Column="0" Classes="icon_button" Width="18" Height="30" Click="ScrollTabsLeft">
|
||||
<RepeatButton Grid.Column="0"
|
||||
Classes="icon_button"
|
||||
Width="18" Height="30"
|
||||
Click="ScrollTabsLeft"
|
||||
IsVisible="{Binding #ThisControl.IsScrollerVisible}">
|
||||
<Path Width="8" Height="14" Stretch="Fill" Data="{StaticResource Icons.TriangleLeft}"/>
|
||||
</RepeatButton>
|
||||
|
||||
|
@ -96,11 +101,11 @@
|
|||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
|
||||
<Button x:Name="InnerNewTabBtn"
|
||||
Classes="icon_button"
|
||||
<Button Classes="icon_button"
|
||||
Width="16" Height="16"
|
||||
Margin="8,0"
|
||||
Command="{Binding AddNewTab}">
|
||||
Command="{Binding AddNewTab}"
|
||||
IsVisible="{Binding !#ThisControl.IsScrollerVisible}">
|
||||
<ToolTip.Tip>
|
||||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBlock Text="{DynamicResource Text.PageTabBar.New}" VerticalAlignment="Center"/>
|
||||
|
@ -113,24 +118,21 @@
|
|||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
<RepeatButton x:Name="RightScrollIndicator" Grid.Column="2" Classes="icon_button" Width="18" Height="30" Click="ScrollTabsRight">
|
||||
<Path Width="8" Height="14" Stretch="Fill" Data="{StaticResource Icons.TriangleRight}"/>
|
||||
</RepeatButton>
|
||||
<StackPanel Grid.Column="2" Orientation="Horizontal" IsVisible="{Binding #ThisControl.IsScrollerVisible}">
|
||||
<RepeatButton Classes="icon_button" Width="18" Height="30" Click="ScrollTabsRight">
|
||||
<Path Width="8" Height="14" Stretch="Fill" Data="{StaticResource Icons.TriangleRight}"/>
|
||||
</RepeatButton>
|
||||
|
||||
<Button x:Name="OuterNewTabBtn"
|
||||
Grid.Column="3"
|
||||
Classes="icon_button"
|
||||
Width="16" Height="16"
|
||||
Margin="8,0"
|
||||
Command="{Binding AddNewTab}">
|
||||
<ToolTip.Tip>
|
||||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBlock Text="{DynamicResource Text.PageTabBar.New}" VerticalAlignment="Center"/>
|
||||
<TextBlock Margin="16,0,0,0" Text="{OnPlatform Ctrl+T, macOS=⌘+T}" Opacity=".6" FontSize="11" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</ToolTip.Tip>
|
||||
<Button Classes="icon_button" Width="16" Height="16" Margin="8,0" Command="{Binding AddNewTab}">
|
||||
<ToolTip.Tip>
|
||||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBlock Text="{DynamicResource Text.PageTabBar.New}" VerticalAlignment="Center"/>
|
||||
<TextBlock Margin="16,0,0,0" Text="{OnPlatform Ctrl+T, macOS=⌘+T}" Opacity=".6" FontSize="11" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</ToolTip.Tip>
|
||||
|
||||
<Path Width="12" Height="12" Data="{StaticResource Icons.Plus}"/>
|
||||
</Button>
|
||||
<Path Width="12" Height="12" Data="{StaticResource Icons.Plus}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
|
|
@ -10,6 +10,15 @@ namespace SourceGit.Views
|
|||
{
|
||||
public partial class LauncherTabBar : UserControl
|
||||
{
|
||||
public static readonly StyledProperty<bool> IsScrollerVisibleProperty =
|
||||
AvaloniaProperty.Register<LauncherTabBar, bool>(nameof(IsScrollerVisible));
|
||||
|
||||
public bool IsScrollerVisible
|
||||
{
|
||||
get => GetValue(IsScrollerVisibleProperty);
|
||||
set => SetValue(IsScrollerVisibleProperty, value);
|
||||
}
|
||||
|
||||
public LauncherTabBar()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
@ -43,7 +52,7 @@ namespace SourceGit.Views
|
|||
if (containerEndX < startX || containerEndX > endX)
|
||||
continue;
|
||||
|
||||
if (OuterNewTabBtn.IsVisible && i == count - 1)
|
||||
if (IsScrollerVisible && i == count - 1)
|
||||
break;
|
||||
|
||||
var separatorX = containerEndX - startX + LauncherTabsScroller.Bounds.X;
|
||||
|
@ -143,23 +152,7 @@ namespace SourceGit.Views
|
|||
|
||||
private void OnTabsLayoutUpdated(object _1, EventArgs _2)
|
||||
{
|
||||
if (LauncherTabsScroller.Extent.Width > LauncherTabsScroller.Viewport.Width)
|
||||
{
|
||||
LeftScrollIndicator.IsVisible = true;
|
||||
LeftScrollIndicator.IsEnabled = LauncherTabsScroller.Offset.X > 0;
|
||||
RightScrollIndicator.IsVisible = true;
|
||||
RightScrollIndicator.IsEnabled = LauncherTabsScroller.Offset.X < LauncherTabsScroller.Extent.Width - LauncherTabsScroller.Viewport.Width;
|
||||
InnerNewTabBtn.IsVisible = false;
|
||||
OuterNewTabBtn.IsVisible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LeftScrollIndicator.IsVisible = false;
|
||||
RightScrollIndicator.IsVisible = false;
|
||||
InnerNewTabBtn.IsVisible = true;
|
||||
OuterNewTabBtn.IsVisible = false;
|
||||
}
|
||||
|
||||
SetCurrentValue(IsScrollerVisibleProperty, LauncherTabsScroller.Extent.Width > LauncherTabsScroller.Viewport.Width);
|
||||
InvalidateVisual();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue