Skip to content

Commit 539d3f6

Browse files
committed
ux: re-design commit message input box (#1169)
Signed-off-by: leo <[email protected]>
1 parent 03216fc commit 539d3f6

File tree

8 files changed

+86
-77
lines changed

8 files changed

+86
-77
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@
132132
<x:String x:Key="Text.CommitDetail.Info.SHA" xml:space="preserve">SHA</x:String>
133133
<x:String x:Key="Text.CommitDetail.Info.WebLinks" xml:space="preserve">Open in Browser</x:String>
134134
<x:String x:Key="Text.CommitMessageTextBox.MessagePlaceholder" xml:space="preserve">Description</x:String>
135+
<x:String x:Key="Text.CommitMessageTextBox.SubjectCount" xml:space="preserve">SUBJECT</x:String>
135136
<x:String x:Key="Text.CommitMessageTextBox.SubjectPlaceholder" xml:space="preserve">Enter commit subject</x:String>
136137
<x:String x:Key="Text.Configure" xml:space="preserve">Repository Configure</x:String>
137138
<x:String x:Key="Text.Configure.CommitMessageTemplate" xml:space="preserve">COMMIT TEMPLATE</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136
<x:String x:Key="Text.CommitDetail.Info.SHA" xml:space="preserve">提交指纹</x:String>
137137
<x:String x:Key="Text.CommitDetail.Info.WebLinks" xml:space="preserve">浏览器中查看</x:String>
138138
<x:String x:Key="Text.CommitMessageTextBox.MessagePlaceholder" xml:space="preserve">详细描述</x:String>
139+
<x:String x:Key="Text.CommitMessageTextBox.SubjectCount" xml:space="preserve">主题</x:String>
139140
<x:String x:Key="Text.CommitMessageTextBox.SubjectPlaceholder" xml:space="preserve">填写提交信息主题</x:String>
140141
<x:String x:Key="Text.Configure" xml:space="preserve">仓库配置</x:String>
141142
<x:String x:Key="Text.Configure.CommitMessageTemplate" xml:space="preserve">提交信息模板</x:String>
@@ -756,4 +757,4 @@
756757
<x:String x:Key="Text.Worktree.Lock" xml:space="preserve">锁定工作树</x:String>
757758
<x:String x:Key="Text.Worktree.Remove" xml:space="preserve">移除工作树</x:String>
758759
<x:String x:Key="Text.Worktree.Unlock" xml:space="preserve">解除工作树锁定</x:String>
759-
</ResourceDictionary>
760+
</ResourceDictionary>

src/Resources/Locales/zh_TW.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136
<x:String x:Key="Text.CommitDetail.Info.SHA" xml:space="preserve">提交編號</x:String>
137137
<x:String x:Key="Text.CommitDetail.Info.WebLinks" xml:space="preserve">在瀏覽器中檢視</x:String>
138138
<x:String x:Key="Text.CommitMessageTextBox.MessagePlaceholder" xml:space="preserve">詳細描述</x:String>
139+
<x:String x:Key="Text.CommitMessageTextBox.SubjectCount" xml:space="preserve">標題</x:String>
139140
<x:String x:Key="Text.CommitMessageTextBox.SubjectPlaceholder" xml:space="preserve">填寫提交訊息標題</x:String>
140141
<x:String x:Key="Text.Configure" xml:space="preserve">存放庫設定</x:String>
141142
<x:String x:Key="Text.Configure.CommitMessageTemplate" xml:space="preserve">提交訊息範本</x:String>
@@ -756,4 +757,4 @@
756757
<x:String x:Key="Text.Worktree.Lock" xml:space="preserve">鎖定工作區</x:String>
757758
<x:String x:Key="Text.Worktree.Remove" xml:space="preserve">移除工作區</x:String>
758759
<x:String x:Key="Text.Worktree.Unlock" xml:space="preserve">解除鎖定工作區</x:String>
759-
</ResourceDictionary>
760+
</ResourceDictionary>

src/ViewModels/ConventionalCommitMessageBuilder.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.ComponentModel.DataAnnotations;
1+
using System;
2+
using System.ComponentModel.DataAnnotations;
23
using System.Diagnostics.CodeAnalysis;
34
using System.Text;
45

@@ -46,9 +47,9 @@ public string ClosedIssue
4647
set => SetProperty(ref _closedIssue, value);
4748
}
4849

49-
public ConventionalCommitMessageBuilder(WorkingCopy wc)
50+
public ConventionalCommitMessageBuilder(Action<string> onApply)
5051
{
51-
_wc = wc;
52+
_onApply = onApply;
5253
}
5354

5455
[UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2026:RequiresUnreferencedCode")]
@@ -98,11 +99,11 @@ public bool Apply()
9899
builder.Append(_closedIssue);
99100
}
100101

101-
_wc.CommitMessage = builder.ToString();
102+
_onApply?.Invoke(builder.ToString());
102103
return true;
103104
}
104105

105-
private WorkingCopy _wc = null;
106+
private Action<string> _onApply = null;
106107
private Models.ConventionalCommitType _type = Models.ConventionalCommitType.Supported[0];
107108
private string _scope = string.Empty;
108109
private string _description = string.Empty;

src/Views/CommitMessageTextBox.axaml

Lines changed: 50 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,42 +12,22 @@
1212
BorderThickness="1"
1313
BorderBrush="{DynamicResource Brush.Border2}"
1414
CornerRadius="4">
15-
<Grid RowDefinitions="Auto,1,*">
16-
<Grid Grid.Row="0" ColumnDefinitions="*,1,Auto">
17-
<v:EnhancedTextBox Grid.Column="0"
18-
x:Name="SubjectEditor"
19-
Classes="no_border"
20-
Margin="0"
21-
Padding="4"
22-
CornerRadius="4,4,0,0"
23-
BorderThickness="0"
24-
Background="Transparent"
25-
AcceptsReturn="False"
26-
TextWrapping="Wrap"
27-
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
28-
ScrollViewer.VerticalScrollBarVisibility="Disabled"
29-
Text="{Binding #ThisControl.Subject, Mode=TwoWay}"
30-
Watermark="{DynamicResource Text.CommitMessageTextBox.SubjectPlaceholder}"
31-
PreviewKeyDown="OnSubjectTextBoxPreviewKeyDown"/>
32-
33-
<Rectangle Grid.Column="1"
34-
Width="1"
35-
HorizontalAlignment="Center"
36-
VerticalAlignment="Stretch"
37-
IsHitTestVisible="False"
38-
Fill="{DynamicResource Brush.Border2}"/>
39-
40-
<StackPanel Grid.Column="2"
41-
Margin="8,0"
42-
VerticalAlignment="Center"
43-
Orientation="Horizontal">
44-
<TextBlock Classes="primary" Margin="2,0,0,0" FontSize="11" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthGood}}"/>
45-
<TextBlock Classes="primary" Margin="2,0,0,0" FontSize="11" Foreground="DarkGoldenrod" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}"/>
46-
<TextBlock Classes="primary" FontSize="11" Text="/"/>
47-
<TextBlock Classes="primary" FontSize="11" Text="{Binding Source={x:Static vm:Preferences.Instance}, Path=SubjectGuideLength}"/>
48-
<Path Width="10" Height="10" Margin="4,0,0,0" Data="{StaticResource Icons.Error}" Fill="DarkGoldenrod" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}"/>
49-
</StackPanel>
50-
</Grid>
15+
<Grid RowDefinitions="Auto,1,*,1,24">
16+
<v:EnhancedTextBox Grid.Row="0"
17+
x:Name="SubjectEditor"
18+
Classes="no_border"
19+
Margin="0"
20+
Padding="4"
21+
CornerRadius="4,4,0,0"
22+
BorderThickness="0"
23+
Background="Transparent"
24+
AcceptsReturn="False"
25+
TextWrapping="Wrap"
26+
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
27+
ScrollViewer.VerticalScrollBarVisibility="Disabled"
28+
Text="{Binding #ThisControl.Subject, Mode=TwoWay}"
29+
Watermark="{DynamicResource Text.CommitMessageTextBox.SubjectPlaceholder}"
30+
PreviewKeyDown="OnSubjectTextBoxPreviewKeyDown"/>
5131

