@@ -2,6 +2,7 @@ import { Manifest, StateFile } from '@/src/io/state-file/schema';
22import { Maybe } from '@/src/types' ;
33import type { AnnotationToolStore } from '@/src/store/tools/useAnnotationTool' ;
44import { defineStore } from 'pinia' ;
5+ import { ref } from 'vue' ;
56import { useCropStore } from './crop' ;
67import { useCrosshairsToolStore } from './crosshairs' ;
78import { usePaintToolStore } from './paint' ;
@@ -10,10 +11,6 @@ import { useRectangleStore } from './rectangles';
1011import { AnnotationToolType , IToolStore , Tools } from './types' ;
1112import { usePolygonStore } from './polygons' ;
1213
13- interface State {
14- currentTool : Tools ;
15- }
16-
1714// TODO move these types out
1815export const AnnotationToolStoreMap : Record <
1916 AnnotationToolType ,
@@ -64,49 +61,68 @@ function teardownTool(tool: Tools) {
6461 }
6562}
6663
67- export const useToolStore = defineStore ( 'tool' , {
68- state : ( ) : State => ( {
69- currentTool : Tools . WindowLevel ,
70- } ) ,
71- actions : {
72- setCurrentTool ( tool : Tools ) {
73- if ( ! setupTool ( tool ) ) {
74- return ;
75- }
76- teardownTool ( this . currentTool ) ;
77- this . currentTool = tool ;
78- } ,
79- serialize ( state : StateFile ) {
80- const { tools } = state . manifest ;
81-
82- Object . values ( ToolStoreMap )
83- . map ( ( useStore ) => useStore ?.( ) )
84- . filter ( ( store ) : store is IToolStore => ! ! store )
85- . forEach ( ( store ) => {
86- store . serialize ?.( state ) ;
87- } ) ;
88-
89- tools . current = this . currentTool ;
90- } ,
91- deserialize (
92- manifest : Manifest ,
93- segmentGroupIDMap : Record < string , string > ,
94- dataIDMap : Record < string , string >
95- ) {
96- const { tools } = manifest ;
97-
98- usePaintToolStore ( ) . deserialize ( manifest , segmentGroupIDMap ) ;
99-
100- Object . values ( ToolStoreMap )
101- // paint store uses segmentGroupIDMap
102- . filter ( ( useStore ) => useStore !== usePaintToolStore )
103- . map ( ( useStore ) => useStore ?.( ) )
104- . filter ( ( store ) : store is IToolStore => ! ! store )
105- . forEach ( ( store ) => {
106- store . deserialize ?.( manifest , dataIDMap ) ;
107- } ) ;
108-
109- this . currentTool = tools . current ;
110- } ,
111- } ,
64+ export const useToolStore = defineStore ( 'tool' , ( ) => {
65+ const currentTool = ref ( Tools . WindowLevel ) ;
66+ const toolBeforeTemporaryCrosshairs = ref < Tools > ( currentTool . value ) ;
67+
68+ function setCurrentTool ( tool : Tools ) {
69+ if ( ! setupTool ( tool ) ) {
70+ return ;
71+ }
72+ teardownTool ( currentTool . value ) ;
73+ currentTool . value = tool ;
74+ }
75+
76+ function activateTemporaryCrosshairs ( ) {
77+ toolBeforeTemporaryCrosshairs . value = currentTool . value ;
78+ setCurrentTool ( Tools . Crosshairs ) ;
79+ useCrosshairsToolStore ( ) . startDragging ( ) ;
80+ }
81+
82+ function deactivateTemporaryCrosshairs ( ) {
83+ setCurrentTool ( toolBeforeTemporaryCrosshairs . value ) ;
84+ }
85+
86+ function serialize ( state : StateFile ) {
87+ const { tools } = state . manifest ;
88+
89+ Object . values ( ToolStoreMap )
90+ . map ( ( useStore ) => useStore ?.( ) )
91+ . filter ( ( store ) : store is IToolStore => ! ! store )
92+ . forEach ( ( store ) => {
93+ store . serialize ?.( state ) ;
94+ } ) ;
95+
96+ tools . current = currentTool . value ;
97+ }
98+
99+ function deserialize (
100+ manifest : Manifest ,
101+ segmentGroupIDMap : Record < string , string > ,
102+ dataIDMap : Record < string , string >
103+ ) {
104+ const { tools } = manifest ;
105+
106+ usePaintToolStore ( ) . deserialize ( manifest , segmentGroupIDMap ) ;
107+
108+ Object . values ( ToolStoreMap )
109+ // paint store uses segmentGroupIDMap
110+ . filter ( ( useStore ) => useStore !== usePaintToolStore )
111+ . map ( ( useStore ) => useStore ?.( ) )
112+ . filter ( ( store ) : store is IToolStore => ! ! store )
113+ . forEach ( ( store ) => {
114+ store . deserialize ?.( manifest , dataIDMap ) ;
115+ } ) ;
116+
117+ currentTool . value = tools . current ;
118+ }
119+
120+ return {
121+ currentTool,
122+ setCurrentTool,
123+ serialize,
124+ deserialize,
125+ activateTemporaryCrosshairs,
126+ deactivateTemporaryCrosshairs,
127+ } ;
112128} ) ;
0 commit comments