|  |  |  | @ -13,72 +13,6 @@ import 'package:flutter/material.dart'; | 
			
		
	
		
			
				
					|  |  |  |  | class GestureEditor extends StatelessWidget { | 
			
		
	
		
			
				
					|  |  |  |  |   const GestureEditor({Key? key}) : super(key: key); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   List<DDataRow> _buildDataRow(List<GestureProp>? gestures, BuildContext context) => (gestures ?? []).map((gesture) { | 
			
		
	
		
			
				
					|  |  |  |  |         bool selected = context.watch<GesturePropProvider>() == gesture; | 
			
		
	
		
			
				
					|  |  |  |  |         return DDataRow( | 
			
		
	
		
			
				
					|  |  |  |  |           onSelectChanged: (selected) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (selected == true) | 
			
		
	
		
			
				
					|  |  |  |  |               context.read<GesturePropProvider>().setProps( | 
			
		
	
		
			
				
					|  |  |  |  |                     gesture: gesture.gesture, | 
			
		
	
		
			
				
					|  |  |  |  |                     direction: gesture.direction, | 
			
		
	
		
			
				
					|  |  |  |  |                     fingers: gesture.fingers, | 
			
		
	
		
			
				
					|  |  |  |  |                     type: gesture.type, | 
			
		
	
		
			
				
					|  |  |  |  |                     command: gesture.command, | 
			
		
	
		
			
				
					|  |  |  |  |                     remark: gesture.remark, | 
			
		
	
		
			
				
					|  |  |  |  |                   ); | 
			
		
	
		
			
				
					|  |  |  |  |           }, | 
			
		
	
		
			
				
					|  |  |  |  |           selected: selected, | 
			
		
	
		
			
				
					|  |  |  |  |           cells: [ | 
			
		
	
		
			
				
					|  |  |  |  |             Center( | 
			
		
	
		
			
				
					|  |  |  |  |               child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |                 '${LocaleKeys.gesture_editor_gestures}.${H.getGestureName(gesture.gesture)}', | 
			
		
	
		
			
				
					|  |  |  |  |                 style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |                   color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |                 ), | 
			
		
	
		
			
				
					|  |  |  |  |               ).tr(), | 
			
		
	
		
			
				
					|  |  |  |  |             ), | 
			
		
	
		
			
				
					|  |  |  |  |             Center( | 
			
		
	
		
			
				
					|  |  |  |  |                 child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |               '${LocaleKeys.gesture_editor_directions}.${H.getGestureDirectionName(gesture.direction)}', | 
			
		
	
		
			
				
					|  |  |  |  |               style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |                 color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |               ), | 
			
		
	
		
			
				
					|  |  |  |  |             ).tr()), | 
			
		
	
		
			
				
					|  |  |  |  |             Center( | 
			
		
	
		
			
				
					|  |  |  |  |               child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |                 '${gesture.fingers}', | 
			
		
	
		
			
				
					|  |  |  |  |                 style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |                   color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |                 ), | 
			
		
	
		
			
				
					|  |  |  |  |               ), | 
			
		
	
		
			
				
					|  |  |  |  |             ), | 
			
		
	
		
			
				
					|  |  |  |  |             Center( | 
			
		
	
		
			
				
					|  |  |  |  |                 child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |               '${LocaleKeys.gesture_editor_types}.${H.getGestureTypeName(gesture.type)}', | 
			
		
	
		
			
				
					|  |  |  |  |               style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |                 color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |               ), | 
			
		
	
		
			
				
					|  |  |  |  |             ).tr()), | 
			
		
	
		
			
				
					|  |  |  |  |             Text( | 
			
		
	
		
			
				
					|  |  |  |  |               gesture.command ?? '', | 
			
		
	
		
			
				
					|  |  |  |  |               style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |                 color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |               ), | 
			
		
	
		
			
				
					|  |  |  |  |             ), | 
			
		
	
		
			
				
					|  |  |  |  |             Text( | 
			
		
	
		
			
				
					|  |  |  |  |               gesture.remark ?? '', | 
			
		
	
		
			
				
					|  |  |  |  |               style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |                 color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |               ), | 
			
		
	
		
			
				
					|  |  |  |  |             ), | 
			
		
	
		
			
				
					|  |  |  |  |           ] | 
			
		
	
		
			
				
					|  |  |  |  |               .map( | 
			
		
	
		
			
				
					|  |  |  |  |                 (ele) => DDataCell(ele), | 
			
		
	
		
			
				
					|  |  |  |  |               ) | 
			
		
	
		
			
				
					|  |  |  |  |               .toList(), | 
			
		
	
		
			
				
					|  |  |  |  |         ); | 
			
		
	
		
			
				
					|  |  |  |  |       }).toList(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   @override | 
			
		
	
		
			
				
					|  |  |  |  |   Widget build(BuildContext context) { | 
			
		
	
		
			
				
					|  |  |  |  |     var layoutProvider = context.watch<ContentLayoutProvider>(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -131,6 +65,10 @@ class GestureEditor extends StatelessWidget { | 
			
		
	
		
			
				
					|  |  |  |  |                 ), | 
			
		
	
		
			
				
					|  |  |  |  |                 Container(height: 10), | 
			
		
	
		
			
				
					|  |  |  |  |                 Expanded( | 
			
		
	
		
			
				
					|  |  |  |  |                   child: GestureDetector( | 
			
		
	
		
			
				
					|  |  |  |  |                     onTap: () { | 
			
		
	
		
			
				
					|  |  |  |  |                       context.read<GesturePropProvider>().copyFrom(GestureProp.empty()); | 
			
		
	
		
			
				
					|  |  |  |  |                     }, | 
			
		
	
		
			
				
					|  |  |  |  |                     child: Container( | 
			
		
	
		
			
				
					|  |  |  |  |                       decoration: BoxDecoration( | 
			
		
	
		
			
				
					|  |  |  |  |                         borderRadius: BorderRadius.circular(defaultBorderRadius), | 
			
		
	
	
		
			
				
					|  |  |  | @ -173,7 +111,7 @@ class GestureEditor extends StatelessWidget { | 
			
		
	
		
			
				
					|  |  |  |  |                                   DDataColumn(label: Text(LocaleKeys.gesture_editor_command.tr())), | 
			
		
	
		
			
				
					|  |  |  |  |                                   DDataColumn(label: Text(LocaleKeys.gesture_editor_remark.tr())), | 
			
		
	
		
			
				
					|  |  |  |  |                                 ], | 
			
		
	
		
			
				
					|  |  |  |  |                               rows: _buildDataRow(schemeProvider.gestures, context), | 
			
		
	
		
			
				
					|  |  |  |  |                                 rows: _buildDataRows(schemeProvider.gestures, context), | 
			
		
	
		
			
				
					|  |  |  |  |                               ), | 
			
		
	
		
			
				
					|  |  |  |  |                             ), | 
			
		
	
		
			
				
					|  |  |  |  |                           ), | 
			
		
	
	
		
			
				
					|  |  |  | @ -181,6 +119,7 @@ class GestureEditor extends StatelessWidget { | 
			
		
	
		
			
				
					|  |  |  |  |                       }), | 
			
		
	
		
			
				
					|  |  |  |  |                     ), | 
			
		
	
		
			
				
					|  |  |  |  |                   ), | 
			
		
	
		
			
				
					|  |  |  |  |                 ), | 
			
		
	
		
			
				
					|  |  |  |  |                 Container(height: 10), | 
			
		
	
		
			
				
					|  |  |  |  |                 Container( | 
			
		
	
		
			
				
					|  |  |  |  |                   height: 300, | 
			
		
	
	
		
			
				
					|  |  |  | @ -200,3 +139,92 @@ class GestureEditor extends StatelessWidget { | 
			
		
	
		
			
				
					|  |  |  |  |     ); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | List<DDataRow> _buildDataRows(List<GestureProp>? gestures, BuildContext context) => (gestures ?? []).map((gesture) { | 
			
		
	
		
			
				
					|  |  |  |  |       var gesturePropProvider = context.watch<GesturePropProvider>(); | 
			
		
	
		
			
				
					|  |  |  |  |       bool editing = gesturePropProvider == gesture && gesturePropProvider.editMode == true; | 
			
		
	
		
			
				
					|  |  |  |  |       bool selected = gesturePropProvider == gesture && !editing; | 
			
		
	
		
			
				
					|  |  |  |  |       return DDataRow( | 
			
		
	
		
			
				
					|  |  |  |  |         onSelectChanged: (selected) { | 
			
		
	
		
			
				
					|  |  |  |  |           if (selected == true) | 
			
		
	
		
			
				
					|  |  |  |  |             context.read<GesturePropProvider>().setProps( | 
			
		
	
		
			
				
					|  |  |  |  |                   gesture: gesture.gesture, | 
			
		
	
		
			
				
					|  |  |  |  |                   direction: gesture.direction, | 
			
		
	
		
			
				
					|  |  |  |  |                   fingers: gesture.fingers, | 
			
		
	
		
			
				
					|  |  |  |  |                   type: gesture.type, | 
			
		
	
		
			
				
					|  |  |  |  |                   command: gesture.command, | 
			
		
	
		
			
				
					|  |  |  |  |                   remark: gesture.remark, | 
			
		
	
		
			
				
					|  |  |  |  |                   editMode: false, | 
			
		
	
		
			
				
					|  |  |  |  |                 ); | 
			
		
	
		
			
				
					|  |  |  |  |           else if (selected == false) { | 
			
		
	
		
			
				
					|  |  |  |  |             var provider = context.read<GesturePropProvider>(); | 
			
		
	
		
			
				
					|  |  |  |  |             provider.onEditEnd = () { | 
			
		
	
		
			
				
					|  |  |  |  |               /// todo: resort rows && check where changed | 
			
		
	
		
			
				
					|  |  |  |  |             }; | 
			
		
	
		
			
				
					|  |  |  |  |             provider.setProps( | 
			
		
	
		
			
				
					|  |  |  |  |               editMode: true, | 
			
		
	
		
			
				
					|  |  |  |  |             ); | 
			
		
	
		
			
				
					|  |  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |  |         selected: selected, | 
			
		
	
		
			
				
					|  |  |  |  |         cells: editing ? _buildRowCellsEditing(gesture) : _buildRowCellsNormal(selected, gesture), | 
			
		
	
		
			
				
					|  |  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |  |     }).toList(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | List<DDataCell> _buildRowCellsEditing(GestureProp gesture) => [ | 
			
		
	
		
			
				
					|  |  |  |  |       Text('1'), | 
			
		
	
		
			
				
					|  |  |  |  |       Text('2'), | 
			
		
	
		
			
				
					|  |  |  |  |       Text('3'), | 
			
		
	
		
			
				
					|  |  |  |  |       Text('4'), | 
			
		
	
		
			
				
					|  |  |  |  |       TextField(controller: TextEditingController(text: gesture.command)), | 
			
		
	
		
			
				
					|  |  |  |  |       TextField(controller: TextEditingController(text: gesture.remark)), | 
			
		
	
		
			
				
					|  |  |  |  |     ].map((e) => DDataCell(e)).toList(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | List<DDataCell> _buildRowCellsNormal(bool selected, GestureProp gesture) => [ | 
			
		
	
		
			
				
					|  |  |  |  |       Center( | 
			
		
	
		
			
				
					|  |  |  |  |         child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |           '${LocaleKeys.gesture_editor_gestures}.${H.getGestureName(gesture.gesture)}', | 
			
		
	
		
			
				
					|  |  |  |  |           style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |             color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |           ), | 
			
		
	
		
			
				
					|  |  |  |  |         ).tr(), | 
			
		
	
		
			
				
					|  |  |  |  |       ), | 
			
		
	
		
			
				
					|  |  |  |  |       Center( | 
			
		
	
		
			
				
					|  |  |  |  |           child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |         '${LocaleKeys.gesture_editor_directions}.${H.getGestureDirectionName(gesture.direction)}', | 
			
		
	
		
			
				
					|  |  |  |  |         style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |           color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |         ), | 
			
		
	
		
			
				
					|  |  |  |  |       ).tr()), | 
			
		
	
		
			
				
					|  |  |  |  |       Center( | 
			
		
	
		
			
				
					|  |  |  |  |         child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |           '${gesture.fingers}', | 
			
		
	
		
			
				
					|  |  |  |  |           style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |             color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |           ), | 
			
		
	
		
			
				
					|  |  |  |  |         ), | 
			
		
	
		
			
				
					|  |  |  |  |       ), | 
			
		
	
		
			
				
					|  |  |  |  |       Center( | 
			
		
	
		
			
				
					|  |  |  |  |           child: Text( | 
			
		
	
		
			
				
					|  |  |  |  |         '${LocaleKeys.gesture_editor_types}.${H.getGestureTypeName(gesture.type)}', | 
			
		
	
		
			
				
					|  |  |  |  |         style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |           color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |         ), | 
			
		
	
		
			
				
					|  |  |  |  |       ).tr()), | 
			
		
	
		
			
				
					|  |  |  |  |       Text( | 
			
		
	
		
			
				
					|  |  |  |  |         gesture.command ?? '', | 
			
		
	
		
			
				
					|  |  |  |  |         style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |           color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |         ), | 
			
		
	
		
			
				
					|  |  |  |  |       ), | 
			
		
	
		
			
				
					|  |  |  |  |       Text( | 
			
		
	
		
			
				
					|  |  |  |  |         gesture.remark ?? '', | 
			
		
	
		
			
				
					|  |  |  |  |         style: TextStyle( | 
			
		
	
		
			
				
					|  |  |  |  |           color: selected ? Colors.white : null, | 
			
		
	
		
			
				
					|  |  |  |  |         ), | 
			
		
	
		
			
				
					|  |  |  |  |       ), | 
			
		
	
		
			
				
					|  |  |  |  |     ] | 
			
		
	
		
			
				
					|  |  |  |  |         .map( | 
			
		
	
		
			
				
					|  |  |  |  |           (ele) => DDataCell(ele), | 
			
		
	
		
			
				
					|  |  |  |  |         ) | 
			
		
	
		
			
				
					|  |  |  |  |         .toList(); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |