1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 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;
- 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();
- }
- 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();
- }
- }
|