5232
<Rectangle Grid.Row="1"
5333
Height="1"
@@ -61,7 +41,6 @@
6141
Classes="no_border"
6242
Margin="0"
6343
Padding="4"
64-
CornerRadius="0,0,4,4"
6544
BorderThickness="0"
6645
Background="Transparent"
6746
VerticalContentAlignment="Top"
@@ -73,6 +52,40 @@
7352
Text="{Binding #ThisControl.Description, Mode=TwoWay}"
7453
Watermark="{DynamicResource Text.CommitMessageTextBox.MessagePlaceholder}"
7554
PreviewKeyDown="OnDescriptionTextBoxPreviewKeyDown"/>
55+
56+
<Rectangle Grid.Row="3"
57+
Height="1"
58+
HorizontalAlignment="Stretch"
59+
VerticalAlignment="Center"
60+
IsHitTestVisible="False"
61+
Fill="{DynamicResource Brush.Border2}"/>
62+
63+
<Border Grid.Row="4"
64+
Background="{DynamicResource Brush.Window}"
65+
BorderThickness="1,0,0,0"
66+
CornerRadius="0,0,4,4">
67+
<Grid ColumnDefinitions="*,Auto,Auto" Margin="0,4">
68+
<StackPanel Grid.Column="0"
69+
Margin="8,0"
70+
VerticalAlignment="Center"
71+
Orientation="Horizontal">
72+
<TextBlock Classes="info_label" FontSize="13" Text="{DynamicResource Text.CommitMessageTextBox.SubjectCount}"/>
73+
<TextBlock Classes="primary" Margin="8,0,0,0" FontSize="11" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthGood}}" VerticalAlignment="Center"/>
74+
<TextBlock Classes="primary" Margin="8,0,0,0" FontSize="11" Foreground="DarkGoldenrod" Text="{Binding #ThisControl.Subject.Length}" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}" VerticalAlignment="Center"/>
75+
<TextBlock Classes="primary" FontSize="11" Text="/" VerticalAlignment="Center"/>
76+
<TextBlock Classes="primary" FontSize="11" Text="{Binding Source={x:Static vm:Preferences.Instance}, Path=SubjectGuideLength}" VerticalAlignment="Center"/>
77+
<Path Width="10" Height="10" Margin="4,0,0,0" Data="{StaticResource Icons.Error}" Fill="DarkGoldenrod" IsVisible="{Binding #ThisControl.Subject.Length, Converter={x:Static c:IntConverters.IsSubjectLengthBad}}"/>
78+
</StackPanel>
79+
80+
<Button Grid.Column="1" Width="20" Margin="0,0,4,0" Padding="0" Classes="icon_button" Click="OnOpenConventionalCommitHelper" ToolTip.Tip="{DynamicResource Text.ConventionalCommit}">
81+
<Path Width="13" Height="13" Margin="0,1,0,0" Data="{StaticResource Icons.CommitMessageGenerator}"/>
82+
</Button>
83+
84+
<Button Grid.Column="2" Width="20" Margin="0,0,4,0" Padding="0" Classes="icon_button" Click="CopyAllText" ToolTip.Tip="{DynamicResource Text.CopyAllText}">
85+
<Path Width="13" Height="13" Data="{StaticResource Icons.Copy}"/>
86+
</Button>
87+
</Grid>
88+
</Border>
7689
</Grid>
7790
</Border>
7891
</UserControl>

src/Views/CommitMessageTextBox.axaml.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,23 @@ private void OnDescriptionTextBoxPreviewKeyDown(object _, KeyEventArgs e)
167167
}
168168
}
169169

170+
private void OnOpenConventionalCommitHelper(object _, RoutedEventArgs e)
171+
{
172+
var dialog = new ConventionalCommitMessageBuilder()
173+
{
174+
DataContext = new ViewModels.ConventionalCommitMessageBuilder(text => Text = text)
175+
};
176+
177+
App.OpenDialog(dialog);
178+
e.Handled = true;
179+
}
180+
181+
private void CopyAllText(object sender, RoutedEventArgs e)
182+
{
183+
App.CopyText(Text);
184+
e.Handled = true;
185+
}
186+
170187
private TextChangeWay _changingWay = TextChangeWay.None;
171188
}
172189
}

src/Views/WorkingCopy.axaml

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@
233233
<v:CommitMessageTextBox Grid.Row="2" Text="{Binding CommitMessage, Mode=TwoWay}"/>
234234

