feat(ui): spinners for ConPTY session start and task refine

Both actions previously gave no feedback: opening a ConPTY session only created
the tile after the launch-spec roundtrip (which may build a worktree), and the
refine button just disappeared while the run was in flight.

Add a shared Ellipse.spinner style, and let ConPtyPaneViewModel resolve its own
launch spec so the tile shows up immediately with a starting overlay. A failed
launch now keeps the tile with its inline error banner instead of never
appearing — Start() is separated from the ctor so the host can subscribe to
ErrorReported before the launch begins.
This commit is contained in:
Mika Kuns
2026-07-27 15:02:51 +02:00
parent 6c8de4aef3
commit 1466d0fbab
9 changed files with 150 additions and 90 deletions
+17 -11
View File
@@ -207,17 +207,23 @@
</StackPanel>
</StackPanel>
<!-- Refine button -->
<Button Grid.Column="5" 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}">
<Viewbox Width="16" Height="16">
<Path Classes="plan-icon" Data="{StaticResource Icon.Refine}"/>
</Viewbox>
</Button>
<!-- 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}">
<Viewbox Width="16" Height="16">
<Path Classes="plan-icon" Data="{StaticResource Icon.Refine}"/>
</Viewbox>
</Button>
<Ellipse Classes="spinner"
IsVisible="{Binding IsRefining}"
VerticalAlignment="Top" Margin="0,4,2,0"
ToolTip.Tip="{loc:Tr tasks.refiningTip}"/>
</Panel>
<!-- Star toggle -->
<Button Grid.Column="6" Classes="icon-btn star-btn"