new: editor softWrap (#338)

This commit is contained in:
lollipopkit
2024-04-19 20:32:06 +08:00
parent 536b7f3b2c
commit 0f226b3620
15 changed files with 50 additions and 26 deletions

View File

@@ -272,6 +272,8 @@ class SettingStore extends PersistentStore {
/// 0 -> unset, 1 -> true, 2 -> false /// 0 -> unset, 1 -> true, 2 -> false
late final inAppUpdate = property('inAppUpdate', 0); late final inAppUpdate = property('inAppUpdate', 0);
late final editorSoftWrap = property('editorSoftWrap', isIOS);
// Never show these settings for users // Never show these settings for users
// //
// ------BEGIN------ // ------BEGIN------

View File

@@ -257,6 +257,7 @@
"shutdown": "Abschaltung", "shutdown": "Abschaltung",
"size": "Größe", "size": "Größe",
"snippet": "Snippet", "snippet": "Snippet",
"softWrap": "Weicher Umbruch",
"speed": "Tempo", "speed": "Tempo",
"spentTime": "Benötigte Zeit: {time}", "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.", "sshTip": "Diese Funktion befindet sich jetzt in der Experimentierphase.\n\nBitte melde Bugs auf {url} oder mach mit bei der Entwicklung.",

View File

@@ -257,6 +257,7 @@
"shutdown": "Shutdown", "shutdown": "Shutdown",
"size": "Size", "size": "Size",
"snippet": "Snippet", "snippet": "Snippet",
"softWrap": "Soft wrap",
"speed": "Speed", "speed": "Speed",
"spentTime": "Spent time: {time}", "spentTime": "Spent time: {time}",
"sshTip": "This function is now in the experimental stage.\n\nPlease report bugs on {url} or join our development.", "sshTip": "This function is now in the experimental stage.\n\nPlease report bugs on {url} or join our development.",

View File

@@ -257,6 +257,7 @@
"shutdown": "Apagar", "shutdown": "Apagar",
"size": "Tamaño", "size": "Tamaño",
"snippet": "Fragmento de código", "snippet": "Fragmento de código",
"softWrap": "Salto de línea suave",
"speed": "Velocidad", "speed": "Velocidad",
"spentTime": "Tiempo gastado: {time}", "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.", "sshTip": "Esta función está en fase de pruebas.\n\nPor favor, informa los problemas en {url}, o únete a nuestro desarrollo.",

View File

@@ -257,6 +257,7 @@
"shutdown": "Éteindre", "shutdown": "Éteindre",
"size": "Taille", "size": "Taille",
"snippet": "Extrait", "snippet": "Extrait",
"softWrap": "Retour à la ligne doux",
"speed": "Vitesse", "speed": "Vitesse",
"spentTime": "Temps écoulé : {time}", "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.", "sshTip": "Cette fonction est actuellement au stade expérimental.\n\n Veuillez signaler les bogues sur {url} ou rejoignez notre développement.",

View File

@@ -257,6 +257,7 @@
"shutdown": "Matikan", "shutdown": "Matikan",
"size": "Ukuran", "size": "Ukuran",
"snippet": "Snippet", "snippet": "Snippet",
"softWrap": "Pembungkus lembut",
"speed": "Kecepatan", "speed": "Kecepatan",
"spentTime": "Menghabiskan waktu: {time}", "spentTime": "Menghabiskan waktu: {time}",
"sshTip": "Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di {url} atau bergabunglah dengan pengembangan kami.", "sshTip": "Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di {url} atau bergabunglah dengan pengembangan kami.",

View File

@@ -257,6 +257,7 @@
"shutdown": "シャットダウン", "shutdown": "シャットダウン",
"size": "サイズ", "size": "サイズ",
"snippet": "スニペット", "snippet": "スニペット",
"softWrap": "ソフトラップ",
"speed": "速度", "speed": "速度",
"spentTime": "時間を費やしました: {time}", "spentTime": "時間を費やしました: {time}",
"sshTip": "この機能は現在テスト段階にあります。\n\n問題がある場合は、{url}でフィードバックしてください。", "sshTip": "この機能は現在テスト段階にあります。\n\n問題がある場合は、{url}でフィードバックしてください。",

View File

@@ -256,6 +256,7 @@
"shutdown": "Afsluiten", "shutdown": "Afsluiten",
"size": "Grootte", "size": "Grootte",
"snippet": "Fragment", "snippet": "Fragment",
"softWrap": "Zachte wrap",
"speed": "Snelheid", "speed": "Snelheid",
"spentTime": "Gebruikte tijd: {time}", "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.", "sshTip": "Deze functie bevindt zich momenteel in de experimentele fase.\n\nMeld alstublieft bugs op {url} of sluit je aan bij onze ontwikkeling.",

View File

@@ -257,6 +257,7 @@
"shutdown": "Desligar", "shutdown": "Desligar",
"size": "Tamanho", "size": "Tamanho",
"snippet": "Snippet", "snippet": "Snippet",
"softWrap": "Quebra de linha suave",
"speed": "Velocidade", "speed": "Velocidade",
"spentTime": "Tempo gasto: {time}", "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.", "sshTip": "Esta funcionalidade está em fase de teste.\n\nPor favor, reporte problemas em {url} ou junte-se a nós no desenvolvimento.",

View File

@@ -257,6 +257,7 @@
"shutdown": "выключение", "shutdown": "выключение",
"size": "размер", "size": "размер",
"snippet": "фрагмент", "snippet": "фрагмент",
"softWrap": "Мягкий перенос",
"speed": "скорость", "speed": "скорость",
"spentTime": "Затрачено времени: {time}", "spentTime": "Затрачено времени: {time}",
"sshTip": "Эта функция находится в стадии тестирования.\n\nПожалуйста, отправляйте отчеты о проблемах на {url} или присоединяйтесь к нашей разработке.", "sshTip": "Эта функция находится в стадии тестирования.\n\nПожалуйста, отправляйте отчеты о проблемах на {url} или присоединяйтесь к нашей разработке.",

View File

@@ -257,6 +257,7 @@
"shutdown": "关机", "shutdown": "关机",
"size": "大小", "size": "大小",
"snippet": "代码片段", "snippet": "代码片段",
"softWrap": "自动换行",
"speed": "速度", "speed": "速度",
"spentTime": "耗时: {time}", "spentTime": "耗时: {time}",
"sshTip": "该功能目前处于测试阶段。\n\n请在 {url} 反馈问题,或者加入我们开发。", "sshTip": "该功能目前处于测试阶段。\n\n请在 {url} 反馈问题,或者加入我们开发。",

View File

@@ -257,6 +257,7 @@
"shutdown": "关机", "shutdown": "关机",
"size": "大小", "size": "大小",
"snippet": "程式片段", "snippet": "程式片段",
"softWrap": "軟換行",
"speed": "速度", "speed": "速度",
"spentTime": "耗時: {time}", "spentTime": "耗時: {time}",
"sshTip": "該功能目前處於測試階段。\n\n請在 {url} 反饋問題,或者加入我們開發。", "sshTip": "該功能目前處於測試階段。\n\n請在 {url} 反饋問題,或者加入我們開發。",

View File

@@ -171,6 +171,7 @@ class _EditorPageState extends State<EditorPage> {
styles: _codeTheme, styles: _codeTheme,
), ),
child: CodeField( child: CodeField(
wrap: Stores.setting.editorSoftWrap.fetch(),
focusNode: _focusNode, focusNode: _focusNode,
controller: _controller, controller: _controller,
textStyle: _textStyle, textStyle: _textStyle,

View File

@@ -182,6 +182,7 @@ class _SettingPageState extends State<SettingPage> {
Widget _buildEditor() { Widget _buildEditor() {
return Column( return Column(
children: [ children: [
_buildEditorWrap(),
_buildEditorFontSize(), _buildEditorFontSize(),
_buildEditorTheme(), _buildEditorTheme(),
_buildEditorDarkTheme(), _buildEditorDarkTheme(),
@@ -1114,4 +1115,11 @@ class _SettingPageState extends State<SettingPage> {
], ],
); );
} }
Widget _buildEditorWrap() {
return ListTile(
title: Text(l10n.softWrap),
trailing: StoreSwitch(prop: _setting.editorSoftWrap),
);
}
} }

View File

@@ -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/dialog.dart';
import 'package:toolbox/core/extension/context/locale.dart'; import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/route.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/provider/server.dart';
import 'package:toolbox/data/res/provider.dart'; import 'package:toolbox/data/res/provider.dart';
import 'package:toolbox/data/res/ui.dart'; import 'package:toolbox/data/res/ui.dart';
@@ -14,7 +15,7 @@ class SSHTabPage extends StatefulWidget {
const SSHTabPage({super.key}); const SSHTabPage({super.key});
@override @override
_SSHTabPageState createState() => _SSHTabPageState(); State<SSHTabPage> createState() => _SSHTabPageState();
} }
class _SSHTabPageState extends State<SSHTabPage> class _SSHTabPageState extends State<SSHTabPage>
@@ -84,7 +85,6 @@ class _SSHTabPageState extends State<SSHTabPage>
if (confirm != true) { if (confirm != true) {
return; return;
} }
// debugPrint("Removing a tab whose tabId = $e");
_tabIds.remove(e); _tabIds.remove(e);
_refreshTabs(); _refreshTabs();
}, },
@@ -115,30 +115,7 @@ class _SSHTabPageState extends State<SSHTabPage>
title: Text(spi.name), title: Text(spi.name),
subtitle: Text(spi.id, style: UIs.textGrey), subtitle: Text(spi.id, style: UIs.textGrey),
trailing: const Icon(Icons.chevron_right), trailing: const Icon(Icons.chevron_right),
onTap: () { onTap: () => _onTapInitCard(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;
},
), ),
); );
}, },
@@ -156,6 +133,31 @@ class _SSHTabPageState extends State<SSHTabPage>
); );
} }
void _onTapInitCard(ServerPrivateInfo spi) {
final name = () {
if (_tabIds.containsKey(spi.name)) {
return '${spi.name}(${_tabIds.length + 1})';
}
return spi.name;
}();
final key = GlobalKey<State<SSHPage>>(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() { void _refreshTabs() {
_tabController = TabController( _tabController = TabController(
length: _tabIds.length, length: _tabIds.length,