From 1298a22b000f35947015e8b44887ee5f72f9e070 Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 14 Nov 2024 20:53:59 +0800 Subject: [PATCH 1/4] ux: use dynamic icon for filter tips. Signed-off-by: leo --- src/Resources/Locales/de_DE.axaml | 1 - src/Resources/Locales/en_US.axaml | 1 - src/Resources/Locales/es_ES.axaml | 1 - src/Resources/Locales/fr_FR.axaml | 1 - src/Resources/Locales/pt_BR.axaml | 1 - src/Resources/Locales/ru_RU.axaml | 1 - src/Resources/Locales/zh_CN.axaml | 1 - src/Resources/Locales/zh_TW.axaml | 1 - src/Views/Repository.axaml | 10 ++++++--- src/Views/Repository.axaml.cs | 35 +++++++++++++++++++++++++++++++ 10 files changed, 42 insertions(+), 11 deletions(-) diff --git a/src/Resources/Locales/de_DE.axaml b/src/Resources/Locales/de_DE.axaml index 4e94bb67..68310dee 100644 --- a/src/Resources/Locales/de_DE.axaml +++ b/src/Resources/Locales/de_DE.axaml @@ -543,7 +543,6 @@ Aktiviere '--reflog' Option Öffne im Datei-Browser Suche Branches/Tags/Submodule - GEFILTERT: LOKALE BRANCHES Zum HEAD wechseln Aktiviere '--first-parent' Option diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index da860d05..75bcc77e 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -543,7 +543,6 @@ Unset (Default) Hide in commit graph Filter in commit graph - FILTERED BY: LOCAL BRANCHES Navigate to HEAD Enable '--first-parent' Option diff --git a/src/Resources/Locales/es_ES.axaml b/src/Resources/Locales/es_ES.axaml index 5e3ed9a9..f69fc934 100644 --- a/src/Resources/Locales/es_ES.axaml +++ b/src/Resources/Locales/es_ES.axaml @@ -541,7 +541,6 @@ Habilitar Opción '--reflog' Abrir en el Explorador Buscar Ramas/Etiquetas/Submódulos - FILTRAR POR: RAMAS LOCALES Navegar a HEAD Habilitar Opción '--first-parent' diff --git a/src/Resources/Locales/fr_FR.axaml b/src/Resources/Locales/fr_FR.axaml index c07a6ee5..babe3106 100644 --- a/src/Resources/Locales/fr_FR.axaml +++ b/src/Resources/Locales/fr_FR.axaml @@ -542,7 +542,6 @@ Activer l'option '--reflog' Ouvrir dans l'explorateur de fichiers Rechercher Branches/Tags/Submodules - FILTRE PAR : BRANCHES LOCALES Naviguer vers le HEAD Activer l'option '--first-parent' diff --git a/src/Resources/Locales/pt_BR.axaml b/src/Resources/Locales/pt_BR.axaml index 987b3398..8a1866f6 100644 --- a/src/Resources/Locales/pt_BR.axaml +++ b/src/Resources/Locales/pt_BR.axaml @@ -565,7 +565,6 @@ Habilitar opção '--reflog' Abrir no Navegador de Arquivos Pesquisar Branches/Tags/Submódulos - FILTRADO POR: Habilitar opção '--first-parent' BRANCHES LOCAIS Navegar para HEAD diff --git a/src/Resources/Locales/ru_RU.axaml b/src/Resources/Locales/ru_RU.axaml index e86dbbe7..dbc797e0 100644 --- a/src/Resources/Locales/ru_RU.axaml +++ b/src/Resources/Locales/ru_RU.axaml @@ -544,7 +544,6 @@ Разрешить опцию --reflog Открыть в файловом менеджере Поиск веток, меток и подмодулей - ОТФИЛЬТРОВАНО: ЛОКАЛЬНЫЕ ВЕТКИ Навигация по заголовку Включить опцию --first-parent diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index 4fd32a37..ded03053 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -547,7 +547,6 @@ 未指定(默认行为) 在提交列表中隐藏 使用其对提交列表过滤 - 过滤规则 : 本地分支 定位HEAD 启用 --first-parent 过滤选项 diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml index b5d9aea8..6461665c 100644 --- a/src/Resources/Locales/zh_TW.axaml +++ b/src/Resources/Locales/zh_TW.axaml @@ -546,7 +546,6 @@ 未指定 (預設) 在提交清單中隱藏 使用其來篩選提交清單 - 篩選規則: 本機分支 回到 HEAD 啟用 [--first-parent] 選項 diff --git a/src/Views/Repository.axaml b/src/Views/Repository.axaml index 8c31f61f..d32bfa1f 100644 --- a/src/Views/Repository.axaml +++ b/src/Views/Repository.axaml @@ -574,9 +574,13 @@ - - - + + + diff --git a/src/Views/Repository.axaml.cs b/src/Views/Repository.axaml.cs index dec3d447..cbc654ae 100644 --- a/src/Views/Repository.axaml.cs +++ b/src/Views/Repository.axaml.cs @@ -395,5 +395,40 @@ namespace SourceGit.Views } e.Handled = true; } + + private void OnHistoriesFiltersLayoutUpdated(object sender, EventArgs e) + { + var repo = DataContext as ViewModels.Repository; + if (repo == null) + return; + + var filters = repo.Settings.HistoriesFilters; + if (filters.Count == 0) + return; + + var mode = filters[0].Mode; + if (mode == _lastFilterMode) + return; + + _lastFilterMode = mode; + + var icon = null as StreamGeometry; + switch (mode) + { + case Models.FilterMode.Included: + icon = this.FindResource("Icons.Filter") as StreamGeometry; + break; + case Models.FilterMode.Excluded: + icon = this.FindResource("Icons.EyeClose") as StreamGeometry; + break; + default: + break; + } + + if (icon != null) + HistoriesFilterModeIcon.Data = icon; + } + + private Models.FilterMode _lastFilterMode = Models.FilterMode.None; } } From 04697093a8fc22f7c3242f62b05e9b52689288f2 Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 14 Nov 2024 20:56:49 +0800 Subject: [PATCH 2/4] localization: update `Text.Repository.FilterCommits.Default` (#690) Signed-off-by: leo --- src/Resources/Locales/en_US.axaml | 2 +- src/Resources/Locales/zh_CN.axaml | 2 +- src/Resources/Locales/zh_TW.axaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index 75bcc77e..55fb04d8 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -540,7 +540,7 @@ Enable '--reflog' Option Open in File Browser Search Branches/Tags/Submodules - Unset (Default) + Unset Hide in commit graph Filter in commit graph LOCAL BRANCHES diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index ded03053..1ab661be 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -544,7 +544,7 @@ 启用 --reflog 选项 在文件浏览器中打开 快速查找分支/标签/子模块 - 未指定(默认行为) + 不指定 在提交列表中隐藏 使用其对提交列表过滤 本地分支 diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml index 6461665c..5452fef6 100644 --- a/src/Resources/Locales/zh_TW.axaml +++ b/src/Resources/Locales/zh_TW.axaml @@ -543,7 +543,7 @@ 啟用 [--reflog] 選項 在檔案瀏覽器中開啟 快速搜尋分支/標籤/子模組 - 未指定 (預設) + 不指定 在提交清單中隱藏 使用其來篩選提交清單 本機分支 From 28c93da73b4be72562363190baa22b3d661754a2 Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 14 Nov 2024 21:12:18 +0800 Subject: [PATCH 3/4] ux: show `Unset` menu item only if it is necessary (#690) Signed-off-by: leo --- src/Views/FilterModeSwitchButton.axaml.cs | 73 +++++++++++------------ 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/src/Views/FilterModeSwitchButton.axaml.cs b/src/Views/FilterModeSwitchButton.axaml.cs index f253158b..5b1f1b2b 100644 --- a/src/Views/FilterModeSwitchButton.axaml.cs +++ b/src/Views/FilterModeSwitchButton.axaml.cs @@ -71,19 +71,25 @@ namespace SourceGit.Views if (button == null) return; + var menu = new ContextMenu(); + var mode = Models.FilterMode.None; if (DataContext is Models.Tag tag) { - var mode = tag.FilterMode; + mode = tag.FilterMode; - var none = new MenuItem(); - none.Icon = App.CreateMenuIcon("Icons.Eye"); - none.Header = App.Text("Repository.FilterCommits.Default"); - none.IsEnabled = mode != Models.FilterMode.None; - none.Click += (_, ev) => + if (mode != Models.FilterMode.None) { - UpdateTagFilterMode(repo, tag, Models.FilterMode.None); - ev.Handled = true; - }; + var unset = new MenuItem(); + unset.Header = App.Text("Repository.FilterCommits.Default"); + unset.Click += (_, ev) => + { + UpdateTagFilterMode(repo, tag, Models.FilterMode.None); + ev.Handled = true; + }; + + menu.Items.Add(unset); + menu.Items.Add(new MenuItem() { Header = "-" }); + } var include = new MenuItem(); include.Icon = App.CreateMenuIcon("Icons.Filter"); @@ -105,32 +111,26 @@ namespace SourceGit.Views ev.Handled = true; }; - var menu = new ContextMenu(); - menu.Items.Add(none); menu.Items.Add(include); menu.Items.Add(exclude); - - if (mode == Models.FilterMode.None) - { - IsContextMenuOpening = true; - menu.Closed += (_, _) => IsContextMenuOpening = false; - } - - menu.Open(button); } else if (DataContext is ViewModels.BranchTreeNode node) { - var mode = node.FilterMode; + mode = node.FilterMode; - var none = new MenuItem(); - none.Icon = App.CreateMenuIcon("Icons.Eye"); - none.Header = App.Text("Repository.FilterCommits.Default"); - none.IsEnabled = mode != Models.FilterMode.None; - none.Click += (_, ev) => + if (mode != Models.FilterMode.None) { - UpdateBranchFilterMode(repo, node, Models.FilterMode.None); - ev.Handled = true; - }; + var unset = new MenuItem(); + unset.Header = App.Text("Repository.FilterCommits.Default"); + unset.Click += (_, ev) => + { + UpdateBranchFilterMode(repo, node, Models.FilterMode.None); + ev.Handled = true; + }; + + menu.Items.Add(unset); + menu.Items.Add(new MenuItem() { Header = "-" }); + } var include = new MenuItem(); include.Icon = App.CreateMenuIcon("Icons.Filter"); @@ -152,20 +152,17 @@ namespace SourceGit.Views ev.Handled = true; }; - var menu = new ContextMenu(); - menu.Items.Add(none); menu.Items.Add(include); menu.Items.Add(exclude); - - if (mode == Models.FilterMode.None) - { - IsContextMenuOpening = true; - menu.Closed += (_, _) => IsContextMenuOpening = false; - } - - menu.Open(button); } + if (mode == Models.FilterMode.None) + { + IsContextMenuOpening = true; + menu.Closed += (_, _) => IsContextMenuOpening = false; + } + + menu.Open(button); e.Handled = true; } From a824adf6d314fa12e68505051e3248cb523c094c Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 14 Nov 2024 21:15:40 +0800 Subject: [PATCH 4/4] code_style: run `dotnet format` Signed-off-by: leo --- src/Converters/FilterModeConverters.cs | 2 +- src/Models/Filter.cs | 6 +++--- src/Models/OpenAI.cs | 2 +- src/Models/RepositorySettings.cs | 2 +- src/ViewModels/Repository.cs | 4 ++-- src/Views/FilterModeSwitchButton.axaml.cs | 3 +-- 6 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Converters/FilterModeConverters.cs b/src/Converters/FilterModeConverters.cs index 402a287d..c486af5e 100644 --- a/src/Converters/FilterModeConverters.cs +++ b/src/Converters/FilterModeConverters.cs @@ -6,7 +6,7 @@ namespace SourceGit.Converters public static class FilterModeConverters { public static readonly FuncValueConverter ToBorderBrush = - new FuncValueConverter(v => + new FuncValueConverter(v => { switch (v) { diff --git a/src/Models/Filter.cs b/src/Models/Filter.cs index 8ffd27c7..af4569fa 100644 --- a/src/Models/Filter.cs +++ b/src/Models/Filter.cs @@ -20,19 +20,19 @@ namespace SourceGit.Models public class Filter : ObservableObject { - public string Pattern + public string Pattern { get => _pattern; set => SetProperty(ref _pattern, value); } - public FilterType Type + public FilterType Type { get; set; } = FilterType.LocalBranch; - public FilterMode Mode + public FilterMode Mode { get => _mode; set => SetProperty(ref _mode, value); diff --git a/src/Models/OpenAI.cs b/src/Models/OpenAI.cs index 0a83d8dc..c5ca7449 100644 --- a/src/Models/OpenAI.cs +++ b/src/Models/OpenAI.cs @@ -159,7 +159,7 @@ namespace SourceGit.Models if (Server.Contains("openai.azure.com/", StringComparison.Ordinal)) client.DefaultRequestHeaders.Add("api-key", ApiKey); else - client.DefaultRequestHeaders.Add("Authorization", $"Bearer {ApiKey}"); + client.DefaultRequestHeaders.Add("Authorization", $"Bearer {ApiKey}"); } var req = new StringContent(JsonSerializer.Serialize(chat, JsonCodeGen.Default.OpenAIChatRequest), Encoding.UTF8, "application/json"); diff --git a/src/Models/RepositorySettings.cs b/src/Models/RepositorySettings.cs index 844a240e..cb07c295 100644 --- a/src/Models/RepositorySettings.cs +++ b/src/Models/RepositorySettings.cs @@ -234,7 +234,7 @@ namespace SourceGit.Models { var name = filter.Pattern.Substring(11); var b = $"{name.Substring(0, name.Length - 1)}[{name[^1]}]"; - + if (filter.Mode == FilterMode.Included) includedBranches.Add(b); else if (filter.Mode == FilterMode.Excluded) diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index c1eb6007..4922f4cb 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -701,7 +701,7 @@ namespace SourceGit.ViewModels if (local.FullName.StartsWith(filter.Pattern, StringComparison.Ordinal)) return; - hasIncludedBranch |= filter.Mode == Models.FilterMode.Included; + hasIncludedBranch |= filter.Mode == Models.FilterMode.Included; } else if (filter.Type == Models.FilterType.RemoteBranch || filter.Type == Models.FilterType.RemoteBranchFolder) { @@ -2035,7 +2035,7 @@ namespace SourceGit.ViewModels { node.FilterMode = _settings.GetHistoriesFilterMode(node.Path, isLocal ? Models.FilterType.LocalBranchFolder : Models.FilterType.RemoteBranchFolder); UpdateBranchTreeFilterMode(node.Children, isLocal); - } + } } } diff --git a/src/Views/FilterModeSwitchButton.axaml.cs b/src/Views/FilterModeSwitchButton.axaml.cs index 5b1f1b2b..448f455e 100644 --- a/src/Views/FilterModeSwitchButton.axaml.cs +++ b/src/Views/FilterModeSwitchButton.axaml.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; @@ -89,7 +88,7 @@ namespace SourceGit.Views menu.Items.Add(unset); menu.Items.Add(new MenuItem() { Header = "-" }); - } + } var include = new MenuItem(); include.Icon = App.CreateMenuIcon("Icons.Filter");