From 0f226b36206ba1a95c9ace9acd57a0cfbce0c05e Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Fri, 19 Apr 2024 20:32:06 +0800 Subject: [PATCH] new: editor `softWrap` (#338) --- lib/data/store/setting.dart | 2 ++ lib/l10n/app_de.arb | 1 + lib/l10n/app_en.arb | 1 + lib/l10n/app_es.arb | 1 + lib/l10n/app_fr.arb | 1 + lib/l10n/app_id.arb | 1 + lib/l10n/app_ja.arb | 1 + lib/l10n/app_nl.arb | 1 + lib/l10n/app_pt.arb | 1 + lib/l10n/app_ru.arb | 1 + lib/l10n/app_zh.arb | 1 + lib/l10n/app_zh_tw.arb | 1 + lib/view/page/editor.dart | 1 + lib/view/page/setting/entry.dart | 8 +++++ lib/view/page/ssh/tab.dart | 54 +++++++++++++++++--------------- 15 files changed, 50 insertions(+), 26 deletions(-) diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index 0c92a70d..f53d2271 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -272,6 +272,8 @@ class SettingStore extends PersistentStore { /// 0 -> unset, 1 -> true, 2 -> false late final inAppUpdate = property('inAppUpdate', 0); + late final editorSoftWrap = property('editorSoftWrap', isIOS); + // Never show these settings for users // // ------BEGIN------ diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index d77078aa..751aea7a 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -257,6 +257,7 @@ "shutdown": "Abschaltung", "size": "Größe", "snippet": "Snippet", + "softWrap": "Weicher Umbruch", "speed": "Tempo", "spentTime": "Benötigte Zeit: {time}", "sshTip": "Diese Funktion befindet sich jetzt in der Experimentierphase.\n\nBitte melde Bugs auf {url} oder mach mit bei der Entwicklung.", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 9400af35..09ad76ad 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -257,6 +257,7 @@ "shutdown": "Shutdown", "size": "Size", "snippet": "Snippet", + "softWrap": "Soft wrap", "speed": "Speed", "spentTime": "Spent time: {time}", "sshTip": "This function is now in the experimental stage.\n\nPlease report bugs on {url} or join our development.", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 00405f96..7ac27551 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -257,6 +257,7 @@ "shutdown": "Apagar", "size": "Tamaño", "snippet": "Fragmento de código", + "softWrap": "Salto de línea suave", "speed": "Velocidad", "spentTime": "Tiempo gastado: {time}", "sshTip": "Esta función está en fase de pruebas.\n\nPor favor, informa los problemas en {url}, o únete a nuestro desarrollo.", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 8b194ca5..bf310037 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -257,6 +257,7 @@ "shutdown": "Éteindre", "size": "Taille", "snippet": "Extrait", + "softWrap": "Retour à la ligne doux", "speed": "Vitesse", "spentTime": "Temps écoulé : {time}", "sshTip": "Cette fonction est actuellement au stade expérimental.\n\n Veuillez signaler les bogues sur {url} ou rejoignez notre développement.", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index f17d1a7f..37fb4075 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -257,6 +257,7 @@ "shutdown": "Matikan", "size": "Ukuran", "snippet": "Snippet", + "softWrap": "Pembungkus lembut", "speed": "Kecepatan", "spentTime": "Menghabiskan waktu: {time}", "sshTip": "Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di {url} atau bergabunglah dengan pengembangan kami.", diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 364ef0ee..5749b724 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -257,6 +257,7 @@ "shutdown": "シャットダウン", "size": "サイズ", "snippet": "スニペット", + "softWrap": "ソフトラップ", "speed": "速度", "spentTime": "時間を費やしました: {time}", "sshTip": "この機能は現在テスト段階にあります。\n\n問題がある場合は、{url}でフィードバックしてください。", diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 7db8a7a9..a023f6dc 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -256,6 +256,7 @@ "shutdown": "Afsluiten", "size": "Grootte", "snippet": "Fragment", + "softWrap": "Zachte wrap", "speed": "Snelheid", "spentTime": "Gebruikte tijd: {time}", "sshTip": "Deze functie bevindt zich momenteel in de experimentele fase.\n\nMeld alstublieft bugs op {url} of sluit je aan bij onze ontwikkeling.", diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 2a1996e0..23d1548b 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -257,6 +257,7 @@ "shutdown": "Desligar", "size": "Tamanho", "snippet": "Snippet", + "softWrap": "Quebra de linha suave", "speed": "Velocidade", "spentTime": "Tempo gasto: {time}", "sshTip": "Esta funcionalidade está em fase de teste.\n\nPor favor, reporte problemas em {url} ou junte-se a nós no desenvolvimento.", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 6fa57457..5d340409 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -257,6 +257,7 @@ "shutdown": "выключение", "size": "размер", "snippet": "фрагмент", + "softWrap": "Мягкий перенос", "speed": "скорость", "spentTime": "Затрачено времени: {time}", "sshTip": "Эта функция находится в стадии тестирования.\n\nПожалуйста, отправляйте отчеты о проблемах на {url} или присоединяйтесь к нашей разработке.", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index a2ef330e..16788abf 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -257,6 +257,7 @@ "shutdown": "关机", "size": "大小", "snippet": "代码片段", + "softWrap": "自动换行", "speed": "速度", "spentTime": "耗时: {time}", "sshTip": "该功能目前处于测试阶段。\n\n请在 {url} 反馈问题,或者加入我们开发。", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index 37bc6f7d..68262401 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -257,6 +257,7 @@ "shutdown": "关机", "size": "大小", "snippet": "程式片段", + "softWrap": "軟換行", "speed": "速度", "spentTime": "耗時: {time}", "sshTip": "該功能目前處於測試階段。\n\n請在 {url} 反饋問題,或者加入我們開發。", diff --git a/lib/view/page/editor.dart b/lib/view/page/editor.dart index b8128562..69d67dee 100644 --- a/lib/view/page/editor.dart +++ b/lib/view/page/editor.dart @@ -171,6 +171,7 @@ class _EditorPageState extends State { styles: _codeTheme, ), child: CodeField( + wrap: Stores.setting.editorSoftWrap.fetch(), focusNode: _focusNode, controller: _controller, textStyle: _textStyle, diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index 937433db..788a50a0 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -182,6 +182,7 @@ class _SettingPageState extends State { Widget _buildEditor() { return Column( children: [ + _buildEditorWrap(), _buildEditorFontSize(), _buildEditorTheme(), _buildEditorDarkTheme(), @@ -1114,4 +1115,11 @@ class _SettingPageState extends State { ], ); } + + Widget _buildEditorWrap() { + return ListTile( + title: Text(l10n.softWrap), + trailing: StoreSwitch(prop: _setting.editorSoftWrap), + ); + } } diff --git a/lib/view/page/ssh/tab.dart b/lib/view/page/ssh/tab.dart index 2e9905a9..7e185542 100644 --- a/lib/view/page/ssh/tab.dart +++ b/lib/view/page/ssh/tab.dart @@ -4,6 +4,7 @@ import 'package:toolbox/core/extension/context/common.dart'; import 'package:toolbox/core/extension/context/dialog.dart'; import 'package:toolbox/core/extension/context/locale.dart'; import 'package:toolbox/core/route.dart'; +import 'package:toolbox/data/model/server/server_private_info.dart'; import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/res/provider.dart'; import 'package:toolbox/data/res/ui.dart'; @@ -14,7 +15,7 @@ class SSHTabPage extends StatefulWidget { const SSHTabPage({super.key}); @override - _SSHTabPageState createState() => _SSHTabPageState(); + State createState() => _SSHTabPageState(); } class _SSHTabPageState extends State @@ -84,7 +85,6 @@ class _SSHTabPageState extends State if (confirm != true) { return; } - // debugPrint("Removing a tab whose tabId = $e"); _tabIds.remove(e); _refreshTabs(); }, @@ -115,30 +115,7 @@ class _SSHTabPageState extends State title: Text(spi.name), subtitle: Text(spi.id, style: UIs.textGrey), trailing: const Icon(Icons.chevron_right), - onTap: () { - final name = () { - if (_tabIds.containsKey(spi.name)) { - return '${spi.name}(${_tabIds.length + 1})'; - } - return spi.name; - }(); - final key = GlobalKey(debugLabel: 'sshTabPage_$name'); - _tabIds[name] = SSHPage( - key: key, - spi: spi, - notFromTab: false, - onSessionEnd: () { - // debugPrint("Session done received on page whose tabId = $name"); - // debugPrint("key = $key"); - _tabIds.remove(name); - _refreshTabs(); - }, - ); - _refreshTabs(); - final idx = _tabIds.length - 1; - _tabController.animateTo(idx); - _fabRN.value = idx; - }, + onTap: () => _onTapInitCard(spi), ), ); }, @@ -156,6 +133,31 @@ class _SSHTabPageState extends State ); } + void _onTapInitCard(ServerPrivateInfo spi) { + final name = () { + if (_tabIds.containsKey(spi.name)) { + return '${spi.name}(${_tabIds.length + 1})'; + } + return spi.name; + }(); + final key = GlobalKey>(debugLabel: 'sshTabPage_$name'); + _tabIds[name] = SSHPage( + key: key, + spi: spi, + notFromTab: false, + onSessionEnd: () { + // debugPrint("Session done received on page whose tabId = $name"); + // debugPrint("key = $key"); + _tabIds.remove(name); + _refreshTabs(); + }, + ); + _refreshTabs(); + final idx = _tabIds.length - 1; + _tabController.animateTo(idx); + _fabRN.value = idx; + } + void _refreshTabs() { _tabController = TabController( length: _tabIds.length,