feat(i18n): localize Avalonia view strings via loc:Tr markup
Extract ~165 hardcoded UI strings across islands, modals, planning and
shell views into en.json; replace with {loc:Tr} bindings.
This commit is contained in:
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.AboutModalView"
|
||||
x:DataType="vm:AboutModalViewModel"
|
||||
Title="About ClaudeDo"
|
||||
Title="{loc:Tr modals.about.title}"
|
||||
Width="620" Height="280"
|
||||
WindowDecorations="None"
|
||||
ExtendClientAreaToDecorationsHint="True"
|
||||
@@ -14,21 +15,21 @@
|
||||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||
</Window.KeyBindings>
|
||||
|
||||
<ctl:ModalShell Title="ABOUT" CloseCommand="{Binding CloseCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.about.title}" CloseCommand="{Binding CloseCommand}">
|
||||
<!-- Body -->
|
||||
<ScrollViewer Padding="20,16" HorizontalScrollBarVisibility="Disabled">
|
||||
<Grid RowDefinitions="Auto,Auto,Auto,Auto" ColumnDefinitions="90,*,Auto" RowSpacing="10" ColumnSpacing="8">
|
||||
<TextBlock Classes="meta" Grid.Row="0" Grid.Column="0" Text="Version" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="meta" Grid.Row="0" Grid.Column="0" Text="{loc:Tr modals.about.version}" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="meta" Grid.Row="0" Grid.Column="1" Text="{Binding AppVersion}" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="meta" Grid.Row="1" Grid.Column="0" Text="Data" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="meta" Grid.Row="1" Grid.Column="0" Text="{loc:Tr modals.about.data}" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="path-mono" Grid.Row="1" Grid.Column="1" Text="{Binding DataFolderPath}" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="Open" Command="{Binding OpenPathCommand}" CommandParameter="{Binding DataFolderPath}"/>
|
||||
<TextBlock Classes="meta" Grid.Row="2" Grid.Column="0" Text="Logs" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="{loc:Tr modals.about.open}" Command="{Binding OpenPathCommand}" CommandParameter="{Binding DataFolderPath}"/>
|
||||
<TextBlock Classes="meta" Grid.Row="2" Grid.Column="0" Text="{loc:Tr modals.about.logs}" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="path-mono" Grid.Row="2" Grid.Column="1" Text="{Binding LogsFolderPath}" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="Open" Command="{Binding OpenPathCommand}" CommandParameter="{Binding LogsFolderPath}"/>
|
||||
<TextBlock Classes="meta" Grid.Row="3" Grid.Column="0" Text="Config" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="{loc:Tr modals.about.open}" Command="{Binding OpenPathCommand}" CommandParameter="{Binding LogsFolderPath}"/>
|
||||
<TextBlock Classes="meta" Grid.Row="3" Grid.Column="0" Text="{loc:Tr modals.about.config}" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="path-mono" Grid.Row="3" Grid.Column="1" Text="{Binding WorkerConfigPath}" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="3" Grid.Column="2" Content="Open" Command="{Binding OpenPathCommand}" CommandParameter="{Binding WorkerConfigPath}"/>
|
||||
<Button Classes="btn" Grid.Row="3" Grid.Column="2" Content="{loc:Tr modals.about.open}" Command="{Binding OpenPathCommand}" CommandParameter="{Binding WorkerConfigPath}"/>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.DiffModalView"
|
||||
x:DataType="vm:DiffModalViewModel"
|
||||
Title="Diff"
|
||||
Title="{loc:Tr modals.diff.windowTitle}"
|
||||
Width="1200" Height="800" MinWidth="700" MinHeight="450"
|
||||
CanResize="True"
|
||||
WindowDecorations="BorderOnly"
|
||||
@@ -48,11 +49,11 @@
|
||||
</Style>
|
||||
</Window.Styles>
|
||||
|
||||
<ctl:ModalShell Title="DIFF" CloseCommand="{Binding CloseCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.diff.title}" CloseCommand="{Binding CloseCommand}">
|
||||
<ctl:ModalShell.Footer>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
<Button Classes="btn" Content="Merge…" Command="{Binding MergeCommand}"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.diff.merge}" Command="{Binding MergeCommand}"/>
|
||||
</StackPanel>
|
||||
</ctl:ModalShell.Footer>
|
||||
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.ListSettingsModalView"
|
||||
x:DataType="vm:ListSettingsModalViewModel"
|
||||
Title="List settings"
|
||||
Title="{loc:Tr modals.listSettings.title}"
|
||||
Width="520" Height="720"
|
||||
CanResize="True"
|
||||
MinWidth="460" MinHeight="520"
|
||||
@@ -19,14 +20,14 @@
|
||||
<KeyBinding Gesture="Enter" Command="{Binding SaveCommand}"/>
|
||||
</Window.KeyBindings>
|
||||
|
||||
<ctl:ModalShell Title="LIST SETTINGS" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.listSettings.title}" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell.Footer>
|
||||
<Grid ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
||||
<Button Grid.Column="0" Content="Delete list" Classes="danger"
|
||||
<Button Grid.Column="0" Content="{loc:Tr modals.listSettings.deleteList}" Classes="danger"
|
||||
Command="{Binding DeleteCommand}" MinWidth="90"/>
|
||||
<StackPanel Grid.Column="2" Orientation="Horizontal" Spacing="8">
|
||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Content="Save" Classes="primary" Command="{Binding SaveCommand}" MinWidth="90"/>
|
||||
<Button Classes="btn" Content="{loc:Tr settings.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Content="{loc:Tr settings.save}" Classes="primary" Command="{Binding SaveCommand}" MinWidth="90"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</ctl:ModalShell.Footer>
|
||||
@@ -37,24 +38,24 @@
|
||||
|
||||
<!-- GENERAL -->
|
||||
<StackPanel Spacing="0">
|
||||
<TextBlock Classes="section-label" Text="GENERAL"/>
|
||||
<TextBlock Classes="section-label" Text="{loc:Tr modals.listSettings.sectionGeneral}"/>
|
||||
<Border Classes="section">
|
||||
<StackPanel Spacing="12">
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Name"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.name}"/>
|
||||
<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Working directory"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.workingDirectory}"/>
|
||||
<Grid ColumnDefinitions="*,Auto">
|
||||
<TextBox Grid.Column="0" Text="{Binding WorkingDir}" PlaceholderText="(none)" />
|
||||
<Button Classes="btn" Grid.Column="1" Content="Browse..." Margin="8,0,0,0" Click="BrowseClicked" />
|
||||
<TextBox Grid.Column="0" Text="{Binding WorkingDir}" PlaceholderText="{loc:Tr modals.listSettings.workingDirectoryPlaceholder}" />
|
||||
<Button Classes="btn" Grid.Column="1" Content="{loc:Tr modals.listSettings.browse}" Margin="8,0,0,0" Click="BrowseClicked" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Default commit type"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.defaultCommitType}"/>
|
||||
<ComboBox ItemsSource="{Binding CommitTypeOptions}"
|
||||
SelectedItem="{Binding DefaultCommitType, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" MinWidth="160" />
|
||||
@@ -66,28 +67,28 @@
|
||||
<!-- AGENT -->
|
||||
<StackPanel Spacing="0">
|
||||
<Grid ColumnDefinitions="*,Auto" Margin="4,0,0,6">
|
||||
<TextBlock Classes="section-label" Text="AGENT" Margin="0"/>
|
||||
<Button Classes="btn" Grid.Column="1" Content="Reset agent settings"
|
||||
<TextBlock Classes="section-label" Text="{loc:Tr modals.listSettings.sectionAgent}" Margin="0"/>
|
||||
<Button Classes="btn" Grid.Column="1" Content="{loc:Tr modals.listSettings.resetAgentSettings}"
|
||||
Command="{Binding ResetAgentSettingsCommand}" />
|
||||
</Grid>
|
||||
<Border Classes="section">
|
||||
<StackPanel Spacing="12">
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Model"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.model}"/>
|
||||
<ComboBox ItemsSource="{Binding ModelOptions}"
|
||||
SelectedItem="{Binding SelectedModel, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" MinWidth="160" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="System prompt (appended)"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.systemPrompt}"/>
|
||||
<TextBox Text="{Binding SystemPrompt, Mode=TwoWay}"
|
||||
AcceptsReturn="True" TextWrapping="Wrap"
|
||||
MinHeight="80" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Agent file"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.agentFile}"/>
|
||||
<Grid ColumnDefinitions="*,Auto">
|
||||
<ComboBox Grid.Column="0"
|
||||
ItemsSource="{Binding Agents}"
|
||||
@@ -102,7 +103,7 @@
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
<Button Classes="btn" Grid.Column="1" Content="Browse..."
|
||||
<Button Classes="btn" Grid.Column="1" Content="{loc:Tr modals.listSettings.browse}"
|
||||
Margin="8,0,0,0" Click="BrowseAgentClicked" />
|
||||
</Grid>
|
||||
<TextBlock Classes="path-mono" Text="{Binding SelectedAgent.Path}"
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.MergeModalView"
|
||||
x:DataType="vm:MergeModalViewModel"
|
||||
Title="Merge worktree"
|
||||
Title="{loc:Tr modals.merge.windowTitle}"
|
||||
Width="560" Height="460" MinWidth="460" MinHeight="360"
|
||||
CanResize="True"
|
||||
WindowDecorations="BorderOnly"
|
||||
@@ -17,12 +18,12 @@
|
||||
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
||||
</Window.KeyBindings>
|
||||
|
||||
<ctl:ModalShell Title="MERGE WORKTREE" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.merge.title}" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell.Footer>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Content="Merge" Classes="primary"
|
||||
<Button Classes="btn" Content="{loc:Tr modals.merge.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Content="{loc:Tr modals.merge.merge}" Classes="primary"
|
||||
Command="{Binding SubmitCommand}"
|
||||
IsDefault="True" MinWidth="90"/>
|
||||
</StackPanel>
|
||||
@@ -35,19 +36,19 @@
|
||||
<TextBlock Classes="title" Text="{Binding TaskTitle, StringFormat='Merging: {0}'}" />
|
||||
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Target branch"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.merge.targetBranch}"/>
|
||||
<ComboBox ItemsSource="{Binding Branches}"
|
||||
SelectedItem="{Binding SelectedBranch}"
|
||||
HorizontalAlignment="Stretch"
|
||||
IsEnabled="{Binding !IsBusy}" />
|
||||
</StackPanel>
|
||||
|
||||
<CheckBox Content="Remove worktree after merge"
|
||||
<CheckBox Content="{loc:Tr modals.merge.removeWorktree}"
|
||||
IsChecked="{Binding RemoveWorktree}"
|
||||
IsEnabled="{Binding !IsBusy}" />
|
||||
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Commit message"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr modals.merge.commitMessage}"/>
|
||||
<TextBox Text="{Binding CommitMessage}"
|
||||
AcceptsReturn="True"
|
||||
TextWrapping="Wrap"
|
||||
@@ -63,7 +64,7 @@
|
||||
<Border Classes="danger-box"
|
||||
IsVisible="{Binding HasConflict}">
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="title" Text="Conflicted files:" />
|
||||
<TextBlock Classes="title" Text="{loc:Tr modals.merge.conflictedFiles}" />
|
||||
<ItemsControl ItemsSource="{Binding ConflictFiles}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.RepoImportModalView"
|
||||
x:DataType="vm:RepoImportModalViewModel"
|
||||
Title="Add repos as lists"
|
||||
Title="{loc:Tr modals.repoImport.windowTitle}"
|
||||
Width="560" Height="480" MinWidth="420" MinHeight="320"
|
||||
CanResize="True"
|
||||
WindowDecorations="BorderOnly"
|
||||
@@ -16,11 +17,11 @@
|
||||
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
||||
</Window.KeyBindings>
|
||||
|
||||
<ctl:ModalShell Title="ADD REPOS AS LISTS" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.repoImport.title}" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell.Footer>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8" HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center">
|
||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.repoImport.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Content="{Binding CreateButtonText}" Command="{Binding CreateCommand}"
|
||||
IsEnabled="{Binding CanCreate}" MinWidth="120" Classes="primary"/>
|
||||
</StackPanel>
|
||||
@@ -31,10 +32,10 @@
|
||||
<!-- Toolbar: search + folder actions -->
|
||||
<StackPanel DockPanel.Dock="Top" Spacing="8" Margin="20,12,20,6">
|
||||
<TextBox Text="{Binding SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
PlaceholderText="Search repos…"/>
|
||||
PlaceholderText="{loc:Tr modals.repoImport.searchPlaceholder}"/>
|
||||
<Grid ColumnDefinitions="Auto,*,Auto">
|
||||
<Button Classes="btn" Grid.Column="0" Content="Add folder…" Click="AddFolderClicked"/>
|
||||
<Button Classes="btn" Grid.Column="2" Content="Forget folders"
|
||||
<Button Classes="btn" Grid.Column="0" Content="{loc:Tr modals.repoImport.addFolder}" Click="AddFolderClicked"/>
|
||||
<Button Classes="btn" Grid.Column="2" Content="{loc:Tr modals.repoImport.forgetFolders}"
|
||||
Command="{Binding ForgetFoldersCommand}"
|
||||
IsVisible="{Binding HasFolders}"/>
|
||||
</Grid>
|
||||
@@ -55,7 +56,7 @@
|
||||
VerticalAlignment="Center" Margin="4,0,0,0"/>
|
||||
<TextBlock Classes="path-mono" Grid.Column="2" Text="{Binding FullPath}"
|
||||
VerticalAlignment="Center" Margin="8,0,0,0"/>
|
||||
<TextBlock Classes="meta" Grid.Column="3" Text="(already added)"
|
||||
<TextBlock Classes="meta" Grid.Column="3" Text="{loc:Tr modals.repoImport.alreadyAdded}"
|
||||
VerticalAlignment="Center" Margin="8,0,0,0"
|
||||
IsVisible="{Binding AlreadyAdded}"/>
|
||||
</Grid>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
xmlns:locm="using:ClaudeDo.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.SettingsModalView"
|
||||
x:DataType="vm:SettingsModalViewModel"
|
||||
Title="Settings"
|
||||
Title="{loc:Tr settings.title}"
|
||||
Width="580" Height="760" MinWidth="480" MinHeight="520"
|
||||
CanResize="True"
|
||||
WindowDecorations="BorderOnly"
|
||||
@@ -21,12 +21,12 @@
|
||||
</Window.KeyBindings>
|
||||
|
||||
|
||||
<ctl:ModalShell Title="SETTINGS" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr settings.title}" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell.Footer>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Content="Save" Classes="primary"
|
||||
<Button Classes="btn" Content="{loc:Tr settings.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||
<Button Content="{loc:Tr settings.save}" Classes="primary"
|
||||
Command="{Binding SaveCommand}"
|
||||
IsEnabled="{Binding !IsBusy}" MinWidth="90"/>
|
||||
</StackPanel>
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
<TabControl Padding="20,16" TabStripPlacement="Top">
|
||||
|
||||
<TabItem Header="General">
|
||||
<TabItem Header="{loc:Tr settings.tabGeneral}">
|
||||
<ScrollViewer>
|
||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||
<StackPanel Spacing="4">
|
||||
@@ -60,101 +60,101 @@
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Default instructions"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.defaultInstructions}"/>
|
||||
<TextBox AcceptsReturn="True" TextWrapping="Wrap" Height="110"
|
||||
PlaceholderText="Baseline instructions applied to every task"
|
||||
PlaceholderText="{loc:Tr settings.general.defaultInstructionsPlaceholder}"
|
||||
Text="{Binding General.DefaultClaudeInstructions, Mode=TwoWay}"/>
|
||||
</StackPanel>
|
||||
<Grid ColumnDefinitions="*,12,*,12,*">
|
||||
<StackPanel Grid.Column="0" Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Model"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.model}"/>
|
||||
<ComboBox ItemsSource="{Binding General.Models}"
|
||||
SelectedItem="{Binding General.DefaultModel, Mode=TwoWay}"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2" Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Max turns"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.maxTurns}"/>
|
||||
<NumericUpDown Value="{Binding General.DefaultMaxTurns, Mode=TwoWay}"
|
||||
Minimum="1" Maximum="200" Increment="1" FormatString="0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="4" Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Permission"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.permission}"/>
|
||||
<ComboBox ItemsSource="{Binding General.PermissionModes}"
|
||||
SelectedItem="{Binding General.DefaultPermissionMode, Mode=TwoWay}"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Max parallel executions"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.maxParallelExecutions}"/>
|
||||
<NumericUpDown Value="{Binding General.MaxParallelExecutions, Mode=TwoWay}"
|
||||
Minimum="1" Maximum="20" Increment="1" FormatString="0"
|
||||
HorizontalAlignment="Left" Width="140"/>
|
||||
<TextBlock Text="How many queued tasks the worker runs at once."
|
||||
<TextBlock Text="{loc:Tr settings.general.maxParallelExecutionsHint}"
|
||||
Opacity="0.6" FontSize="12"/>
|
||||
</StackPanel>
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Report: excluded paths (one per line)"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.reportExcludedPaths}"/>
|
||||
<TextBox AcceptsReturn="True" MinHeight="60" Text="{Binding General.ReportExcludedPaths, Mode=TwoWay}"/>
|
||||
</StackPanel>
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Standup weekday"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.standupWeekday}"/>
|
||||
<ComboBox SelectedIndex="{Binding General.StandupWeekday, Mode=TwoWay}" HorizontalAlignment="Left">
|
||||
<ComboBoxItem>Sunday</ComboBoxItem>
|
||||
<ComboBoxItem>Monday</ComboBoxItem>
|
||||
<ComboBoxItem>Tuesday</ComboBoxItem>
|
||||
<ComboBoxItem>Wednesday</ComboBoxItem>
|
||||
<ComboBoxItem>Thursday</ComboBoxItem>
|
||||
<ComboBoxItem>Friday</ComboBoxItem>
|
||||
<ComboBoxItem>Saturday</ComboBoxItem>
|
||||
<ComboBoxItem Content="{loc:Tr settings.general.weekdaySunday}"/>
|
||||
<ComboBoxItem Content="{loc:Tr settings.general.weekdayMonday}"/>
|
||||
<ComboBoxItem Content="{loc:Tr settings.general.weekdayTuesday}"/>
|
||||
<ComboBoxItem Content="{loc:Tr settings.general.weekdayWednesday}"/>
|
||||
<ComboBoxItem Content="{loc:Tr settings.general.weekdayThursday}"/>
|
||||
<ComboBoxItem Content="{loc:Tr settings.general.weekdayFriday}"/>
|
||||
<ComboBoxItem Content="{loc:Tr settings.general.weekdaySaturday}"/>
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="Worktrees">
|
||||
<TabItem Header="{loc:Tr settings.tabWorktrees}">
|
||||
<ScrollViewer>
|
||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||
<Grid ColumnDefinitions="*,12,2*">
|
||||
<StackPanel Grid.Column="0" Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Strategy"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.worktrees.strategy}"/>
|
||||
<ComboBox ItemsSource="{Binding Worktrees.WorktreeStrategies}"
|
||||
SelectedItem="{Binding Worktrees.WorktreeStrategy, Mode=TwoWay}"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2" Spacing="4">
|
||||
<TextBlock Classes="field-label" Text="Central worktree root"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr settings.worktrees.centralWorktreeRoot}"/>
|
||||
<TextBox Text="{Binding Worktrees.CentralWorktreeRoot, Mode=TwoWay}"
|
||||
PlaceholderText="e.g. C:\worktrees"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||
<CheckBox IsChecked="{Binding Worktrees.WorktreeAutoCleanupEnabled, Mode=TwoWay}"
|
||||
Content="Auto-cleanup finished worktrees after"
|
||||
Content="{loc:Tr settings.worktrees.autoCleanup}"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Value="{Binding Worktrees.WorktreeAutoCleanupDays, Mode=TwoWay}"
|
||||
Width="130" Minimum="1" Maximum="365" Increment="1" FormatString="0"
|
||||
IsEnabled="{Binding Worktrees.WorktreeAutoCleanupEnabled}"/>
|
||||
<TextBlock Classes="body" Text="days" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="body" Text="{loc:Tr settings.worktrees.days}" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
<Border BorderBrush="{DynamicResource LineBrush}" BorderThickness="0,1,0,0" Margin="0,4,0,0"/>
|
||||
<StackPanel Spacing="8">
|
||||
<Button Classes="btn" Content="Cleanup finished worktrees"
|
||||
<Button Classes="btn" Content="{loc:Tr settings.worktrees.cleanupFinished}"
|
||||
Command="{Binding Worktrees.CleanupWorktreesCommand}"
|
||||
HorizontalAlignment="Left"/>
|
||||
<StackPanel>
|
||||
<Button Content="Force-remove all worktrees" Classes="danger"
|
||||
<Button Content="{loc:Tr settings.worktrees.forceRemoveAll}" Classes="danger"
|
||||
Command="{Binding Worktrees.RequestResetConfirmCommand}"
|
||||
HorizontalAlignment="Left"
|
||||
IsVisible="{Binding !Worktrees.ShowResetConfirm}"/>
|
||||
<Border Classes="danger-box"
|
||||
IsVisible="{Binding Worktrees.ShowResetConfirm}">
|
||||
<StackPanel Spacing="8">
|
||||
<TextBlock Text="Remove ALL worktrees? Uncommitted work will be lost."
|
||||
<TextBlock Text="{loc:Tr settings.worktrees.confirmRemoveAll}"
|
||||
Foreground="{DynamicResource TextBrush}" TextWrapping="Wrap"/>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||
<Button Classes="btn" Content="Cancel" Command="{Binding Worktrees.CancelResetConfirmCommand}"/>
|
||||
<Button Content="Remove All" Classes="danger"
|
||||
<Button Classes="btn" Content="{loc:Tr settings.cancel}" Command="{Binding Worktrees.CancelResetConfirmCommand}"/>
|
||||
<Button Content="{loc:Tr settings.worktrees.removeAll}" Classes="danger"
|
||||
Command="{Binding Worktrees.ConfirmResetAllCommand}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
@@ -167,32 +167,32 @@
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="Files">
|
||||
<TabItem Header="{loc:Tr settings.tabFiles}">
|
||||
<ScrollViewer>
|
||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||
<StackPanel Spacing="6">
|
||||
<TextBlock Classes="section-label" Text="AGENTS"/>
|
||||
<TextBlock Classes="meta" Text="Restore bundled default agents. Existing files are not overwritten."
|
||||
<TextBlock Classes="section-label" Text="{loc:Tr settings.files.agentsSection}"/>
|
||||
<TextBlock Classes="meta" Text="{loc:Tr settings.files.agentsHint}"
|
||||
TextWrapping="Wrap"/>
|
||||
<Button Classes="btn" Content="Restore default agents"
|
||||
<Button Classes="btn" Content="{loc:Tr settings.files.restoreDefaultAgents}"
|
||||
Command="{Binding Files.RestoreDefaultAgentsCommand}"
|
||||
IsEnabled="{Binding !Files.IsBusy}"
|
||||
HorizontalAlignment="Left"/>
|
||||
</StackPanel>
|
||||
<StackPanel Spacing="6">
|
||||
<TextBlock Classes="section-label" Text="PROMPTS"/>
|
||||
<TextBlock Classes="section-label" Text="{loc:Tr settings.files.promptsSection}"/>
|
||||
<Grid RowDefinitions="Auto,Auto,Auto" ColumnDefinitions="90,*,Auto" RowSpacing="8">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Classes="field-label" Text="System" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Classes="field-label" Text="{loc:Tr settings.files.systemPrompt}" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" Classes="path-mono" Text="{Binding Files.SystemPromptPath}" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="0" Grid.Column="2" Content="Open in editor"
|
||||
<Button Classes="btn" Grid.Row="0" Grid.Column="2" Content="{loc:Tr settings.files.openInEditor}"
|
||||
Command="{Binding Files.OpenPromptCommand}" CommandParameter="System"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Classes="field-label" Text="Planning" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Classes="field-label" Text="{loc:Tr settings.files.planningPrompt}" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="1" Classes="path-mono" Text="{Binding Files.PlanningPromptPath}" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="Open in editor"
|
||||
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="{loc:Tr settings.files.openInEditor}"
|
||||
Command="{Binding Files.OpenPromptCommand}" CommandParameter="Planning"/>
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Classes="field-label" Text="Agent" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Classes="field-label" Text="{loc:Tr settings.files.agentPrompt}" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Row="2" Grid.Column="1" Classes="path-mono" Text="{Binding Files.AgentPromptPath}" VerticalAlignment="Center"/>
|
||||
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="Open in editor"
|
||||
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="{loc:Tr settings.files.openInEditor}"
|
||||
Command="{Binding Files.OpenPromptCommand}" CommandParameter="Agent"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
@@ -202,11 +202,11 @@
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="Prime Claude">
|
||||
<TabItem Header="{loc:Tr settings.tabPrime}">
|
||||
<ScrollViewer>
|
||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||
<TextBlock Classes="meta" TextWrapping="Wrap"
|
||||
Text="Prime your Claude usage window by firing a single non-interactive ping on the days you choose, at a chosen time. Only runs while ClaudeDo is open. If the app starts within 30 minutes of the target time, the ping fires immediately."/>
|
||||
Text="{loc:Tr settings.prime.description}"/>
|
||||
<ItemsControl ItemsSource="{Binding Prime.Rows}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="settings:PrimeScheduleRowViewModel">
|
||||
@@ -216,13 +216,13 @@
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto,Auto" ColumnSpacing="8">
|
||||
<CheckBox Grid.Column="0" IsChecked="{Binding Enabled, Mode=TwoWay}" VerticalAlignment="Center"/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4" VerticalAlignment="Center">
|
||||
<ToggleButton Classes="day-toggle" Content="Mo" IsChecked="{Binding Monday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="Tu" IsChecked="{Binding Tuesday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="We" IsChecked="{Binding Wednesday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="Th" IsChecked="{Binding Thursday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="Fr" IsChecked="{Binding Friday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="Sa" IsChecked="{Binding Saturday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="Su" IsChecked="{Binding Sunday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayMo}" IsChecked="{Binding Monday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayTu}" IsChecked="{Binding Tuesday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayWe}" IsChecked="{Binding Wednesday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayTh}" IsChecked="{Binding Thursday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayFr}" IsChecked="{Binding Friday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.daySa}" IsChecked="{Binding Saturday, Mode=TwoWay}"/>
|
||||
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.daySu}" IsChecked="{Binding Sunday, Mode=TwoWay}"/>
|
||||
</StackPanel>
|
||||
<TimePicker Grid.Column="2"
|
||||
SelectedTime="{Binding TimeOfDay, Mode=TwoWay}"
|
||||
@@ -238,7 +238,7 @@
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<Button Classes="btn" Content="+ Add schedule" Command="{Binding Prime.AddScheduleCommand}" HorizontalAlignment="Left"/>
|
||||
<Button Classes="btn" Content="{loc:Tr settings.prime.addSchedule}" Command="{Binding Prime.AddScheduleCommand}" HorizontalAlignment="Left"/>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.UnfinishedPlanningModalView"
|
||||
x:DataType="vm:UnfinishedPlanningModalViewModel"
|
||||
Title="Unfinished planning session"
|
||||
Title="{loc:Tr modals.unfinishedPlanning.windowTitle}"
|
||||
Width="440" Height="200"
|
||||
CanResize="False"
|
||||
WindowDecorations="None"
|
||||
@@ -16,13 +17,13 @@
|
||||
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
||||
</Window.KeyBindings>
|
||||
|
||||
<ctl:ModalShell Title="UNFINISHED PLANNING SESSION" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.unfinishedPlanning.title}" CloseCommand="{Binding CancelCommand}">
|
||||
<ctl:ModalShell.Footer>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
<Button Classes="btn" Content="Discard" Command="{Binding DiscardCommand}" MinWidth="80"/>
|
||||
<Button Classes="btn" Content="Finalize" Command="{Binding FinalizeNowCommand}" MinWidth="80"/>
|
||||
<Button Content="Resume" Command="{Binding ResumeCommand}" Classes="primary" MinWidth="80"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.unfinishedPlanning.discard}" Command="{Binding DiscardCommand}" MinWidth="80"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.unfinishedPlanning.finalize}" Command="{Binding FinalizeNowCommand}" MinWidth="80"/>
|
||||
<Button Content="{loc:Tr modals.unfinishedPlanning.resume}" Command="{Binding ResumeCommand}" Classes="primary" MinWidth="80"/>
|
||||
</StackPanel>
|
||||
</ctl:ModalShell.Footer>
|
||||
|
||||
@@ -32,7 +33,7 @@
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
<TextBlock Classes="body">
|
||||
<Run Text="{Binding DraftCount}"/>
|
||||
<Run Text=" draft task(s) waiting to be finalized."/>
|
||||
<Run Text="{loc:Tr modals.unfinishedPlanning.draftTasksSuffix}"/>
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.WeeklyReportModalView"
|
||||
x:DataType="vm:WeeklyReportModalViewModel"
|
||||
Title="Weekly Report"
|
||||
Title="{loc:Tr modals.weeklyReport.windowTitle}"
|
||||
Width="820" Height="640"
|
||||
WindowDecorations="None"
|
||||
ExtendClientAreaToDecorationsHint="True"
|
||||
@@ -14,16 +15,16 @@
|
||||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||
</Window.KeyBindings>
|
||||
|
||||
<ctl:ModalShell Title="WEEKLY REPORT" CloseCommand="{Binding CloseCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.weeklyReport.title}" CloseCommand="{Binding CloseCommand}">
|
||||
<DockPanel Margin="20,16">
|
||||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8">
|
||||
<TextBlock Classes="meta" Text="From" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="meta" Text="{loc:Tr modals.weeklyReport.from}" VerticalAlignment="Center"/>
|
||||
<ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/>
|
||||
<TextBlock Classes="meta" Text="To" VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="meta" Text="{loc:Tr modals.weeklyReport.to}" VerticalAlignment="Center"/>
|
||||
<ctl:ThemedDatePicker SelectedDate="{Binding EndDate}"/>
|
||||
<Button Classes="btn" Content="Generate" Command="{Binding GenerateCommand}"
|
||||
<Button Classes="btn" Content="{loc:Tr modals.weeklyReport.generate}" Command="{Binding GenerateCommand}"
|
||||
IsVisible="{Binding EmptyStateVisible}"/>
|
||||
<Button Classes="btn" Content="Regenerate" Command="{Binding GenerateCommand}"
|
||||
<Button Classes="btn" Content="{loc:Tr modals.weeklyReport.regenerate}" Command="{Binding GenerateCommand}"
|
||||
IsVisible="{Binding HasReport}"/>
|
||||
</StackPanel>
|
||||
|
||||
@@ -31,7 +32,7 @@
|
||||
Text="{Binding StatusMessage}"/>
|
||||
|
||||
<TextBlock DockPanel.Dock="Top" Classes="meta" Margin="0,16"
|
||||
Text='No report for this range yet. Click “Generate”.'
|
||||
Text="{loc:Tr modals.weeklyReport.emptyStateHint}"
|
||||
IsVisible="{Binding EmptyStateVisible}"/>
|
||||
|
||||
<ScrollViewer IsVisible="{Binding HasReport}">
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.WorkerConnectionModalView"
|
||||
x:DataType="vm:WorkerConnectionModalViewModel"
|
||||
Title="Worker not reachable"
|
||||
Title="{loc:Tr modals.workerConnection.title}"
|
||||
Width="520" Height="240"
|
||||
WindowDecorations="None"
|
||||
ExtendClientAreaToDecorationsHint="True"
|
||||
@@ -14,15 +15,15 @@
|
||||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||
</Window.KeyBindings>
|
||||
|
||||
<ctl:ModalShell Title="WORKER NOT REACHABLE" CloseCommand="{Binding CloseCommand}">
|
||||
<ctl:ModalShell Title="{loc:Tr modals.workerConnection.title}" CloseCommand="{Binding CloseCommand}">
|
||||
<Grid RowDefinitions="*,Auto" Margin="20,16">
|
||||
<TextBlock Grid.Row="0" Classes="meta" TextWrapping="Wrap"
|
||||
Text="ClaudeDo can't reach the background worker. It is normally started automatically at logon. You can start it now, or reinstall if the problem persists."/>
|
||||
Text="{loc:Tr modals.workerConnection.body}"/>
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" Margin="0,16,0,0">
|
||||
<Button Classes="btn" Content="Dismiss" Command="{Binding CloseCommand}"/>
|
||||
<Button Classes="btn" Content="Rerun Installer" Command="{Binding RerunInstallerCommand}"/>
|
||||
<Button Classes="btn primary" Content="Start Worker" Command="{Binding StartWorkerCommand}"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.workerConnection.dismiss}" Command="{Binding CloseCommand}"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.workerConnection.rerunInstaller}" Command="{Binding RerunInstallerCommand}"/>
|
||||
<Button Classes="btn primary" Content="{loc:Tr modals.workerConnection.startWorker}" Command="{Binding StartWorkerCommand}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</ctl:ModalShell>
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.WorktreeModalView"
|
||||
x:DataType="vm:WorktreeModalViewModel"
|
||||
Title="Worktree"
|
||||
Title="{loc:Tr modals.worktree.title}"
|
||||
Width="1100" Height="720"
|
||||
MinWidth="640" MinHeight="400"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
@@ -33,7 +34,7 @@
|
||||
PointerMoved="OnTitleBarMoved"
|
||||
PointerReleased="OnTitleBarReleased">
|
||||
<Grid ColumnDefinitions="*,Auto" Margin="14,0">
|
||||
<TextBlock Grid.Column="0" Text="Worktree" VerticalAlignment="Center"
|
||||
<TextBlock Grid.Column="0" Text="{loc:Tr modals.worktree.title}" VerticalAlignment="Center"
|
||||
FontFamily="{DynamicResource MonoFont}" FontSize="{StaticResource FontSizeBody}"
|
||||
Foreground="{DynamicResource TextMuteBrush}"/>
|
||||
<Button Grid.Column="1" Classes="icon-btn" Content="✕"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Modals.WorktreesOverviewModalView"
|
||||
x:DataType="vm:WorktreesOverviewModalViewModel"
|
||||
Title="{Binding Title}"
|
||||
@@ -22,38 +23,38 @@
|
||||
Tapped="OnRowTapped">
|
||||
<Border.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Show diff"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxShowDiff}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).ShowDiffCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<MenuItem Header="Open in Explorer"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxOpenInExplorer}"
|
||||
IsEnabled="{Binding PathExistsOnDisk}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).OpenInExplorerCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<MenuItem Header="Jump to task"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxJumpToTask}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).JumpToTaskCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Merge…"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxMerge}"
|
||||
IsEnabled="{Binding IsActive}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).MergeCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<MenuItem Header="Discard"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxDiscard}"
|
||||
IsEnabled="{Binding IsActive}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).DiscardCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<MenuItem Header="Keep"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxKeep}"
|
||||
IsEnabled="{Binding IsActive}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).KeepCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Copy branch"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxCopyBranch}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).CopyBranchCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<MenuItem Header="Copy path"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxCopyPath}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).CopyPathCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Force remove"
|
||||
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxForceRemove}"
|
||||
Foreground="{DynamicResource StatusErrorBrush}"
|
||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).ForceRemoveCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
@@ -66,9 +67,9 @@
|
||||
<TextBlock Classes="meta" Text="{Binding TaskStatus}"/>
|
||||
<TextBlock Classes="meta" Text="•"
|
||||
IsVisible="{Binding !PathExistsOnDisk}"/>
|
||||
<TextBlock Classes="meta" Text="phantom" Foreground="{DynamicResource StatusErrorBrush}"
|
||||
<TextBlock Classes="meta" Text="{loc:Tr modals.worktreesOverview.phantom}" Foreground="{DynamicResource StatusErrorBrush}"
|
||||
IsVisible="{Binding !PathExistsOnDisk}"
|
||||
ToolTip.Tip="Directory missing on disk"/>
|
||||
ToolTip.Tip="{loc:Tr modals.worktreesOverview.phantomTooltip}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<Border Grid.Column="1" CornerRadius="3" Padding="6,2" VerticalAlignment="Center"
|
||||
@@ -95,8 +96,8 @@
|
||||
BorderThickness="0,0,0,1"
|
||||
Padding="12,8">
|
||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||
<Button Classes="btn" Content="Refresh" Command="{Binding RefreshCommand}" IsEnabled="{Binding !IsBusy}"/>
|
||||
<Button Classes="btn" Content="Cleanup finished" Command="{Binding CleanupFinishedCommand}" IsEnabled="{Binding !IsBusy}"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.worktreesOverview.refresh}" Command="{Binding RefreshCommand}" IsEnabled="{Binding !IsBusy}"/>
|
||||
<Button Classes="btn" Content="{loc:Tr modals.worktreesOverview.cleanupFinished}" Command="{Binding CleanupFinishedCommand}" IsEnabled="{Binding !IsBusy}"/>
|
||||
<TextBlock Text="{Binding StatusMessage}" VerticalAlignment="Center" Margin="12,0,0,0"
|
||||
Foreground="{DynamicResource TextDimBrush}"/>
|
||||
</StackPanel>
|
||||
@@ -107,10 +108,10 @@
|
||||
<StackPanel>
|
||||
<!-- Column headers -->
|
||||
<Grid ColumnDefinitions="*,90,80,80" Margin="12,0,12,4">
|
||||
<TextBlock Grid.Column="0" Classes="eyebrow" Text="TASK"/>
|
||||
<TextBlock Grid.Column="1" Classes="eyebrow" Text="STATE"/>
|
||||
<TextBlock Grid.Column="2" Classes="eyebrow" Text="DIFF"/>
|
||||
<TextBlock Grid.Column="3" Classes="eyebrow" Text="AGE"/>
|
||||
<TextBlock Grid.Column="0" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnTask}"/>
|
||||
<TextBlock Grid.Column="1" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnState}"/>
|
||||
<TextBlock Grid.Column="2" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnDiff}"/>
|
||||
<TextBlock Grid.Column="3" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnAge}"/>
|
||||
</Grid>
|
||||
<Border Height="1" Background="{DynamicResource LineBrush}" Margin="0,0,0,8"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user