feat: editor almost done.

pull/5/head
DebuggerX 3 years ago
parent 09a9275705
commit 8face6f724

@ -49,15 +49,16 @@ class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryLinux> {
Future<LocalSchemeEntry> create() async { Future<LocalSchemeEntry> create() async {
var _supportDirectory = await getApplicationSupportDirectory(); var _supportDirectory = await getApplicationSupportDirectory();
return LocalSchemeEntryLinux( return LocalSchemeEntryLinux(
path: join(_supportDirectory.path, 'schemes', '${Uuid().v1()}.json'), path: join(_supportDirectory.path, 'schemes', '${Uuid().v1()}.json'),
scheme: Scheme.create(), scheme: Scheme.create(),
lastModifyTime: DateTime.now(), lastModifyTime: DateTime.now(),
); );
} }
@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(() {
_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(() { setState(() {
_selectedItemPath = newSchemes[(index - 1).clamp(1, newSchemes.length)].path; _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);
} }

@ -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": "显示工作区",

Loading…
Cancel
Save