Browse Source

update(measure): 接入【设置】中【显示测量注释】【注释字体大小】【测量自动捕捉范围】开关 Review by baka

gavin.chen 2 years ago
parent
commit
963a038c7a

+ 2 - 2
lib/measure_page_test.dart

@@ -45,9 +45,9 @@ class MeasureDataTester {
     return null;
   }
 
-  static Future<MeasureApplicationDTO?> saveUserDefinedMeasureApplicationAsync(
+  static Future<bool> saveUserDefinedMeasureApplicationAsync(
       dynamic args) async {
-    return null;
+    return true;
   }
 
   static Future<bool?> saveImage(

+ 3 - 1
lib/process/items/item_feature.dart

@@ -33,6 +33,8 @@ abstract class MeasureItemFeature implements IMeasureItemFeature {
     ..style = PaintingStyle.stroke;
   Paint get paintLinePan => measureData.paintLinePan;
   Paint get paintPointPan => measureData.paintPointPan;
+  double get annotationFontSize =>
+      measureData.measureSystemSetting.annotationFontSize.toDouble();
 
   MeasureItemFeature(IMeasureItem refItem) {
     _refItem = refItem;
@@ -180,7 +182,7 @@ abstract class MeasureItemFeature implements IMeasureItemFeature {
   @protected
   void drawCustomId(Canvas canvas, Size size, Offset offset, [String? text]) {
     final displayText = text ?? id.toString();
-    final fontSize = 14.0 * refItem.scaleRatio; // TODO: from config
+    final fontSize = annotationFontSize * refItem.scaleRatio;
     final fontOffsetY = 4.0 * refItem.scaleRatio;
     final letterSpacing = 0.0 * refItem.scaleRatio;
     final style = TextStyle(

+ 4 - 1
lib/process/primitives/utils/auto_snap.dart

@@ -2,9 +2,12 @@ import 'package:fis_measure/interfaces/date_types/int_size.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
 import 'package:fis_measure/process/items/item.dart';
 import 'package:fis_measure/process/items/item_feature.dart';
+import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:flutter/services.dart';
+import 'package:get/get.dart';
 
 mixin AutoSnapMixin<T extends MeasureItemFeature> on MeasureItem<T> {
+  final measureData = Get.find<MeasureDataController>();
   bool _isSmartMove = false;
   bool _isAutoSnap = true;
   double _snapThreshold = 10.0;
@@ -26,7 +29,7 @@ mixin AutoSnapMixin<T extends MeasureItemFeature> on MeasureItem<T> {
   }
 
   /// 自动结束阈值 pixel
-  double get snapThreshold => _snapThreshold;
+  double get snapThreshold => measureData.getAutoSnapDistance();
   set snapThreshold(double val) {
     if (val != _snapThreshold) {
       _snapThreshold = val;

+ 15 - 1
lib/process/workspace/measure_data_controller.dart

@@ -39,6 +39,7 @@ abstract class IMeasureDataController {
   late FEventHandler<List<VidUsMode>> applicationModesChanged;
   late FEventHandler<List<ItemMeta>> curItemMetaListChanged;
   late FEventHandler<List<String>> annotationListChanged;
+  late FEventHandler<bool> showItemTransStateChanged;
 
   /// 切换至另一个病人的图像集
   late FEventHandler<Map<String, String>> curMeasureDataChanged;
@@ -176,6 +177,9 @@ class MeasureDataController implements IMeasureDataController {
   @override
   var itemMetaListChanged = FEventHandler<List<ItemMeta>>();
 
+  @override
+  var showItemTransStateChanged = FEventHandler<bool>();
+
   @override
   var itemCurrentImageChanged = FEventHandler<String>();
 
@@ -276,6 +280,16 @@ class MeasureDataController implements IMeasureDataController {
     }
   }
 
+  // 获取自动闭合卡尺线的检测阈值
+  double getAutoSnapDistance() {
+    if (measureSystemSetting.autoSnapDistance == null) return 10.0;
+    try {
+      return double.parse(measureSystemSetting.autoSnapDistance!);
+    } catch (e) {
+      return 10.0;
+    }
+  }
+
   @override
   List<VidUsMode> get applicationModes => _applicationModes;
   @override
@@ -449,7 +463,7 @@ class MeasureDataController implements IMeasureDataController {
   Future<String> Function(String) shareImage;
 
   /// 保存测量项
-  Future<void> Function(MeasureModeSubmit)
+  Future<bool> Function(MeasureModeSubmit)
       saveUserDefinedMeasureApplicationAsync;
 
   /// 保存卡尺样式

+ 0 - 1
lib/view/gesture/touch_gesture.dart

@@ -15,7 +15,6 @@ class _MeasureTouchGesturePanelState extends State<MeasureTouchGesturePanel> {
 
   @override
   void initState() {
-    // TODO: from config
     super.initState();
   }
 

+ 36 - 25
lib/view/measure/measure_config/measure_configuation_page.dart

@@ -73,6 +73,9 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
   /// 测量项控制器
   final measureMetaController = Get.find<MeasureMetaController>();
 
+  /// 之前保存的的测量项
+  List<String> savedMeasureList = [];
+
   /// 选中的测量项
   List<String> chooseMeasureList = [];
   List<ItemMetaGroup> itemMetaListGroup = [];
@@ -112,34 +115,37 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
   }
 
   void submit() async {
-    var measureModeSubmitChanged = MeasureModeSubmit(
-      measureData.measureApplicationVersion,
-      application.applicationName,
-      application.categoryName,
-      UserDefinedMeasureModeDTO(
-        modeName: measureData.currentMode,
-        workingGroups: [
-          UserDefinedMeasureGroupDTO(
-            name: 'General',
-            folders: [
-              UserDefinedMeasureFolderDTO(
-                name: 'General',
-                workingItemNames: chooseMeasureList,
-              ),
-            ],
-          ),
-        ],
-      ),
-    );
-    measureHandler.measureModeSubmitChanged = measureModeSubmitChanged;
-    await measureData.saveUserDefinedMeasureApplicationAsync
-        .call(measureModeSubmitChanged);
-    getName();
-    measureMetaController.setAvailableModes(measureData.currentMode);
+    /// 判断两个数组是否相同
+    if (savedMeasureList.toString() != chooseMeasureList.toString()) {
+      var measureModeSubmitChanged = MeasureModeSubmit(
+        measureData.measureApplicationVersion,
+        application.applicationName,
+        application.categoryName,
+        UserDefinedMeasureModeDTO(
+          modeName: measureData.currentMode,
+          workingGroups: [
+            UserDefinedMeasureGroupDTO(
+              name: 'General',
+              folders: [
+                UserDefinedMeasureFolderDTO(
+                  name: 'General',
+                  workingItemNames: chooseMeasureList,
+                ),
+              ],
+            ),
+          ],
+        ),
+      );
+      measureHandler.measureModeSubmitChanged = measureModeSubmitChanged;
+      await measureData.saveUserDefinedMeasureApplicationAsync
+          .call(measureModeSubmitChanged);
+      getName();
+      measureMetaController.setAvailableModes(measureData.currentMode);
+    }
     saveMeasureSystemSettingAsync();
   }
 
-  // 保存修改结果
+  // 保存修改测量样式
   Future<void> saveMeasureSystemSettingAsync() async {
     measureData.measureSystemSettingChanged
         .emit(this, measureData.measureSystemSetting);
@@ -155,11 +161,15 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
   void initState() {
     super.initState();
     List<String> chooseMeasure = [];
+    if (widget.ifHideConfig) {
+      measureToolsTab = 2;
+    }
     measureMetaController.measureConfig();
     itemMetaListGroup = measureData.itemMetaListGroup;
     chooseMeasure = measureData.getMeasureApplicationList
         .where((element) => !MeasureUnsupportedTerms.items.contains(element))
         .toList();
+    savedMeasureList = chooseMeasure.toSet().toList();
     chooseMeasureList = chooseMeasure.toSet().toList();
   }
 
@@ -183,6 +193,7 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
       isDefault: true,
       onOk: () {
         submit();
+        Get.back();
       },
       onCancel: () {
         chooseMeasureList = measureData.getMeasureApplicationList;

+ 30 - 26
lib/view/measure/measure_config/widgets/measure_configuration_style.dart

@@ -334,17 +334,17 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //保留测量在图像上
-              _PatternItem(
-                title: i18nBook.measure.keepMeasureOnImage.t,
-                item: _PatternItemSwitch(
-                  onChanged: (value) {
-                    setState(() {
-                      measureData.measureSystemSetting.holdMeasureLine = value;
-                    });
-                  },
-                  value: widget.measureSystemSetting.holdMeasureLine,
-                ),
-              ),
+              // _PatternItem(
+              //   title: i18nBook.measure.keepMeasureOnImage.t,
+              //   item: _PatternItemSwitch(
+              //     onChanged: (value) {
+              //       setState(() {
+              //         measureData.measureSystemSetting.holdMeasureLine = value;
+              //       });
+              //     },
+              //     value: widget.measureSystemSetting.holdMeasureLine,
+              //   ),
+              // ),
               //显示深度测量线
               _PatternItem(
                 title: i18nBook.measure.showDepthMeasureLine.t,
@@ -420,26 +420,30 @@ class _PatternBodyState extends FState<PatternBody> {
                 ),
               ),
               //在测量工作表中显示子项结果
-              _PatternItem(
-                title: i18nBook.measure.showSubItemResultInMeasureWorkSheet.t,
-                item: _PatternItemSwitch(
-                  onChanged: (value) {
-                    setState(() {
-                      measureData.measureSystemSetting.showProtocolInWorkSheet =
-                          value;
-                    });
-                  },
-                  value: widget.measureSystemSetting.showProtocolInWorkSheet,
-                ),
-              ),
+              // _PatternItem(
+              //   title: i18nBook.measure.showSubItemResultInMeasureWorkSheet.t,
+              //   item: _PatternItemSwitch(
+              //     onChanged: (value) {
+              //       setState(() {
+              //         measureData.measureSystemSetting.showProtocolInWorkSheet =
+              //             value;
+              //       });
+              //     },
+              //     value: widget.measureSystemSetting.showProtocolInWorkSheet,
+              //   ),
+              // ),
               //显示测量注释 [中文翻译值]
               _PatternItem(
                 title: i18nBook.measure.showMeasureAnnotation.t,
                 item: _PatternItemSwitch(
                   onChanged: (value) {
-                    setState(() {
-                      measureData.measureSystemSetting.showAnnotation = value;
-                    });
+                    if (value !=
+                        measureData.measureSystemSetting.showAnnotation) {
+                      setState(() {
+                        measureData.measureSystemSetting.showAnnotation = value;
+                      });
+                      measureData.showItemTransStateChanged.emit(this, value);
+                    }
                   },
                   value: widget.measureSystemSetting.showAnnotation,
                 ),

+ 21 - 8
lib/view/measure/measure_tool.dart

@@ -188,6 +188,11 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
     });
   }
 
+  /// 是否显示测量项翻译事件变化
+  void _onShowItemTransStateChanged(_, e) {
+    setState(() {});
+  }
+
   /// 鼠标右键结束测量事件【即切换到空测量项】,此时缓存被结束的测量项,如果再次收到右击事件,恢复被结束的测量项
   void _onRightClickFinishMeasure(_, e) {
     if (activeItemIndex == -1) {
@@ -216,6 +221,8 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
   void initState() {
     measureData.curItemMetaListChanged.addListener(_onCurItemMetaListChanged);
     measureData.itemMetaListChanged.addListener(_onItemMetaListChanged);
+    measureData.showItemTransStateChanged
+        .addListener(_onShowItemTransStateChanged);
     measureHandler.onRightClickFinishMeasure
         .addListener(_onRightClickFinishMeasure);
     WidgetsBinding.instance.addPostFrameCallback((call) {
@@ -232,6 +239,8 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
     measureData.curItemMetaListChanged
         .removeListener(_onCurItemMetaListChanged);
     measureData.itemMetaListChanged.removeListener(_onItemMetaListChanged);
+    measureData.showItemTransStateChanged
+        .removeListener(_onShowItemTransStateChanged);
     measureHandler.onRightClickFinishMeasure
         .removeListener(_onRightClickFinishMeasure);
     final item = application.activeMeasureItem;
@@ -286,9 +295,11 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
   // 构建测量项按钮
   FWidget _buildItemButton(int itemIndex) {
     final itemMeta = measureData.curItemMetaList[itemIndex];
-    final ifShowCN = i18nBook.isCurrentChinese && // 中文环境下显示中英文,否则只显示英文
-        measureLanguage.t('measure', itemMeta.description) !=
-            itemMeta.description;
+    final transValue = measureLanguage.t('measure', itemMeta.description);
+    // 中文环境下显示中英文,否则只显示英文
+    final ifShowCN = i18nBook.isCurrentChinese &&
+        transValue != itemMeta.description &&
+        measureData.measureSystemSetting.showAnnotation;
     final isActived = itemIndex == activeItemIndex;
     return FElevatedButton(
       name: itemMeta.name,
@@ -299,7 +310,7 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
         children: [
           if (ifShowCN)
             FText(
-              measureLanguage.t('measure', itemMeta.description),
+              transValue,
               maxLines: 1,
               overflow: TextOverflow.ellipsis,
               style: TextStyle(
@@ -331,9 +342,11 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
   // 构建测量项标签【用于组合测量项顶部】
   FWidget _buildItemTitle(int itemIndex) {
     final itemMeta = measureData.curItemMetaList[itemIndex];
-    final ifShowCN = i18nBook.isCurrentChinese && // 中文环境下显示中英文,否则只显示英文
-        measureLanguage.t('measure', itemMeta.description) !=
-            itemMeta.description;
+    final transValue = measureLanguage.t('measure', itemMeta.description);
+    // 中文环境下显示中英文,否则只显示英文
+    final ifShowCN = i18nBook.isCurrentChinese &&
+        transValue != itemMeta.description &&
+        measureData.measureSystemSetting.showAnnotation;
     return FContainer(
       decoration: const BoxDecoration(
         border: Border(
@@ -349,7 +362,7 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
           children: [
             if (ifShowCN)
               FText(
-                measureLanguage.t('measure', itemMeta.description),
+                transValue,
                 maxLines: 1,
                 overflow: TextOverflow.ellipsis,
                 style: TextStyle(