diff --git a/app/lib/models/settings.dart b/app/lib/models/settings.dart index 27a264d..844b0a4 100644 --- a/app/lib/models/settings.dart +++ b/app/lib/models/settings.dart @@ -1,7 +1,15 @@ import 'package:dde_gesture_manager/builder/provider_annotation.dart'; +import 'package:flutter/material.dart'; + +export 'package:flutter/material.dart' show Color; @ProviderModel() class Settings { @ProviderModelProp() bool? isDarkMode; + + @ProviderModelProp() + Color? activeColor; + + Color get currentActiveColor => activeColor ?? const Color(0xff0069cc); } diff --git a/app/lib/pages/gesture_editor.dart b/app/lib/pages/gesture_editor.dart index c94826d..11545c5 100644 --- a/app/lib/pages/gesture_editor.dart +++ b/app/lib/pages/gesture_editor.dart @@ -3,6 +3,7 @@ import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/scheme.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart'; +import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:dde_gesture_manager/widgets/dde_data_table.dart'; @@ -12,40 +13,71 @@ import 'package:flutter/material.dart'; class GestureEditor extends StatelessWidget { const GestureEditor({Key? key}) : super(key: key); - List _buildDataRow(List? gestures, BuildContext context) => (gestures ?? []) - .map((gesture) => DDataRow( - onSelectChanged: (selected) { - if (selected == true) - context.read().setProps( - gesture: gesture.gesture, - direction: gesture.direction, - fingers: gesture.fingers, - type: gesture.type, - command: gesture.command, - remark: gesture.remark, - ); - }, - selected: context.watch() == gesture, - cells: [ - Center( - child: Text('${LocaleKeys.gesture_editor_gestures}.${H.getGestureName(gesture.gesture)}').tr(), + List _buildDataRow(List? gestures, BuildContext context) => (gestures ?? []).map((gesture) { + bool selected = context.watch() == gesture; + return DDataRow( + onSelectChanged: (selected) { + if (selected == true) + context.read().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, ), - Center( - child: Text('${LocaleKeys.gesture_editor_directions}.${H.getGestureDirectionName(gesture.direction)}') - .tr()), - Center( - child: Text('${gesture.fingers}'), + ).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, ), - Center(child: Text('${LocaleKeys.gesture_editor_types}.${H.getGestureTypeName(gesture.type)}').tr()), - Text(gesture.command ?? ''), - Text(gesture.remark ?? ''), - ] - .map( - (ele) => DDataCell(ele), - ) - .toList(), - )) - .toList(); + ).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) { @@ -129,7 +161,8 @@ class GestureEditor extends StatelessWidget { ), dataRowColor: MaterialStateProperty.resolveWith((Set states) { if (states.contains(MaterialState.hovered)) return context.t.dialogBackgroundColor; - if (states.contains(MaterialState.selected)) return Colors.blueAccent; + if (states.contains(MaterialState.selected)) + return context.read().currentActiveColor; return null; }), columns: [ diff --git a/app/lib/pages/local_manager.dart b/app/lib/pages/local_manager.dart index 8baf13c..191301e 100644 --- a/app/lib/pages/local_manager.dart +++ b/app/lib/pages/local_manager.dart @@ -3,6 +3,7 @@ import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/local_schemes_provider.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart'; +import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:flutter/animation.dart'; import 'package:flutter/cupertino.dart'; @@ -35,7 +36,7 @@ class _LocalManagerState extends State { Color _getItemBackgroundColor(int index) { Color _color = index % 2 == 0 ? context.t.scaffoldBackgroundColor : context.t.backgroundColor; if (index == _hoveringIndex) _color = context.t.scaffoldBackgroundColor; - if (index == _selectedIndex) _color = Colors.blueAccent; + if (index == _selectedIndex) _color = context.read().currentActiveColor; return _color; } @@ -157,6 +158,64 @@ class _LocalManagerState extends State { ), ], ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: ListView.builder( + controller: _scrollController, + itemBuilder: (context, index) => GestureDetector( + onDoubleTap: () { + context.read().copyFrom(localSchemes[index].scheme); + setState(() { + _selectedIndex = index; + }); + }, + onTap: () { + setState(() { + _selectedIndex = index; + }); + }, + child: MouseRegion( + cursor: SystemMouseCursors.click, + onEnter: (_) { + setState(() { + _hoveringIndex = index; + }); + }, + child: Container( + color: _getItemBackgroundColor(index), + child: Padding( + padding: const EdgeInsets.only(right: 12.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + localSchemes[index].scheme.name ?? '', + style: TextStyle( + color: index == _selectedIndex ? Colors.white : null, + ), + ), + Text( + '456', + style: TextStyle( + color: index == _selectedIndex ? Colors.white : null, + ), + ), + ], + ), + ), + ), + ), + ), + itemCount: localSchemes.length, + ), + ), + Container( + height: 150, + color: Colors.black, + ), + ], ), ), ], diff --git a/app/lib/utils/helper.dart b/app/lib/utils/helper.dart index c71ba0c..2e274fc 100644 --- a/app/lib/utils/helper.dart +++ b/app/lib/utils/helper.dart @@ -96,7 +96,16 @@ class H { 'shortcut': GestureType.shortcut, 'commandline': GestureType.commandline, }[typeName] ?? - GestureType.built_in; + GestureType.built_in; + + static Color? parseQtActiveColor(String? inp) { + if (inp == null) return null; + var list = inp.split(','); + if (list.length != 4) return null; + var rgba = list.map((e) => int.parse(e) ~/ 257).toList(); + rgba.sout(); + return Color.fromARGB(rgba[3], rgba[0], rgba[1], rgba[2]); + } } class PreferredPanelsStatus { diff --git a/app/lib/utils/init_linux.dart b/app/lib/utils/init_linux.dart index ca8faa7..3544dfd 100644 --- a/app/lib/utils/init_linux.dart +++ b/app/lib/utils/init_linux.dart @@ -18,8 +18,11 @@ Future initEvents(BuildContext context) async { } else { var xsettings = GSettings('com.deepin.xsettings'); String? themeName; + Color? activeColor; try { themeName = (await xsettings.get('theme-name')).toString(); + var _activeColor = (await xsettings.get('qt-active-color')); + activeColor = H.parseQtActiveColor(_activeColor.toNative()); } catch (e) { print(e); context.read().setProps(isDarkMode: false); @@ -27,10 +30,14 @@ Future initEvents(BuildContext context) async { if (themeName != null) { context.read().setProps(isDarkMode: themeName.contains('dark')); + context.read().setProps(activeColor: activeColor); xsettings.keysChanged.listen((event) { xsettings.get('theme-name').then((value) { context.read().setProps(isDarkMode: value.toString().contains('dark')); }); + xsettings.get('qt-active-color').then((value) { + context.read().setProps(activeColor: H.parseQtActiveColor(value.toNative())); + }); }); } }