Skip to content

Commit 66e915c

Browse files
committed
feature: show ahead/behind in local branch tooltip (#1761)
Signed-off-by: leo <[email protected]>
1 parent 6817d65 commit 66e915c

File tree

5 files changed

+54
-2
lines changed

5 files changed

+54
-2
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,12 @@
7373
<x:String x:Key="Text.BranchCM.SwitchToWorktree" xml:space="preserve">Switch to ${0}$ (worktree)</x:String>
7474
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">Set Tracking Branch...</x:String>
7575
<x:String x:Key="Text.BranchCompare" xml:space="preserve">Branch Compare</x:String>
76+
<x:String x:Key="Text.BranchTree.Ahead" xml:space="preserve">{0} commit(s) ahead</x:String>
77+
<x:String x:Key="Text.BranchTree.AheadBehind" xml:space="preserve">{0} commit(s) ahead, {1} commits behind</x:String>
78+
<x:String x:Key="Text.BranchTree.Behind" xml:space="preserve">{0} commit(s) behind</x:String>
7679
<x:String x:Key="Text.BranchTree.InvalidUpstream" xml:space="preserve">Invalid</x:String>
7780
<x:String x:Key="Text.BranchTree.Remote" xml:space="preserve">REMOTE</x:String>
81+
<x:String x:Key="Text.BranchTree.Status" xml:space="preserve">STATUS</x:String>
7882
<x:String x:Key="Text.BranchTree.Tracking" xml:space="preserve">TRACKING</x:String>
7983
<x:String x:Key="Text.BranchTree.URL" xml:space="preserve">URL</x:String>
8084
<x:String x:Key="Text.BranchTree.Worktree" xml:space="preserve">WORKTREE</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,12 @@
7777
<x:String x:Key="Text.BranchCM.SwitchToWorktree" xml:space="preserve">切换到 ${0}$ (工作树)</x:String>
7878
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">切换上游分支 ...</x:String>
7979
<x:String x:Key="Text.BranchCompare" xml:space="preserve">分支比较</x:String>
80+
<x:String x:Key="Text.BranchTree.Ahead" xml:space="preserve">领先 {0} 个提交</x:String>
81+
<x:String x:Key="Text.BranchTree.AheadBehind" xml:space="preserve">领先 {0} 个提交,落后 {1} 个提交</x:String>
82+
<x:String x:Key="Text.BranchTree.Behind" xml:space="preserve">落后 {0} 个提交</x:String>
8083
<x:String x:Key="Text.BranchTree.InvalidUpstream" xml:space="preserve">不存在</x:String>
8184
<x:String x:Key="Text.BranchTree.Remote" xml:space="preserve">远程</x:String>
85+
<x:String x:Key="Text.BranchTree.Status" xml:space="preserve">状态</x:String>
8286
<x:String x:Key="Text.BranchTree.Tracking" xml:space="preserve">上游分支</x:String>
8387
<x:String x:Key="Text.BranchTree.URL" xml:space="preserve">远程地址</x:String>
8488
<x:String x:Key="Text.BranchTree.Worktree" xml:space="preserve">工作树</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,12 @@
7777
<x:String x:Key="Text.BranchCM.SwitchToWorktree" xml:space="preserve">切換到 ${0}$ (工作區)</x:String>
7878
<x:String x:Key="Text.BranchCM.Tracking" xml:space="preserve">切換上游分支...</x:String>
7979
<x:String x:Key="Text.BranchCompare" xml:space="preserve">分支比較</x:String>
80+
<x:String x:Key="Text.BranchTree.Ahead" xml:space="preserve">領先 {0} 次提交</x:String>
81+
<x:String x:Key="Text.BranchTree.AheadBehind" xml:space="preserve">領先 {0} 次提交, 落後 {0} 次提交</x:String>
82+
<x:String x:Key="Text.BranchTree.Behind" xml:space="preserve">落後 {0} 次提交</x:String>
8083
<x:String x:Key="Text.BranchTree.InvalidUpstream" xml:space="preserve">無效</x:String>
8184
<x:String x:Key="Text.BranchTree.Remote" xml:space="preserve">遠端</x:String>
85+
<x:String x:Key="Text.BranchTree.Status" xml:space="preserve">狀態</x:String>
8286
<x:String x:Key="Text.BranchTree.Tracking" xml:space="preserve">上游分支</x:String>
8387
<x:String x:Key="Text.BranchTree.URL" xml:space="preserve">遠端網址</x:String>
8488
<x:String x:Key="Text.BranchTree.Worktree" xml:space="preserve">工作區</x:String>

src/Views/BranchTree.axaml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
</Border>
5050
</StackPanel>
5151

52-
<Grid RowDefinitions="Auto,Auto" ColumnDefinitions="Auto,Auto" Margin="0,8,0,0" IsVisible="{Binding IsLocal, Mode=OneWay}">
52+
<Grid RowDefinitions="Auto,Auto,Auto" ColumnDefinitions="Auto,Auto" Margin="0,8,0,0" IsVisible="{Binding IsLocal, Mode=OneWay}">
5353
<TextBlock Grid.Row="0" Grid.Column="0"
5454
Classes="info_label"
5555
HorizontalAlignment="Left" VerticalAlignment="Center"
@@ -70,12 +70,21 @@
7070
</StackPanel>
7171

7272
<TextBlock Grid.Row="1" Grid.Column="0"
73+
Classes="info_label"
74+
Margin="0,4,0,0"
75+
HorizontalAlignment="Left" VerticalAlignment="Center"
76+
Text="{DynamicResource Text.BranchTree.Status}"
77+
IsVisible="{Binding TrackStatus.IsVisible, Mode=OneWay}"/>
78+
<v:BranchTreeNodeTrackStatusTooltip Grid.Row="1" Grid.Column="1"
79+
Margin="8,4,0,0"/>
80+
81+
<TextBlock Grid.Row="2" Grid.Column="0"
7382
Classes="info_label"
7483
Margin="0,4,0,0"
7584
HorizontalAlignment="Left" VerticalAlignment="Center"
7685
Text="{DynamicResource Text.BranchTree.Worktree}"
7786
IsVisible="{Binding HasWorktree}"/>
78-
<TextBlock Grid.Row="1" Grid.Column="1"
87+
<TextBlock Grid.Row="2" Grid.Column="1"
7988
Margin="8,4,0,0"
8089
Text="{Binding WorktreePath, Mode=OneWay}"
8190
IsVisible="{Binding HasWorktree}"/>

src/Views/BranchTree.axaml.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,37 @@ protected override Size MeasureOverride(Size availableSize)
202202
private FormattedText _label = null;
203203
}
204204

205+
public class BranchTreeNodeTrackStatusTooltip : TextBlock
206+
{
207+
protected override Type StyleKeyOverride => typeof(TextBlock);
208+
209+
protected override void OnDataContextChanged(EventArgs e)
210+
{
211+
base.OnDataContextChanged(e);
212+
213+
Text = string.Empty;
214+
215+
if (DataContext is not Models.Branch { TrackStatus: { IsVisible: true } track })
216+
{
217+
SetCurrentValue(IsVisibleProperty, false);
218+
return;
219+
}
220+
221+
if (track.Ahead.Count > 0)
222+
{
223+
Text = track.Behind.Count > 0 ?
224+
App.Text("BranchTree.AheadBehind", track.Ahead.Count, track.Behind.Count) :
225+
App.Text("BranchTree.Ahead", track.Ahead.Count);
226+
}
227+
else if (track.Behind.Count > 0)
228+
{
229+
Text = App.Text("BranchTree.Behind", track.Behind.Count);
230+
}
231+
232+
SetCurrentValue(IsVisibleProperty, true);
233+
}
234+
}
235+
205236
public partial class BranchTree : UserControl
206237
{
207238
public static readonly StyledProperty<List<ViewModels.BranchTreeNode>> NodesProperty =

0 commit comments

Comments
 (0)