item.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import 'package:fis_common/event/event_type.dart';
  2. import 'package:fis_measure/interfaces/enums/items.dart';
  3. import 'package:fis_measure/interfaces/process/calculators/calculator.dart';
  4. import 'package:fis_measure/interfaces/process/items/item.dart';
  5. import 'package:fis_measure/interfaces/process/items/item_feature.dart';
  6. import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
  7. import 'package:flutter/foundation.dart';
  8. import 'item_feature.dart';
  9. abstract class MeasureItem<T extends MeasureItemFeature> extends IMeasureItem {
  10. late final ItemMeta _meta;
  11. late final IMeasureItem? _parent;
  12. ItemStates _state = ItemStates.waiting;
  13. ICalculator? _calculator;
  14. T? _feature;
  15. final List<IMeasureItemFeature> _measuredFeatures = [];
  16. MeasureItem(ItemMeta meta, [IMeasureItem? parent]) {
  17. _parent = parent;
  18. _meta = meta;
  19. }
  20. @override
  21. String get briefAnnotation => meta.getItem("BriefAnnotation");
  22. @override
  23. String get description => meta.getItem("Description");
  24. @override
  25. T? get feature => _feature;
  26. @protected
  27. set feature(T? value) {
  28. if (value != _feature) {
  29. _feature = value;
  30. }
  31. }
  32. @override
  33. String get workingFormular => meta.getItem("WorkingFormular");
  34. @override
  35. ICalculator? get calculator => _calculator;
  36. @protected
  37. set calculator(ICalculator? value) {
  38. if (value != _calculator) {
  39. _calculator = value;
  40. }
  41. }
  42. @override
  43. IMeasureItem? get parent => _parent;
  44. @override
  45. ItemMeta get meta => _meta;
  46. @override
  47. ItemStates get state => _state;
  48. @protected
  49. set state(ItemStates value) {
  50. if (value != _state) {
  51. _state = value;
  52. }
  53. }
  54. @override
  55. late final featureUpdated = FEventHandler<IMeasureItemFeature?>();
  56. @override
  57. bool execute(PointInfo args) {
  58. bool result = false;
  59. if (state == ItemStates.waiting ||
  60. state == ItemStates.running ||
  61. state == ItemStates.finished) {
  62. switch (args.pointType) {
  63. case PointInfoType.mouseUp:
  64. case PointInfoType.mouseDown:
  65. case PointInfoType.mouseMove:
  66. result = onExecuteMouse(args);
  67. break;
  68. case PointInfoType.touchUp:
  69. case PointInfoType.touchDown:
  70. case PointInfoType.touchMove:
  71. result = onExecuteTouch(args);
  72. break;
  73. }
  74. }
  75. if (result) {
  76. /// 通知刷新
  77. doFeatureUpdate();
  78. }
  79. return result;
  80. }
  81. @override
  82. void clear() {
  83. feature = null;
  84. if (calculator != null) {
  85. calculator!.finishOnce();
  86. calculator!.outputs.clear();
  87. }
  88. measuredFeatures.clear();
  89. }
  90. @protected
  91. void doFeatureUpdate() {
  92. featureUpdated.emit(this, feature);
  93. }
  94. @protected
  95. void doFeatureFinish() {
  96. if (feature != null) {
  97. feature!.isActive = false;
  98. measuredFeatures.add(feature!);
  99. calculator?.finishOnce();
  100. }
  101. feature = null;
  102. state = ItemStates.finished;
  103. }
  104. @protected
  105. void doCalculate() {
  106. calculator?.calculate();
  107. // print(calculator?.output?.description);
  108. }
  109. @protected
  110. bool onExecuteMouse(PointInfo args);
  111. @protected
  112. bool onExecuteTouch(PointInfo args);
  113. @override
  114. List<IMeasureItemFeature> get measuredFeatures => _measuredFeatures;
  115. }