feat: editor almost done.
This commit is contained in:
@@ -57,7 +57,8 @@ class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryLinux> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void remove(String path) {
|
void remove(String path) {
|
||||||
File(path).delete();
|
var file = File(path);
|
||||||
|
if (file.existsSync()) file.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ class Scheme {
|
|||||||
'uploaded': uploaded,
|
'uploaded': uploaded,
|
||||||
'name': name,
|
'name': name,
|
||||||
'desc': description,
|
'desc': description,
|
||||||
'gestures': gestures,
|
'gestures': gestures?.map((e) => e.toJson()).toList(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -508,7 +508,7 @@ List<DDataCell> _buildRowCellsEditing(BuildContext context) {
|
|||||||
_buildCommandCellsEditing(context),
|
_buildCommandCellsEditing(context),
|
||||||
TableCellTextField(
|
TableCellTextField(
|
||||||
initText: gesture.remark,
|
initText: gesture.remark,
|
||||||
hint: 'pls input cmd',
|
hint: LocaleKeys.gesture_editor_hints_remark.tr(),
|
||||||
onComplete: (value) => context.read<GesturePropProvider>().setProps(
|
onComplete: (value) => context.read<GesturePropProvider>().setProps(
|
||||||
remark: value,
|
remark: value,
|
||||||
editMode: true,
|
editMode: true,
|
||||||
@@ -523,7 +523,7 @@ Widget _buildCommandCellsEditing(BuildContext context) {
|
|||||||
case GestureType.commandline:
|
case GestureType.commandline:
|
||||||
return TableCellTextField(
|
return TableCellTextField(
|
||||||
initText: gesture.command,
|
initText: gesture.command,
|
||||||
hint: 'pls input cmd',
|
hint: LocaleKeys.gesture_editor_hints_command.tr(),
|
||||||
onComplete: (value) => context.read<GesturePropProvider>().setProps(
|
onComplete: (value) => context.read<GesturePropProvider>().setProps(
|
||||||
command: value,
|
command: value,
|
||||||
editMode: true,
|
editMode: true,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class LocalManager extends StatefulWidget {
|
|||||||
|
|
||||||
class _LocalManagerState extends State<LocalManager> {
|
class _LocalManagerState extends State<LocalManager> {
|
||||||
late ScrollController _scrollController;
|
late ScrollController _scrollController;
|
||||||
String? _hoveringItem;
|
String? _hoveringItemPath;
|
||||||
late String _selectedItemPath;
|
late String _selectedItemPath;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -51,7 +51,7 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
|
|
||||||
Color _getItemBackgroundColor(int index, String itemPath) {
|
Color _getItemBackgroundColor(int index, String itemPath) {
|
||||||
Color _color = index % 2 == 0 ? context.t.scaffoldBackgroundColor : context.t.backgroundColor;
|
Color _color = index % 2 == 0 ? context.t.scaffoldBackgroundColor : context.t.backgroundColor;
|
||||||
if (itemPath == _hoveringItem) _color = context.t.dialogBackgroundColor;
|
if (itemPath == _hoveringItemPath) _color = context.t.dialogBackgroundColor;
|
||||||
if (itemPath == _selectedItemPath) _color = context.read<SettingsProvider>().currentActiveColor;
|
if (itemPath == _selectedItemPath) _color = context.read<SettingsProvider>().currentActiveColor;
|
||||||
return _color;
|
return _color;
|
||||||
}
|
}
|
||||||
@@ -144,7 +144,7 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
cursor: SystemMouseCursors.click,
|
cursor: SystemMouseCursors.click,
|
||||||
onEnter: (_) {
|
onEnter: (_) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_hoveringItem = localSchemes[index].path;
|
_hoveringItemPath = localSchemes[index].path;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
@@ -196,8 +196,13 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
onTap: () async {
|
onTap: () async {
|
||||||
var localSchemesProvider = context.read<LocalSchemesProvider>();
|
var localSchemesProvider = context.read<LocalSchemesProvider>();
|
||||||
var newSchemes = [...?localSchemesProvider.schemes];
|
var newSchemes = [...?localSchemesProvider.schemes];
|
||||||
newSchemes.add(await localSchemesProvider.create());
|
var newEntry = await localSchemesProvider.create();
|
||||||
|
newSchemes.add(newEntry);
|
||||||
localSchemesProvider.setProps(schemes: newSchemes..sort());
|
localSchemesProvider.setProps(schemes: newSchemes..sort());
|
||||||
|
setState(() {
|
||||||
|
_selectedItemPath = newEntry.path;
|
||||||
|
});
|
||||||
|
_handleItemClick(context, newEntry);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
DButton.delete(
|
DButton.delete(
|
||||||
@@ -209,12 +214,33 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
newSchemes.removeAt(index);
|
newSchemes.removeAt(index);
|
||||||
localSchemesProvider.setProps(schemes: newSchemes);
|
localSchemesProvider.setProps(schemes: newSchemes);
|
||||||
localSchemesProvider.remove(_selectedItemPath);
|
localSchemesProvider.remove(_selectedItemPath);
|
||||||
|
var newSelectedItem = newSchemes[(index - 1).clamp(1, newSchemes.length)];
|
||||||
setState(() {
|
setState(() {
|
||||||
_selectedItemPath = newSchemes[(index - 1).clamp(1, newSchemes.length)].path;
|
_selectedItemPath = newSelectedItem.path;
|
||||||
});
|
});
|
||||||
|
_handleItemClick(context, newSelectedItem);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
DButton.duplicate(
|
||||||
|
enabled: _selectedItemPath.notNull,
|
||||||
|
onTap: () async {
|
||||||
|
var localSchemesProvider = context.read<LocalSchemesProvider>();
|
||||||
|
var newSchemes = [...?localSchemesProvider.schemes];
|
||||||
|
var index = newSchemes.indexWhere((element) => element.path == _selectedItemPath);
|
||||||
|
var newEntry = await localSchemesProvider.create();
|
||||||
|
newEntry.scheme = Scheme.parse(newSchemes[index].scheme.toJson());
|
||||||
|
newEntry.scheme.id = Uuid().v1();
|
||||||
|
newEntry.scheme.name = '${newEntry.scheme.name} (${LocaleKeys.str_copy.tr()})';
|
||||||
|
newEntry.scheme.fromMarket = false;
|
||||||
|
newEntry.scheme.uploaded = false;
|
||||||
|
newSchemes.add(newEntry);
|
||||||
|
localSchemesProvider.setProps(schemes: newSchemes..sort());
|
||||||
|
setState(() {
|
||||||
|
_selectedItemPath = newEntry.path;
|
||||||
|
});
|
||||||
|
_handleItemClick(context, newEntry);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
DButton.duplicate(enabled: _selectedItemPath.notNull),
|
|
||||||
DButton.apply(
|
DButton.apply(
|
||||||
enabled: true,
|
enabled: true,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import 'package:dde_gesture_manager/constants/constants.dart';
|
|||||||
import 'package:dde_gesture_manager/extensions.dart';
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
import 'package:dde_gesture_manager/models/settings.provider.dart';
|
import 'package:dde_gesture_manager/models/settings.provider.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
|
|
||||||
class DTextField extends StatefulWidget {
|
class DTextField extends StatefulWidget {
|
||||||
final String? initText;
|
final String? initText;
|
||||||
@@ -52,6 +51,10 @@ class _DTextFieldState extends State<DTextField> {
|
|||||||
void didUpdateWidget(covariant DTextField oldWidget) {
|
void didUpdateWidget(covariant DTextField oldWidget) {
|
||||||
if (oldWidget.initText != widget.initText) {
|
if (oldWidget.initText != widget.initText) {
|
||||||
_controller.text = widget.initText ?? '';
|
_controller.text = widget.initText ?? '';
|
||||||
|
if (widget.initText == LocaleKeys.str_new_scheme.tr() ||
|
||||||
|
(widget.initText ?? '').contains('(${LocaleKeys.str_copy.tr()})')) {
|
||||||
|
_focusNode.requestFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
super.didUpdateWidget(oldWidget);
|
super.didUpdateWidget(oldWidget);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -38,14 +38,14 @@ dependencies:
|
|||||||
uuid: ^3.0.5
|
uuid: ^3.0.5
|
||||||
adaptive_scrollbar: ^2.1.0
|
adaptive_scrollbar: ^2.1.0
|
||||||
flutter_platform_alert: ^0.2.1
|
flutter_platform_alert: ^0.2.1
|
||||||
|
cached_network_image: ^3.2.0
|
||||||
|
url_launcher: ^6.0.17
|
||||||
markdown_editor_ot:
|
markdown_editor_ot:
|
||||||
path: 3rd_party/markdown_editor_ot
|
path: 3rd_party/markdown_editor_ot
|
||||||
cherry_toast:
|
cherry_toast:
|
||||||
path: 3rd_party/cherry_toast
|
path: 3rd_party/cherry_toast
|
||||||
xdg_directories_web:
|
xdg_directories_web:
|
||||||
path: 3rd_party/xdg_directories_web
|
path: 3rd_party/xdg_directories_web
|
||||||
cached_network_image: ^3.2.0
|
|
||||||
url_launcher: ^6.0.17
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
@@ -59,6 +59,10 @@
|
|||||||
"info": {
|
"info": {
|
||||||
"name": "Scheme Name",
|
"name": "Scheme Name",
|
||||||
"description": "Description"
|
"description": "Description"
|
||||||
|
},
|
||||||
|
"hints": {
|
||||||
|
"command": "Please enter the command you want to execute",
|
||||||
|
"remark": "Please enter a remark information"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"operation": {
|
"operation": {
|
||||||
@@ -70,7 +74,8 @@
|
|||||||
},
|
},
|
||||||
"str": {
|
"str": {
|
||||||
"null": "Null",
|
"null": "Null",
|
||||||
"new_scheme": "New gesture scheme"
|
"new_scheme": "New gesture scheme",
|
||||||
|
"copy": "copy"
|
||||||
},
|
},
|
||||||
"built_in_commands": {
|
"built_in_commands": {
|
||||||
"ShowWorkspace": "ShowWorkspace",
|
"ShowWorkspace": "ShowWorkspace",
|
||||||
|
|||||||
@@ -59,6 +59,10 @@
|
|||||||
"info": {
|
"info": {
|
||||||
"name": "方案名称",
|
"name": "方案名称",
|
||||||
"description": "方案描述"
|
"description": "方案描述"
|
||||||
|
},
|
||||||
|
"hints": {
|
||||||
|
"command": "请输入要执行的命令",
|
||||||
|
"remark": "请输入备注信息"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"operation": {
|
"operation": {
|
||||||
@@ -70,7 +74,8 @@
|
|||||||
},
|
},
|
||||||
"str": {
|
"str": {
|
||||||
"null": "无",
|
"null": "无",
|
||||||
"new_scheme": "新建手势方案"
|
"new_scheme": "新建手势方案",
|
||||||
|
"copy": "副本"
|
||||||
},
|
},
|
||||||
"built_in_commands": {
|
"built_in_commands": {
|
||||||
"ShowWorkspace": "显示工作区",
|
"ShowWorkspace": "显示工作区",
|
||||||
|
|||||||
Reference in New Issue
Block a user