235235
<!-- Commit Options -->
236-
<Grid Grid.Row="3" Margin="0,6,0,0" ColumnDefinitions="Auto,Auto,Auto,Auto,Auto,*,Auto,Auto,Auto">
236+
<Grid Grid.Row="3" Margin="0,6,0,0" ColumnDefinitions="Auto,Auto,Auto,Auto,*,Auto,Auto,Auto">
237237
<Button Grid.Column="0"
238238
Classes="icon_button"
239239
Margin="4,0,0,0" Padding="0"
@@ -254,17 +254,7 @@
254254
<Path Width="15" Height="15" Data="{StaticResource Icons.AIAssist}"/>
255255
</Button>
256256

257-
<Button Grid.Column="2"
258-
Classes="icon_button"
259-
Margin="0,2,0,0"
260-
Click="OnOpenConventionalCommitHelper"
261-
ToolTip.Tip="{DynamicResource Text.ConventionalCommit}"
262-
ToolTip.Placement="Top"
263-
ToolTip.VerticalOffset="0">
264-
<Path Width="15" Height="15" Data="{StaticResource Icons.CommitMessageGenerator}"/>
265-
</Button>
266-
267-
<CheckBox Grid.Column="3"
257+
<CheckBox Grid.Column="2"
268258
Height="24"
269259
Margin="8,0,0,0"
270260
HorizontalAlignment="Left"
@@ -274,7 +264,7 @@
274264
ToolTip.Placement="Top"
275265
ToolTip.VerticalOffset="0"/>
276266

277-
<CheckBox Grid.Column="4"
267+
<CheckBox Grid.Column="3"
278268
Height="24"
279269
Margin="12,0,0,0"
280270
HorizontalAlignment="Left"
@@ -284,12 +274,12 @@
284274
ToolTip.Placement="Top"
285275
ToolTip.VerticalOffset="0"/>
286276

287-
<v:LoadingIcon Grid.Column="5"
277+
<v:LoadingIcon Grid.Column="4"
288278
Width="18" Height="18"
289279
HorizontalAlignment="Right"
290280
IsVisible="{Binding IsCommitting}"/>
291281

292-
<SplitButton Grid.Column="6"
282+
<SplitButton Grid.Column="5"
293283
Content="{DynamicResource Text.Repository.Continue}"
294284
Height="28"
295285
Margin="8,0,0,0"
@@ -311,7 +301,7 @@
311301
</SplitButton.Flyout>
312302
</SplitButton>
313303

314-
<Button Grid.Column="6"
304+
<Button Grid.Column="5"
315305
Classes="flat primary"
316306
Content="{DynamicResource Text.WorkingCopy.Commit}"
317307
Height="28"
@@ -344,7 +334,7 @@
344334
</Button>
345335

346336
<!-- Invisible button just to add another hotkey `Ctrl+Shift+Enter` to commit with auto-stage -->
347-
<Button Grid.Column="7"
337+
<Button Grid.Column="6"
348338
Width="0" Height="0"
349339
Background="Transparent"
350340
Command="{Binding CommitWithAutoStage}"
@@ -357,7 +347,7 @@
357347
</Button.IsEnabled>
358348
</Button>
359349

360-
<Button Grid.Column="8"
350+
<Button Grid.Column="7"
361351
Classes="flat"
362352
Content="{DynamicResource Text.WorkingCopy.CommitAndPush}"
363353
Height="28"

src/Views/WorkingCopy.axaml.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -144,20 +144,5 @@ private void OnOpenOpenAIHelper(object sender, RoutedEventArgs e)
144144

145145
e.Handled = true;
146146
}
147-
148-
private void OnOpenConventionalCommitHelper(object _, RoutedEventArgs e)
149-
{
150-
if (DataContext is ViewModels.WorkingCopy vm)
151-
{
152-
var dialog = new ConventionalCommitMessageBuilder()
153-
{
154-
DataContext = new ViewModels.ConventionalCommitMessageBuilder(vm)
155-
};
156-
157-
App.OpenDialog(dialog);
158-
}
159-
160-
e.Handled = true;
161-
}
162147
}
163148
}

0 commit comments

Comments
 (0)