150 lines
6.8 KiB
XML
150 lines
6.8 KiB
XML
<Window xmlns="https://github.com/avaloniaui"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||
x:Class="ClaudeDo.Ui.Views.Modals.DiffModalView"
|
||
x:DataType="vm:DiffModalViewModel"
|
||
Title="Diff"
|
||
Width="1200" Height="800"
|
||
WindowDecorations="None"
|
||
ExtendClientAreaToDecorationsHint="True"
|
||
WindowStartupLocation="CenterOwner"
|
||
Background="{DynamicResource SurfaceBrush}">
|
||
|
||
<Window.KeyBindings>
|
||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||
</Window.KeyBindings>
|
||
|
||
<Window.Styles>
|
||
<!-- diff line row tints via Tag selector (compiled-binding-friendly) -->
|
||
<Style Selector="Border.diff-line[Tag=add]">
|
||
<Setter Property="Background" Value="{StaticResource RunningTintBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=del]">
|
||
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=ctx]">
|
||
<Setter Property="Background" Value="Transparent"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=add] TextBlock.diff-sign">
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrightBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=del] TextBlock.diff-sign">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=ctx] TextBlock.diff-sign">
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=add] TextBlock.diff-text">
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrightBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=del] TextBlock.diff-text">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border.diff-line[Tag=ctx] TextBlock.diff-text">
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}"/>
|
||
</Style>
|
||
</Window.Styles>
|
||
|
||
<ctl:ModalShell Title="DIFF" CloseCommand="{Binding CloseCommand}">
|
||
<ctl:ModalShell.Footer>
|
||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||
Margin="16,0">
|
||
<Button Content="Merge…" Command="{Binding MergeCommand}"/>
|
||
</StackPanel>
|
||
</ctl:ModalShell.Footer>
|
||
|
||
<!-- Body: sidebar + diff content -->
|
||
<Grid ColumnDefinitions="240,*">
|
||
|
||
<!-- File sidebar -->
|
||
<Border Grid.Column="0"
|
||
BorderBrush="{DynamicResource LineBrush}"
|
||
BorderThickness="0,0,1,0"
|
||
Background="{DynamicResource DeepBrush}">
|
||
<ListBox ItemsSource="{Binding Files}"
|
||
SelectedItem="{Binding SelectedFile, Mode=TwoWay}"
|
||
Background="Transparent"
|
||
BorderThickness="0"
|
||
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
|
||
<ListBox.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:DiffFileViewModel">
|
||
<Border Padding="10,8" Background="Transparent">
|
||
<StackPanel Spacing="4">
|
||
<TextBlock Classes="path-mono" Text="{Binding Path}"
|
||
TextTrimming="PrefixCharacterEllipsis"/>
|
||
<StackPanel Orientation="Horizontal" Spacing="6">
|
||
<Border Classes="chip" Padding="5,2">
|
||
<TextBlock Foreground="{DynamicResource MossBrightBrush}"
|
||
Text="{Binding Additions, StringFormat='+{0}'}"/>
|
||
</Border>
|
||
<Border Classes="chip" Padding="5,2">
|
||
<TextBlock Foreground="{DynamicResource BloodBrush}"
|
||
Text="{Binding Deletions, StringFormat='−{0}'}"/>
|
||
</Border>
|
||
</StackPanel>
|
||
</StackPanel>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ListBox.ItemTemplate>
|
||
</ListBox>
|
||
</Border>
|
||
|
||
<!-- Diff content -->
|
||
<Grid Grid.Column="1" Background="{DynamicResource VoidBrush}">
|
||
<TextBlock Classes="body" Text="{Binding StatusMessage}"
|
||
IsVisible="{Binding StatusMessage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"/>
|
||
<ScrollViewer HorizontalScrollBarVisibility="Auto"
|
||
VerticalScrollBarVisibility="Auto">
|
||
<ItemsControl ItemsSource="{Binding SelectedFile.Lines}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:DiffLineViewModel">
|
||
<Border Classes="diff-line"
|
||
Tag="{Binding ClassName}"
|
||
Padding="4,1">
|
||
<Grid ColumnDefinitions="48,48,16,*">
|
||
<!-- Old line number -->
|
||
<TextBlock Grid.Column="0"
|
||
Text="{Binding OldNo}"
|
||
Classes="diff-lineno"
|
||
FontFamily="{DynamicResource MonoFont}"
|
||
FontSize="{StaticResource FontSizeMono}"
|
||
Foreground="{DynamicResource TextFaintBrush}"
|
||
HorizontalAlignment="Right"
|
||
Margin="0,0,8,0"/>
|
||
<!-- New line number -->
|
||
<TextBlock Grid.Column="1"
|
||
Text="{Binding NewNo}"
|
||
Classes="diff-lineno"
|
||
FontFamily="{DynamicResource MonoFont}"
|
||
FontSize="{StaticResource FontSizeMono}"
|
||
Foreground="{DynamicResource TextFaintBrush}"
|
||
HorizontalAlignment="Right"
|
||
Margin="0,0,8,0"/>
|
||
<!-- Sign -->
|
||
<TextBlock Grid.Column="2"
|
||
Classes="diff-sign"
|
||
Text="{Binding Sign}"
|
||
FontFamily="{DynamicResource MonoFont}"
|
||
FontSize="{StaticResource FontSizeMono}"/>
|
||
<!-- Line text -->
|
||
<TextBlock Grid.Column="3"
|
||
Classes="diff-text"
|
||
Text="{Binding Text}"
|
||
FontFamily="{DynamicResource MonoFont}"
|
||
FontSize="{StaticResource FontSizeMono}"
|
||
TextWrapping="NoWrap"/>
|
||
</Grid>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</ScrollViewer>
|
||
</Grid>
|
||
</Grid>
|
||
</ctl:ModalShell>
|
||
</Window>
|