ux: new layout for Staticstics window

This commit is contained in:
leo 2024-09-24 17:06:16 +08:00
parent 6151f4dc5f
commit b9597dc92a
No known key found for this signature in database
3 changed files with 49 additions and 70 deletions

View file

@ -123,11 +123,26 @@
</ListBoxItem>
</ListBox>
<!-- Color Picker -->
<Border Grid.Row="1" HorizontalAlignment="Right">
<Button Background="Transparent" BorderThickness="0" Width="28" Height="28" Margin="0,0,24,0" VerticalAlignment="Center">
<Button.Flyout>
<Flyout>
<Border Padding="8">
<v:ColorPicker Value="{Binding SampleColor, Mode=TwoWay}"/>
</Border>
</Flyout>
</Button.Flyout>
<Path Width="14" Height="14" Data="{StaticResource Icons.ColorPicker}" Fill="{Binding SampleBrush}"/>
</Button>
</Border>
<!-- Contents -->
<ContentControl Grid.Row="2" Content="{Binding SelectedReport, Mode=OneWay}">
<ContentControl Grid.Row="2" Content="{Binding SelectedReport, Mode=OneWay}" Margin="8,8,8,16">
<ContentControl.DataTemplates>
<DataTemplate DataType="m:StatisticsReport">
<Grid ColumnDefinitions="256,*" Margin="8,8,8,16">
<Grid ColumnDefinitions="256,*">
<Grid Grid.Column="0" RowDefinitions="*,16">
<!-- Table By Committer -->
<ListBox Grid.Column="0"
@ -185,25 +200,12 @@
</Grid>
<!-- Graph -->
<Grid Grid.Column="1" RowDefinitions="28,*" Margin="16,0">
<Button Grid.Row="0" Background="Transparent" BorderThickness="0" HorizontalAlignment="Center">
<Button.Flyout>
<Flyout>
<Border Padding="8">
<v:ColorPicker Value="{Binding #ThisControl.SampleFillColor, Mode=TwoWay}"/>
</Border>
</Flyout>
</Button.Flyout>
<Path Width="20" Height="20" Data="{StaticResource Icons.ColorPicker}" Fill="{Binding #ThisControl.SampleFillBrush}"/>
</Button>
<lvc:CartesianChart Grid.Row="1"
Series="{Binding Series}"
XAxes="{Binding XAxes}" YAxes="{Binding YAxes}"
ZoomMode="X"
DataContextChanged="OnReportChanged"/>
</Grid>
<lvc:CartesianChart Grid.Column="1"
Margin="0"
Padding="0"
Series="{Binding Series}"
XAxes="{Binding XAxes}" YAxes="{Binding YAxes}"
ZoomMode="X"/>
</Grid>
</DataTemplate>
</ContentControl.DataTemplates>

View file

@ -1,65 +1,17 @@
using Avalonia;
using Avalonia.Input;
using Avalonia.Media;
namespace SourceGit.Views
{
public partial class Statistics : ChromelessWindow
{
public static readonly StyledProperty<uint> SampleFillColorProperty =
AvaloniaProperty.Register<Statistics, uint>(nameof(SampleFillColor));
public uint SampleFillColor
{
get => GetValue(SampleFillColorProperty);
set => SetValue(SampleFillColorProperty, value);
}
public static readonly StyledProperty<IBrush> SampleFillBrushProperty =
AvaloniaProperty.Register<Statistics, IBrush>(nameof(SampleFillBrush), Brushes.Transparent);
public IBrush SampleFillBrush
{
get => GetValue(SampleFillBrushProperty);
set => SetValue(SampleFillBrushProperty, value);
}
public Statistics()
{
SampleFillColor = ViewModels.Preference.Instance.StatisticsSampleColor;
SampleFillBrush = new SolidColorBrush(SampleFillColor);
InitializeComponent();
}
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);
if (change.Property == SampleFillColorProperty)
ChangeColor(SampleFillColor);
}
private void BeginMoveWindow(object _, PointerPressedEventArgs e)
{
BeginMoveDrag(e);
}
private void OnReportChanged(object sender, System.EventArgs e)
{
if (DataContext is ViewModels.Statistics { SelectedReport: Models.StatisticsReport report })
report.ChangeColor(SampleFillColor);
}
private void ChangeColor(uint color)
{
if (color != ViewModels.Preference.Instance.StatisticsSampleColor)
{
ViewModels.Preference.Instance.StatisticsSampleColor = color;
SetCurrentValue(SampleFillBrushProperty, new SolidColorBrush(color));
if (DataContext is ViewModels.Statistics { SelectedReport: Models.StatisticsReport report })
report.ChangeColor(color);
}
}
}
}