123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import 'package:fis_common/event/event_type.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:flutter/foundation.dart';
- import 'item.dart';
- import 'item_feature.dart';
- abstract class TopMeasureItem<T extends MeasureItemFeature>
- extends MeasureItem<T> implements ITopMeasureItem {
- final List<IMeasureItem> _childItems = [];
- int _childIndex = 0;
- bool get ifAutoFinish => false;
- TopMeasureItem(ItemMeta meta) : super(meta) {
- workingChildChanged = FEventHandler<int>();
- }
- @override
- List<IMeasureItem> get childItems => _childItems;
- @override
- IMeasureItem get workingChild => _childItems[_childIndex];
- /// 子项全部完成
- @protected
- bool get childrenAllDone =>
- _childItems.every((e) => e.measuredFeatures.isNotEmpty);
- @override
- late final FEventHandler<int> workingChildChanged;
- @override
- void switchChild(int index) {
- if (index == _childIndex) return;
- _childIndex = index;
- workingChildChanged.emit(this, index);
- }
- T buildFeature();
- @override
- bool onExecuteMouse(PointInfo args) {
- if (args.pointType == PointInfoType.mouseDown) {
- if (feature == null) {
- feature = buildFeature();
- listenChildrenUpdate();
- }
- if (childrenAllDone) {
- workingChild.clear();
- }
- }
- feature?.hostVisualArea = args.hostVisualArea;
- final result = workingChild.execute(args);
- if (result) {
- doCalculate();
- }
- //TODO:[Gavin] Sometimes Need Auto Finish
- if (ifAutoFinish) {
- if (args.pointType == PointInfoType.mouseDown) {
- if (childrenAllDone) {
- print("此时应该结束测量");
- }
- }
- }
- return result;
- }
- @override
- bool onExecuteTouch(PointInfo args) {
- return workingChild.execute(args);
- }
- @protected
- void nextChild() {
- final count = _childItems.length;
- int nextIdx = -1;
- for (var i = 0; i < count; i++) {
- final child = _childItems[i];
- if (child.measuredFeatures.isEmpty) {
- nextIdx = i;
- break;
- }
- }
- if (nextIdx > -1) {
- switchChild(nextIdx);
- }
- }
- @protected
- void listenChildrenUpdate() {
- for (var item in childItems) {
- item.featureUpdated.addListener((sender, e) {
- _onChildFeatureUpdated();
- });
- }
- }
- void _onChildFeatureUpdated() {
- if (workingChild.measuredFeatures.isNotEmpty) {
- nextChild();
- }
- doFeatureUpdate();
- }
- }
|