feat(ui): Task-Zeile entdichten und Kontextmenü gruppieren (UX-Struktur A)

Gruppe 1 (Send to queue, Remove from queue, Cancel execution, Open quick
session, Refine task) ist jetzt fix sichtbar und gated per IsEnabled + Grund
statt komplett auszublenden. Planning/Schedule wandern in Untermenüs (Mark as
existierte bereits); der Planning-Kopf zeigt einen Grund, wenn er sonst leer
wäre. Refine-Button, ungesetzter Star und Dequeue-X erscheinen nur bei
Hover-oder-Selektion (TaskRowViewModel.ShowRowActions); ein gesetzter Star und
der Refining-Spinner bleiben immer sichtbar. Der Branch-Chip wandert aus der
Zeile in eine Meta-Zeile in TaskHeaderBar.

A3 headless verifiziert: Avalonia 12 zeigt ToolTips auf IsEnabled=false
Controls nur mit ToolTip.ShowOnDisabled="True" (Default ist false) — dieses
Attached Property existiert bereits und wird für die neuen Disabled-Reason-
Tooltips genutzt.
This commit is contained in:
mika kuns
2026-08-21 14:34:14 +02:00
parent c3ef460a40
commit 51dc7bd61b
7 changed files with 376 additions and 33 deletions
+24 -15
View File
@@ -41,7 +41,9 @@
Classes.dragging="{Binding IsDragging}"
Classes.drop-target="{Binding IsDropTarget}"
Classes.done="{Binding Done}"
ContextRequested="OnRowContextRequested">
ContextRequested="OnRowContextRequested"
PointerEntered="OnRowPointerEntered"
PointerExited="OnRowPointerExited">
<Grid ColumnDefinitions="0,18,32,*,Auto,Auto,32" Margin="6,8,10,8">
<!-- Chevron toggle (only for planning parent tasks) -->
@@ -149,12 +151,18 @@
<TextBlock Text="{Binding CreationPhaseLabel}"/>
</Border>
<!-- Dequeue button (visible when row is Queued, or planning parent has queued subtasks) -->
<!-- Dequeue button (visible when row is Queued, or planning parent has queued subtasks,
AND the row is hovered or selected) -->
<Button Classes="icon-btn dequeue-btn"
IsVisible="{Binding CanRemoveFromQueue}"
ToolTip.Tip="{loc:Tr tasks.removeFromQueueTip}"
Command="{Binding $parent[ItemsControl].((vm:TasksIslandViewModel)DataContext).RemoveFromQueueCommand}"
CommandParameter="{Binding}">
<Button.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="CanRemoveFromQueue"/>
<Binding Path="ShowRowActions"/>
</MultiBinding>
</Button.IsVisible>
<PathIcon Width="10" Height="10" Data="{StaticResource Icon.X}"/>
</Button>
@@ -168,16 +176,6 @@
</StackPanel>
</Border>
<!-- Branch chip -->
<Border Classes="chip chip-branch" IsVisible="{Binding HasBranch}">
<StackPanel Orientation="Horizontal" Spacing="4" VerticalAlignment="Center">
<PathIcon Width="10" Height="10"
Data="{StaticResource Icon.GitBranch}"
Foreground="{DynamicResource TextDimBrush}"/>
<TextBlock Text="{Binding Branch}"/>
</StackPanel>
</Border>
<!-- Diff chip -->
<Border Classes="chip chip-diff" IsVisible="{Binding HasDiff}">
<StackPanel Orientation="Horizontal" Spacing="4" VerticalAlignment="Center">
@@ -203,11 +201,16 @@
<!-- Refine button, replaced by a spinner while the refine run is in flight -->
<Panel Grid.Column="5">
<Button Classes="icon-btn refine-btn"
IsVisible="{Binding CanRefine}"
VerticalAlignment="Top" Margin="0,2,0,0"
Command="{Binding $parent[ItemsControl].((vm:TasksIslandViewModel)DataContext).RefineTaskCommand}"
CommandParameter="{Binding}"
ToolTip.Tip="{loc:Tr tasks.refineTip}">
<Button.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="CanRefine"/>
<Binding Path="ShowRowActions"/>
</MultiBinding>
</Button.IsVisible>
<Viewbox Width="16" Height="16">
<Path Classes="plan-icon" Data="{StaticResource Icon.Refine}"/>
</Viewbox>
@@ -218,13 +221,19 @@
ToolTip.Tip="{loc:Tr tasks.refiningTip}"/>
</Panel>
<!-- Star toggle -->
<!-- Star toggle: a set star always shows; unset, only on hover/selection -->
<Button Grid.Column="6" Classes="icon-btn star-btn"
Classes.on="{Binding IsStarred}"
VerticalAlignment="Top" Margin="0,2,0,0"
Command="{Binding $parent[ItemsControl].((vm:TasksIslandViewModel)DataContext).ToggleStarCommand}"
CommandParameter="{Binding}"
ToolTip.Tip="{loc:Tr details.starTip}">
<Button.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.Or}">
<Binding Path="IsStarred"/>
<Binding Path="ShowRowActions"/>
</MultiBinding>
</Button.IsVisible>
<PathIcon Width="14" Height="14" Data="{StaticResource Icon.Star}"/>
</Button>
</Grid>