import 'package:fis_measure/interfaces/enums/items.dart'; import 'package:fis_measure/interfaces/process/items/item.dart'; import 'package:fis_measure/interfaces/process/items/item_metas.dart'; import 'package:fis_measure/interfaces/process/workspace/point_info.dart'; import 'package:fis_measure/process/primitives/trace.dart'; import 'package:fis_measure/utils/prompt_box.dart'; class URMTrace extends Trace { URMTrace(ItemMeta meta, IMeasureItem? parent) : super(meta, parent); static URMTrace createURMTrace(ItemMeta meta, [IMeasureItem? parent]) { URMTrace trace = URMTrace(meta, parent); // trace.calculator = URMTraceCal(trace, type: meta.name); trace.isClosed = false; return trace; } @override bool onExecuteMouse(PointInfo args) { if (waitingResult) return false; if (state == ItemStates.finished) { if (args.pointType == PointInfoType.mouseDown) { state = ItemStates.waiting; } } if (state == ItemStates.waiting) { if (args.pointType == PointInfoType.mouseDown) { handleMouseDownWhileWaiting(args); } } else if (state == ItemStates.running) { if (args.pointType == PointInfoType.mouseUp) return false; feature?.adopt(args); if (args.pointType == PointInfoType.mouseDown) { handleFinish(); } else { checkAutoSnap(args); } } return true; } bool waitingResult = false; void handleFinish() async { feature!.isActive = false; waitingResult = true; await doCalculateAsync(); doFeatureFinish(); PromptBox.dismiss(); waitingResult = false; } }