measure_handler.dart 8.3 KB

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