measure_handler.dart 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. import 'dart:core';
  2. import 'package:fis_common/event/event_type.dart';
  3. import 'package:fis_jsonrpc/rpc.dart';
  4. import 'package:fis_measure/interfaces/enums/annotation.dart';
  5. import 'package:fis_measure/interfaces/enums/operate.dart';
  6. import 'package:fis_measure/view/measure/operate_type_change_button.dart';
  7. import 'package:fis_measure/view/measure/measure_panel_head.dart';
  8. class ChangeImageInfo {
  9. /// 图片地址
  10. final String? imageUrl;
  11. /// 图像编码
  12. final String? remedicalCode;
  13. ChangeImageInfo(
  14. this.imageUrl,
  15. this.remedicalCode,
  16. );
  17. }
  18. class MeasureModeSelection {
  19. /// 应用名称:读取Vid获取应用
  20. final String? applicationName;
  21. /// 分类名称:读取Vid获取应用分类名称
  22. final String? categoryName;
  23. /// 测量模式集合:读取Vid获取应用的模式集合,返回对应测量数据
  24. final List<String>? measureModes;
  25. MeasureModeSelection(
  26. this.applicationName,
  27. this.categoryName,
  28. this.measureModes,
  29. );
  30. }
  31. class MeasureModeSubmit {
  32. /// 版本号
  33. final String? version;
  34. /// 应用名称,读取Vid获取应用
  35. final String? applicationName;
  36. /// 分类名称:读取Vid获取应用分类名称
  37. final String? categoryName;
  38. /// 测量模式
  39. final UserDefinedMeasureModeDTO? workingMode;
  40. MeasureModeSubmit(
  41. this.version,
  42. this.applicationName,
  43. this.categoryName,
  44. this.workingMode,
  45. );
  46. }
  47. abstract class IMeasureHandler {
  48. /// 测量切换图片事件
  49. late FEventHandler<ChangeImageInfo> onImageChanged;
  50. /// 测量方式选择
  51. late FEventHandler<MeasureModeSelection> onMeasureModeSelectionChanged;
  52. /// 测量方式提交
  53. late FEventHandler<MeasureModeSubmit> onMeasureModeSubmitChanged;
  54. /// 测量还是注释tab
  55. late FEventHandler<MeasureOperateType> onOperateTypeChanged;
  56. /// 注释箭头还是标签
  57. late FEventHandler<AnnotationType> onChangedAnnotationType;
  58. /// 拖拽状态发生改变
  59. late FEventHandler<bool> onDragStateChanged;
  60. /// 鼠标右键取消测量
  61. late FEventHandler<bool> onRightClickFinishMeasure;
  62. /// 图片加载loadding
  63. late FEventHandler<bool> onChangeImageLoaded;
  64. /// 通过 remedicalCode 切换图片
  65. late FEventHandler<String> changeImageByRemedicalCode;
  66. /// 更新图片列表
  67. late FEventHandler<List<RemedicalInfoDTO>> changeImageList;
  68. late FEventHandler<bool> onChangeFullScreenState;
  69. late FEventHandler<bool> onToolPanelStateChanged;
  70. late FEventHandler<void> annotationsLoaded;
  71. late final FEventHandler<bool> canMeasureDrawingChanged;
  72. /// 切换图像传递数据
  73. ChangeImageInfo get imageChanged;
  74. set imageChanged(ChangeImageInfo value);
  75. /// 切换图像测量方式变更数据
  76. MeasureModeSelection get measureModeChanged;
  77. set measureModeChanged(MeasureModeSelection value);
  78. /// 测量方式变更提交
  79. MeasureModeSubmit get measureModeSubmitChanged;
  80. set measureModeSubmitChanged(MeasureModeSubmit value);
  81. /// 切换Tab
  82. MeasureOperateType get currOperateType;
  83. set currOperateType(MeasureOperateType value);
  84. /// 切换注释
  85. AnnotationType get changedAnnotationType;
  86. set changedAnnotationType(AnnotationType value);
  87. /// 切换图片
  88. bool get changeImageLoaded;
  89. set changeImageLoaded(bool value);
  90. /// 全屏状态
  91. bool get fullScreenState;
  92. set fullScreenState(bool value);
  93. /// 工具面板状态
  94. bool get toolPanelState;
  95. set toolPanelState(bool value);
  96. /// 测量是否可绘制
  97. bool get canMeasureDrawing;
  98. set canMeasureDrawing(bool value);
  99. }
  100. class MeasureHandler implements IMeasureHandler {
  101. ChangeImageInfo _imageChanged = ChangeImageInfo(null, null);
  102. MeasureModeSelection _measureModeChanged =
  103. MeasureModeSelection(null, null, null);
  104. MeasureModeSubmit _measureModeSubmitChanged =
  105. MeasureModeSubmit(null, null, null, null);
  106. MeasureOperateType _currOperateType = MeasureOperateType.measure;
  107. bool _changeImageLoaded = true;
  108. bool _fullScreenState = false;
  109. bool _toolPanelState = true;
  110. bool _canMeasureDrawing = true;
  111. AnnotationType _changedAnnotationType = AnnotationType.label;
  112. @override
  113. var onImageChanged = FEventHandler<ChangeImageInfo>();
  114. @override
  115. var onMeasureModeSelectionChanged = FEventHandler<MeasureModeSelection>();
  116. @override
  117. var onMeasureModeSubmitChanged = FEventHandler<MeasureModeSubmit>();
  118. @override
  119. var onOperateTypeChanged = FEventHandler<MeasureOperateType>();
  120. @override
  121. var onChangedAnnotationType = FEventHandler<AnnotationType>();
  122. @override
  123. var onDragStateChanged = FEventHandler<bool>();
  124. @override
  125. var onRightClickFinishMeasure = FEventHandler<bool>();
  126. @override
  127. FEventHandler<bool> onChangeImageLoaded = FEventHandler<bool>();
  128. @override
  129. FEventHandler<String> changeImageByRemedicalCode = FEventHandler<String>();
  130. @override
  131. FEventHandler<List<RemedicalInfoDTO>> changeImageList =
  132. FEventHandler<List<RemedicalInfoDTO>>();
  133. @override
  134. FEventHandler<bool> onChangeFullScreenState = FEventHandler<bool>();
  135. @override
  136. FEventHandler<bool> onToolPanelStateChanged = FEventHandler<bool>();
  137. @override
  138. var annotationsLoaded = FEventHandler<void>();
  139. @override
  140. FEventHandler<bool> canMeasureDrawingChanged = FEventHandler<bool>();
  141. @override
  142. ChangeImageInfo get imageChanged => _imageChanged;
  143. @override
  144. MeasureModeSelection get measureModeChanged => _measureModeChanged;
  145. @override
  146. MeasureModeSubmit get measureModeSubmitChanged => _measureModeSubmitChanged;
  147. @override
  148. MeasureOperateType get currOperateType => _currOperateType;
  149. @override
  150. AnnotationType get changedAnnotationType => _changedAnnotationType;
  151. @override
  152. bool get changeImageLoaded => _changeImageLoaded;
  153. @override
  154. bool get fullScreenState => _fullScreenState;
  155. @override
  156. set fullScreenState(bool value) {
  157. if (value != _fullScreenState) {
  158. _fullScreenState = value;
  159. _onChangeFullScreenState();
  160. }
  161. }
  162. @override
  163. bool get toolPanelState => _toolPanelState;
  164. @override
  165. set toolPanelState(bool value) {
  166. if (value != _toolPanelState) {
  167. _toolPanelState = value;
  168. _onToolPanelStateChanged();
  169. }
  170. }
  171. @override
  172. bool get canMeasureDrawing => _canMeasureDrawing;
  173. @override
  174. set canMeasureDrawing(bool value) {
  175. if (value != _canMeasureDrawing) {
  176. _canMeasureDrawing = value;
  177. canMeasureDrawingChanged.emit(this, _canMeasureDrawing);
  178. }
  179. }
  180. @override
  181. set changeImageLoaded(bool value) {
  182. if (value != _changeImageLoaded) {
  183. _changeImageLoaded = value;
  184. _onChangeImageLoaded();
  185. }
  186. }
  187. @override
  188. set currOperateType(MeasureOperateType value) {
  189. if (value != _currOperateType) {
  190. _currOperateType = value;
  191. _onOperateTypeChanged();
  192. }
  193. }
  194. @override
  195. set changedAnnotationType(AnnotationType value) {
  196. if (value != _changedAnnotationType) {
  197. _changedAnnotationType = value;
  198. _onChangedAnnotation();
  199. }
  200. }
  201. @override
  202. set imageChanged(ChangeImageInfo value) {
  203. if (value != _imageChanged) {
  204. _imageChanged = value;
  205. _onImageChanged();
  206. }
  207. }
  208. @override
  209. set measureModeChanged(MeasureModeSelection value) {
  210. if (value != _measureModeChanged) {
  211. _measureModeChanged = value;
  212. _onMeasureModeSelectionChanged();
  213. }
  214. }
  215. @override
  216. set measureModeSubmitChanged(MeasureModeSubmit value) {
  217. if (value != _measureModeSubmitChanged) {
  218. _measureModeSubmitChanged = value;
  219. _onMeasureModeSubmitChanged();
  220. }
  221. }
  222. void _onImageChanged() {
  223. onImageChanged.emit(this, imageChanged);
  224. }
  225. void _onMeasureModeSelectionChanged() {
  226. onMeasureModeSelectionChanged.emit(this, measureModeChanged);
  227. }
  228. void _onMeasureModeSubmitChanged() {
  229. onMeasureModeSubmitChanged.emit(this, measureModeSubmitChanged);
  230. }
  231. void _onOperateTypeChanged() {
  232. onOperateTypeChanged.emit(this, currOperateType);
  233. }
  234. void _onChangeImageLoaded() {
  235. onChangeImageLoaded.emit(this, changeImageLoaded);
  236. }
  237. void _onChangeFullScreenState() {
  238. onChangeFullScreenState.emit(this, fullScreenState);
  239. }
  240. void _onToolPanelStateChanged() {
  241. onToolPanelStateChanged.emit(this, toolPanelState);
  242. }
  243. void _onChangedAnnotation() {
  244. onChangedAnnotationType.emit(this, changedAnnotationType);
  245. }
  246. void onAnnotationsLoaded() {
  247. annotationsLoaded.emit(this, null);
  248. }
  249. }