import 'dart:core'; import 'package:fis_common/event/event_type.dart'; import 'package:fis_jsonrpc/rpc.dart'; import 'package:fis_measure/interfaces/enums/annotation.dart'; import 'package:fis_measure/interfaces/enums/operate.dart'; /// 当前选中的图像 class CurrImageInfo { /// 图片地址 final String? imageUrl; /// 图像编码 final String? remedicalCode; CurrImageInfo( this.imageUrl, this.remedicalCode, ); } class MeasureModeSelection { /// 应用名称:读取Vid获取应用 final String? applicationName; /// 分类名称:读取Vid获取应用分类名称 final String? categoryName; /// 测量模式集合:读取Vid获取应用的模式集合,返回对应测量数据 final List? measureModes; MeasureModeSelection( this.applicationName, this.categoryName, this.measureModes, ); } class MeasureModeSubmit { /// 版本号 final String? version; /// 应用名称,读取Vid获取应用 final String? applicationName; /// 分类名称:读取Vid获取应用分类名称 final String? categoryName; /// 测量模式 final UserDefinedMeasureModeDTO? workingMode; MeasureModeSubmit( this.version, this.applicationName, this.categoryName, this.workingMode, ); } abstract class IMeasureHandler { /// 测量切换图片事件 late FEventHandler onImageChanged; /// 测量方式选择 late FEventHandler onMeasureModeSelectionChanged; /// 测量方式提交 late FEventHandler onMeasureModeSubmitChanged; /// 测量还是注释tab late FEventHandler onOperateTypeChanged; /// 注释箭头还是标签 late FEventHandler onChangedAnnotationType; /// 拖拽状态发生改变 late FEventHandler onDragStateChanged; /// 鼠标右键取消测量 late FEventHandler onRightClickFinishMeasure; /// 图片加载loadding late FEventHandler onNewImageLoadStatueChanged; /// 通过 remedicalCode 切换图片 late FEventHandler changeImageByRemedicalCode; /// 更新图片列表 late FEventHandler> changeImageList; // late FEventHandler onChangeImageByIndex = // FEventHandler(); late FEventHandler onChangeFullScreenState; late FEventHandler onToolPanelStateChanged; late FEventHandler annotationsLoaded; late final FEventHandler canMeasureDrawingChanged; /// 切换图像传递数据 CurrImageInfo get currSelectedImage; set currSelectedImage(CurrImageInfo value); /// 切换图像测量方式变更数据 MeasureModeSelection get measureModeChanged; set measureModeChanged(MeasureModeSelection value); /// 测量方式变更提交 MeasureModeSubmit get measureModeSubmitChanged; set measureModeSubmitChanged(MeasureModeSubmit value); /// 切换Tab MeasureOperateType get currOperateType; set currOperateType(MeasureOperateType value); /// 切换注释 AnnotationType get changedAnnotationType; set changedAnnotationType(AnnotationType value); /// 切换图片 bool get newImageLoading; set newImageLoading(bool value); /// 全屏状态 bool get fullScreenState; set fullScreenState(bool value); /// 工具面板状态 bool get toolPanelState; set toolPanelState(bool value); /// 测量是否可绘制 bool get canMeasureDrawing; set canMeasureDrawing(bool value); } class MeasureHandler implements IMeasureHandler { CurrImageInfo _currSelectedImage = CurrImageInfo(null, null); MeasureModeSelection _measureModeChanged = MeasureModeSelection(null, null, null); MeasureModeSubmit _measureModeSubmitChanged = MeasureModeSubmit(null, null, null, null); MeasureOperateType _currOperateType = MeasureOperateType.measure; bool _newImageLoading = true; bool _fullScreenState = false; bool _toolPanelState = true; bool _canMeasureDrawing = true; AnnotationType _changedAnnotationType = AnnotationType.label; @override var onImageChanged = FEventHandler(); @override var onMeasureModeSelectionChanged = FEventHandler(); @override var onMeasureModeSubmitChanged = FEventHandler(); @override var onOperateTypeChanged = FEventHandler(); @override var onChangedAnnotationType = FEventHandler(); @override var onDragStateChanged = FEventHandler(); @override var onRightClickFinishMeasure = FEventHandler(); @override FEventHandler onNewImageLoadStatueChanged = FEventHandler(); @override FEventHandler changeImageByRemedicalCode = FEventHandler(); // @override // FEventHandler onChangeImageByIndex = // FEventHandler(); @override FEventHandler> changeImageList = FEventHandler>(); @override FEventHandler onChangeFullScreenState = FEventHandler(); @override FEventHandler onToolPanelStateChanged = FEventHandler(); @override var annotationsLoaded = FEventHandler(); @override FEventHandler canMeasureDrawingChanged = FEventHandler(); @override CurrImageInfo get currSelectedImage => _currSelectedImage; @override MeasureModeSelection get measureModeChanged => _measureModeChanged; @override MeasureModeSubmit get measureModeSubmitChanged => _measureModeSubmitChanged; @override MeasureOperateType get currOperateType => _currOperateType; @override AnnotationType get changedAnnotationType => _changedAnnotationType; @override bool get newImageLoading => _newImageLoading; @override bool get fullScreenState => _fullScreenState; @override set fullScreenState(bool value) { if (value != _fullScreenState) { _fullScreenState = value; _onChangeFullScreenState(); } } @override bool get toolPanelState => _toolPanelState; @override set toolPanelState(bool value) { if (value != _toolPanelState) { _toolPanelState = value; _onToolPanelStateChanged(); } } @override bool get canMeasureDrawing => _canMeasureDrawing; @override set canMeasureDrawing(bool value) { if (value != _canMeasureDrawing) { _canMeasureDrawing = value; canMeasureDrawingChanged.emit(this, _canMeasureDrawing); } } @override set newImageLoading(bool value) { if (value != _newImageLoading) { _newImageLoading = value; _onNewImageLoadStatueChanged(); } } @override set currOperateType(MeasureOperateType value) { if (value != _currOperateType) { _currOperateType = value; _onOperateTypeChanged(); } } @override set changedAnnotationType(AnnotationType value) { if (value != _changedAnnotationType) { _changedAnnotationType = value; _onChangedAnnotation(); } } @override set currSelectedImage(CurrImageInfo value) { if (value != _currSelectedImage) { _currSelectedImage = value; _onImageChanged(); } } @override set measureModeChanged(MeasureModeSelection value) { if (value != _measureModeChanged) { _measureModeChanged = value; _onMeasureModeSelectionChanged(); } } @override set measureModeSubmitChanged(MeasureModeSubmit value) { if (value != _measureModeSubmitChanged) { _measureModeSubmitChanged = value; _onMeasureModeSubmitChanged(); } } void _onImageChanged() { onImageChanged.emit(this, currSelectedImage); } void _onMeasureModeSelectionChanged() { onMeasureModeSelectionChanged.emit(this, measureModeChanged); } void _onMeasureModeSubmitChanged() { onMeasureModeSubmitChanged.emit(this, measureModeSubmitChanged); } void _onOperateTypeChanged() { onOperateTypeChanged.emit(this, currOperateType); } void _onNewImageLoadStatueChanged() { onNewImageLoadStatueChanged.emit(this, newImageLoading); } void _onChangeFullScreenState() { onChangeFullScreenState.emit(this, fullScreenState); } void _onToolPanelStateChanged() { onToolPanelStateChanged.emit(this, toolPanelState); } void _onChangedAnnotation() { onChangedAnnotationType.emit(this, changedAnnotationType); } void onAnnotationsLoaded() { annotationsLoaded.emit(this, null); } }