From 05790e25671147b180bdc73b6036891244deeeff Mon Sep 17 00:00:00 2001 From: debuggerx Date: Fri, 12 Nov 2021 19:40:22 +0800 Subject: [PATCH] feat: copy and paste gesture prop logic. --- app/lib/pages/gesture_editor.dart | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/lib/pages/gesture_editor.dart b/app/lib/pages/gesture_editor.dart index af06d58..80abcaa 100644 --- a/app/lib/pages/gesture_editor.dart +++ b/app/lib/pages/gesture_editor.dart @@ -14,6 +14,7 @@ import 'package:dde_gesture_manager/widgets/table_cell_shortcut_listener.dart'; import 'package:dde_gesture_manager/widgets/table_cell_text_field.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:uuid/uuid.dart'; const double _headingRowHeight = 56; const double _scrollBarWidth = 14; @@ -186,10 +187,41 @@ class GestureEditor extends StatelessWidget { ), DButton.duplicate( enabled: gesturePropProvider != GestureProp.empty() && !gesturePropProvider.editMode!, + onTap: () { + var schemeProvider = context.read(); + context.read().copyFrom( + schemeProvider.gestures!.firstWhere((element) => element.id == gesturePropProvider.id)); + + /// todo: give some info to UI. + }, ), DButton.paste( enabled: copiedGesturePropProvider != CopiedGesturePropProvider.empty() && - !gesturePropProvider.editMode!, + !gesturePropProvider.editMode! && + !schemeTree.fullFiled, + onTap: () { + var schemeTree = context.read().buildSchemeTree(); + late GestureProp newGestureProp; + if (schemeTree.nodes + .firstWhere((e) => e.fingers == copiedGesturePropProvider.fingers) + .nodes + .firstWhere((e) => e.type == copiedGesturePropProvider.gesture) + .nodes + .firstWhere((e) => e.direction == copiedGesturePropProvider.direction) + .available) { + newGestureProp = GestureProp.empty()..copyFrom(copiedGesturePropProvider); + } else { + newGestureProp = H.getNextAvailableGestureProp(schemeProvider.buildSchemeTree())!; + newGestureProp.type = copiedGesturePropProvider.type; + newGestureProp.command = copiedGesturePropProvider.command; + newGestureProp.remark = copiedGesturePropProvider.remark; + } + newGestureProp.id = Uuid().v1(); + context.read().setProps(gestures: [ + ...?schemeProvider.gestures, + newGestureProp, + ]); + }, ), ] .map((e) => Padding(