100 lines
5.4 KiB
XML
100 lines
5.4 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels"
|
|
xmlns:conv="using:ClaudeDo.Ui.Converters"
|
|
x:Class="ClaudeDo.Ui.Views.TaskListView"
|
|
x:DataType="vm:TaskListViewModel"
|
|
x:Name="Root">
|
|
<DockPanel>
|
|
<!-- Inline add field at bottom -->
|
|
<Border DockPanel.Dock="Bottom" Padding="8,8"
|
|
BorderThickness="0,1,0,0" BorderBrush="{StaticResource BorderSubtleBrush}">
|
|
<TextBox x:Name="InlineAddBox"
|
|
Text="{Binding InlineAddTitle, Mode=TwoWay}"
|
|
Watermark="+ Add a task..."
|
|
BorderThickness="1"
|
|
BorderBrush="{StaticResource BorderSubtleBrush}"
|
|
CornerRadius="8"
|
|
Padding="10,8"
|
|
FontSize="13"
|
|
KeyDown="OnInlineAddKeyDown"
|
|
GotFocus="OnInlineAddGotFocus"
|
|
LostFocus="OnInlineAddLostFocus"/>
|
|
</Border>
|
|
|
|
<!-- Task list -->
|
|
<ListBox x:Name="TaskListBox"
|
|
ItemsSource="{Binding Tasks}"
|
|
SelectedItem="{Binding SelectedTask}"
|
|
Background="Transparent"
|
|
Margin="4,0"
|
|
KeyDown="OnTaskListKeyDown">
|
|
<ListBox.ItemTemplate>
|
|
<DataTemplate x:DataType="vm:TaskItemViewModel">
|
|
<Grid ColumnDefinitions="Auto,*" Margin="4,4"
|
|
Background="Transparent"
|
|
DoubleTapped="OnTaskItemDoubleTapped"
|
|
PointerPressed="OnTaskItemPointerPressed">
|
|
<Grid.ContextFlyout>
|
|
<MenuFlyout>
|
|
<MenuItem Header="Edit"
|
|
Command="{Binding #Root.((vm:TaskListViewModel)DataContext).EditTaskCommand}"/>
|
|
<MenuItem Header="Delete"
|
|
Command="{Binding #Root.((vm:TaskListViewModel)DataContext).DeleteTaskCommand}"/>
|
|
<Separator/>
|
|
<MenuItem Header="Run Now"
|
|
Command="{Binding RunNowCommand}"/>
|
|
</MenuFlyout>
|
|
</Grid.ContextFlyout>
|
|
|
|
<!-- Circular checkbox -->
|
|
<Border Grid.Column="0" Width="22" Height="22"
|
|
CornerRadius="11"
|
|
BorderThickness="2"
|
|
BorderBrush="{Binding StatusText, Converter={x:Static conv:CheckboxBorderConverter.Instance}}"
|
|
Background="Transparent"
|
|
VerticalAlignment="Center" Margin="0,0,10,0"
|
|
Cursor="Hand"
|
|
PointerPressed="OnCheckboxPressed">
|
|
<Panel>
|
|
<!-- Checkmark for done -->
|
|
<Canvas Width="12" Height="12"
|
|
IsVisible="{Binding IsDone}"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center">
|
|
<Path Stroke="{StaticResource StatusGreenBrush}" StrokeThickness="2"
|
|
Data="M 1,6 L 4.5,9.5 L 11,3"/>
|
|
</Canvas>
|
|
<!-- Running dot -->
|
|
<Ellipse Width="8" Height="8"
|
|
Fill="{StaticResource StatusOrangeBrush}"
|
|
IsVisible="{Binding IsRunning}"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
</Panel>
|
|
</Border>
|
|
|
|
<!-- Task content -->
|
|
<StackPanel Grid.Column="1" VerticalAlignment="Center">
|
|
<TextBlock Text="{Binding Title}" FontWeight="Medium"
|
|
Foreground="{StaticResource TextPrimaryBrush}"
|
|
TextTrimming="CharacterEllipsis"/>
|
|
<TextBlock FontSize="11"
|
|
Foreground="{StaticResource TextDimBrush}"
|
|
IsVisible="{Binding TagsText, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
|
|
<TextBlock.Text>
|
|
<MultiBinding StringFormat="{}{0} · {1}">
|
|
<Binding Path="TagsText"/>
|
|
<Binding Path="StatusText"/>
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Text="{Binding StatusText}" FontSize="11"
|
|
Foreground="{StaticResource TextDimBrush}"
|
|
IsVisible="{Binding TagsText, Converter={x:Static StringConverters.IsNullOrEmpty}}"/>
|
|
</StackPanel>
|
|
</Grid>
|
|
</DataTemplate>
|
|
</ListBox.ItemTemplate>
|
|
</ListBox>
|
|
</DockPanel>
|
|
</UserControl>
|