From 1b6d283f07997af6a2a91d173bf20b3e8e85c8c8 Mon Sep 17 00:00:00 2001 From: Sebastian Walter Date: Sun, 11 Oct 2026 09:55:02 +0200 Subject: [PATCH] =?UTF-8?q?feat(preferences):=20add=20multi=E2=80=91line?= =?UTF-8?q?=20repository=20tabs=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added `UseMultiLineTabs` string resources to all locale files and bound UI text. - Introduced `UseMultiLineTabs` property and backing field in `Preferences` view‑model. - Updated `Launcher.axaml` layout: title bar row height set to auto, button alignments adjusted, and tab bar positioned at top. - Refactored `LauncherTabBar.axaml` to include a tab template resource, added conditional visibility for scroll and wrap layouts based on `UseMultiLineTabs`, and introduced a wrap‑panel list for multi‑line tabs. --- src/Resources/Locales/de_DE.axaml | 1 + src/Resources/Locales/el_GR.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/he_IL.axaml | 1 + src/Resources/Locales/id_ID.axaml | 1 + src/Resources/Locales/it_IT.axaml | 1 + src/Resources/Locales/ja_JP.axaml | 1 + src/Resources/Locales/ko_KR.axaml | 1 + src/Resources/Locales/pt_BR.axaml | 1 + src/Resources/Locales/ru_RU.axaml | 1 + src/Resources/Locales/ta_IN.axaml | 1 + src/Resources/Locales/uk_UA.axaml | 1 + src/Resources/Locales/zh_CN.axaml | 1 + src/Resources/Locales/zh_TW.axaml | 1 + src/ViewModels/Preferences.cs | 7 + src/Views/Launcher.axaml | 14 +- src/Views/LauncherTabBar.axaml | 267 ++++++++++++++++++------------ src/Views/LauncherTabBar.axaml.cs | 6 +- src/Views/Preferences.axaml | 7 +- 21 files changed, 206 insertions(+), 111 deletions(-) diff --git a/src/Resources/Locales/de_DE.axaml b/src/Resources/Locales/de_DE.axaml index 9e2d348bc8..3899ea771f 100644 --- a/src/Resources/Locales/de_DE.axaml +++ b/src/Resources/Locales/de_DE.axaml @@ -662,6 +662,7 @@ $1, $2, … Werte der Eingabe-Steuerelemente Design-Anpassungen Bildlaufleisten automatisch ausblenden Fixe Tab-Breite in Titelleiste verwenden + Repository-Tabs mehrzeilig anzeigen Nativen Fensterrahmen verwenden DIFF- / MERGE-TOOL Argumente für Diff diff --git a/src/Resources/Locales/el_GR.axaml b/src/Resources/Locales/el_GR.axaml index 8e5e5f4dfe..8e6a64fc43 100644 --- a/src/Resources/Locales/el_GR.axaml +++ b/src/Resources/Locales/el_GR.axaml @@ -661,6 +661,7 @@ Παρακάμψεις θέματος Χρήση μπαρών κύλισης αυτόματης απόκρυψης Χρήση σταθερού πλάτους καρτελών στη γραμμή τίτλου + Αναδίπλωση καρτελών αποθετηρίων σε πολλές σειρές Χρήση εγγενούς πλαισίου παραθύρου ΕΡΓΑΛΕΙΟ DIFF/MERGE Ορίσματα Diff diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index 76ac9e4dcb..819c75bd63 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -684,6 +684,7 @@ Theme Overrides Use auto-hide scrollbars Use fixed tab width in titlebar + Wrap repository tabs into multiple rows Use native window frame DIFF/MERGE TOOL Diff Arguments diff --git a/src/Resources/Locales/es_ES.axaml b/src/Resources/Locales/es_ES.axaml index e5a8c77e75..73846d3e1c 100644 --- a/src/Resources/Locales/es_ES.axaml +++ b/src/Resources/Locales/es_ES.axaml @@ -688,6 +688,7 @@ Sobreescritura de temas Usar barras de desplazamiento que se oculten automáticamente Usar ancho de pestaña fijo en la barra de título + Mostrar las pestañas de repositorio en varias filas Usar marco de ventana nativo HERRAMIENTA DIFF/MERGE Argumentos para Diff diff --git a/src/Resources/Locales/fr_FR.axaml b/src/Resources/Locales/fr_FR.axaml index e6b46a1e27..01d647bd61 100644 --- a/src/Resources/Locales/fr_FR.axaml +++ b/src/Resources/Locales/fr_FR.axaml @@ -630,6 +630,7 @@ Dérogations de thème Utiliser les barres de défilement masquées automatiquement Utiliser des onglets de taille fixe dans la barre de titre + Afficher les onglets des dépôts sur plusieurs lignes Utiliser un cadre de fenêtre natif OUTIL DIFF/MERGE Arguments de diff diff --git a/src/Resources/Locales/he_IL.axaml b/src/Resources/Locales/he_IL.axaml index 98426b3023..ade01623aa 100644 --- a/src/Resources/Locales/he_IL.axaml +++ b/src/Resources/Locales/he_IL.axaml @@ -630,6 +630,7 @@ דריסות ערכת נושא שימוש בפסי גלילה המוסתרים אוטומטית רוחב לשונית קבוע בשורת הכותרת + הצגת לשוניות מאגרים במספר שורות שימוש במסגרת חלון מקומית כלי DIFF/MERGE ארגומנטים ל־Diff diff --git a/src/Resources/Locales/id_ID.axaml b/src/Resources/Locales/id_ID.axaml index a50be71a66..7035a89c8a 100644 --- a/src/Resources/Locales/id_ID.axaml +++ b/src/Resources/Locales/id_ID.axaml @@ -663,6 +663,7 @@ Override Tema Gunakan scrollbar auto-hide Gunakan lebar tab tetap di titlebar + Tampilkan tab repositori dalam beberapa baris Gunakan frame window native DIFF/MERGE TOOL Argumen Diff diff --git a/src/Resources/Locales/it_IT.axaml b/src/Resources/Locales/it_IT.axaml index 3ce0bae2c9..fd8331f885 100644 --- a/src/Resources/Locales/it_IT.axaml +++ b/src/Resources/Locales/it_IT.axaml @@ -580,6 +580,7 @@ ${pure_files:N} Come ${files:N}, ma senza cartelle Sostituzioni Tema Usa barre di scorrimento a scomparsa automatica Usa larghezza fissa per i tab nella barra del titolo + Disponi le schede dei repository su più righe Usa cornice finestra nativa STRUMENTO DI DIFFERENZA/UNIONE Argomenti Diff diff --git a/src/Resources/Locales/ja_JP.axaml b/src/Resources/Locales/ja_JP.axaml index ac9637eea9..5f6ca6af75 100644 --- a/src/Resources/Locales/ja_JP.axaml +++ b/src/Resources/Locales/ja_JP.axaml @@ -678,6 +678,7 @@ テーマの上書き 自動的にスクロールバーを隠す タイトルバーに固定タブ幅を使用 + リポジトリのタブを複数行で表示 ネイティブなウィンドウフレームを使用 差分/マージツール 差分時の引数 diff --git a/src/Resources/Locales/ko_KR.axaml b/src/Resources/Locales/ko_KR.axaml index e0695553fb..3a71a29342 100644 --- a/src/Resources/Locales/ko_KR.axaml +++ b/src/Resources/Locales/ko_KR.axaml @@ -633,6 +633,7 @@ 테마 재정의 스크롤바 자동 숨기기 사용 제목 표시줄에서 고정 탭 너비 사용 + 저장소 탭을 여러 줄로 표시 네이티브 윈도우 프레임 사용 DIFF/MERGE 도구 비교 인수 diff --git a/src/Resources/Locales/pt_BR.axaml b/src/Resources/Locales/pt_BR.axaml index 5084f0180b..a82f2b3246 100644 --- a/src/Resources/Locales/pt_BR.axaml +++ b/src/Resources/Locales/pt_BR.axaml @@ -407,6 +407,7 @@ Tema Substituições de Tema Usar largura fixa de aba na barra de título + Exibir abas de repositórios em várias linhas Usar moldura de janela nativa FERRAMENTA DE DIFF/MERGE Caminho de Instalação diff --git a/src/Resources/Locales/ru_RU.axaml b/src/Resources/Locales/ru_RU.axaml index 596df60287..21e3c7cb5a 100644 --- a/src/Resources/Locales/ru_RU.axaml +++ b/src/Resources/Locales/ru_RU.axaml @@ -688,6 +688,7 @@ Переопределение темы Автоматически скрывать прокрутку Использовать фиксированную ширину табуляции в строке заголовка. + Расположить вкладки репозиториев в несколько строк Использовать системное окно ИНСТРУМЕНТ СРАВНЕНИЙ/СЛИЯНИЯ Аргументы сравнения diff --git a/src/Resources/Locales/ta_IN.axaml b/src/Resources/Locales/ta_IN.axaml index 3473ff1cab..ed04e48c2b 100644 --- a/src/Resources/Locales/ta_IN.axaml +++ b/src/Resources/Locales/ta_IN.axaml @@ -403,6 +403,7 @@ கருப்பொருள் கருப்பொருள் மேலெழுதப்படுகிறது தலைப்புப்பட்டியில் நிலையான தாவல் அகலத்தைப் பயன்படுத்து + களஞ்சியத் தாவல்களை பல வரிசைகளில் காட்டு சொந்த சாளர சட்டத்தைப் பயன்படுத்து வேறு/ஒன்றிணை கருவி நிறுவல் பாதை diff --git a/src/Resources/Locales/uk_UA.axaml b/src/Resources/Locales/uk_UA.axaml index 5f44193e39..c2c6c7cb13 100644 --- a/src/Resources/Locales/uk_UA.axaml +++ b/src/Resources/Locales/uk_UA.axaml @@ -407,6 +407,7 @@ Тема Перевизначення теми Використовувати фіксовану ширину вкладки в заголовку + Розміщувати вкладки сховищ у кілька рядків Використовувати системну рамку вікна ІНСТРУМЕНТ DIFF/MERGE Шлях встановлення diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index d24f14b1e8..959e768990 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -688,6 +688,7 @@ 主题自定义 允许滚动条自动隐藏 主标签使用固定宽度 + 将仓库标签页排列为多行 使用系统默认窗体样式 对比/合并工具 对比命令参数 diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml index 97680c6103..1de043caae 100644 --- a/src/Resources/Locales/zh_TW.axaml +++ b/src/Resources/Locales/zh_TW.axaml @@ -688,6 +688,7 @@ 自訂主題 允許自動隱藏捲軸 使用固定寬度的分頁標籤 + 將儲存庫分頁排列成多列 使用系統原生預設視窗樣式 對比/合併工具 對比命令參數 diff --git a/src/ViewModels/Preferences.cs b/src/ViewModels/Preferences.cs index 4803ec4296..bc9733cdf4 100644 --- a/src/ViewModels/Preferences.cs +++ b/src/ViewModels/Preferences.cs @@ -175,6 +175,12 @@ public bool UseFixedTabWidth set => SetProperty(ref _useFixedTabWidth, value); } + public bool UseMultiLineTabs + { + get => _useMultiLineTabs; + set => SetProperty(ref _useMultiLineTabs, value); + } + public bool UseAutoHideScrollBars { get => _useAutoHideScrollBars; @@ -821,6 +827,7 @@ private bool RemoveInvalidRepositoriesRecursive(List collection) private int _maxHistoryCommits = 20000; private int _subjectGuideLength = 50; private bool _useFixedTabWidth = true; + private bool _useMultiLineTabs = false; private bool _useAutoHideScrollBars = true; private bool _useGitHubStyleAvatar = true; private bool _useCompactBranchNamesInGraph = true; diff --git a/src/Views/Launcher.axaml b/src/Views/Launcher.axaml index 00aa09a228..d798bd8462 100644 --- a/src/Views/Launcher.axaml +++ b/src/Views/Launcher.axaml @@ -14,12 +14,14 @@ MinWidth="1024" MinHeight="600"> - + - + - - - + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + LayoutUpdated="OnTabsLayoutUpdated" + ScrollViewer.HorizontalScrollBarVisibility="Disabled" + ScrollViewer.VerticalScrollBarVisibility="Disabled"> - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + diff --git a/src/Views/LauncherTabBar.axaml.cs b/src/Views/LauncherTabBar.axaml.cs index 19bb5967ac..b16192cbb6 100644 --- a/src/Views/LauncherTabBar.axaml.cs +++ b/src/Views/LauncherTabBar.axaml.cs @@ -69,6 +69,9 @@ public override void Render(DrawingContext context) { base.Render(context); + if (ViewModels.Preferences.Instance.UseMultiLineTabs) + return; + if (LauncherTabsList == null || LauncherTabsList.SelectedIndex == -1) return; @@ -203,7 +206,8 @@ private void ScrollTabsRight(object _, RoutedEventArgs e) private void OnTabsLayoutUpdated(object _1, EventArgs _2) { - IsScrollButtonVisible = LauncherTabsScroller.Extent.Width > LauncherTabsScroller.Viewport.Width; + IsScrollButtonVisible = !ViewModels.Preferences.Instance.UseMultiLineTabs && + LauncherTabsScroller.Extent.Width > LauncherTabsScroller.Viewport.Width; InvalidateVisual(); } diff --git a/src/Views/Preferences.axaml b/src/Views/Preferences.axaml index 55c2b17276..16fa3d3d17 100644 --- a/src/Views/Preferences.axaml +++ b/src/Views/Preferences.axaml @@ -188,7 +188,7 @@ - + + +