@@ -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,72 @@ 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 ( currentTool . value === tool ) {
70+ return ;
71+ }
72+ if ( ! setupTool ( tool ) ) {
73+ return ;
74+ }
75+ teardownTool ( currentTool . value ) ;
76+ currentTool . value = tool ;
77+ }
78+
79+ function activateTemporaryCrosshairs ( ) {
80+ toolBeforeTemporaryCrosshairs . value = currentTool . value ;
81+ setCurrentTool ( Tools . Crosshairs ) ;
82+ useCrosshairsToolStore ( ) . setDragging ( true ) ;
83+ }
84+
85+ function deactivateTemporaryCrosshairs ( ) {
86+ useCrosshairsToolStore ( ) . setDragging ( false ) ;
87+ setCurrentTool ( toolBeforeTemporaryCrosshairs . value ) ;
88+ }
89+
90+ function serialize ( state : StateFile ) {
91+ const { tools } = state . manifest ;
92+
93+ Object . values ( ToolStoreMap )
94+ . map ( ( useStore ) => useStore ?.( ) )
95+ . filter ( ( store ) : store is IToolStore => ! ! store )
96+ . forEach ( ( store ) => {
97+ store . serialize ?.( state ) ;
98+ } ) ;
99+
100+ tools . current = currentTool . value ;
101+ }
102+
103+ function deserialize (
104+ manifest : Manifest ,
105+ segmentGroupIDMap : Record < string , string > ,
106+ dataIDMap : Record < string , string >
107+ ) {
108+ const { tools } = manifest ;
109+
110+ usePaintToolStore ( ) . deserialize ( manifest , segmentGroupIDMap ) ;
111+
112+ Object . values ( ToolStoreMap )
113+ // paint store uses segmentGroupIDMap
114+ . filter ( ( useStore ) => useStore !== usePaintToolStore )
115+ . map ( ( useStore ) => useStore ?.( ) )
116+ . filter ( ( store ) : store is IToolStore => ! ! store )
117+ . forEach ( ( store ) => {
118+ store . deserialize ?.( manifest , dataIDMap ) ;
119+ } ) ;
120+
121+ currentTool . value = tools . current ;
122+ }
123+
124+ return {
125+ currentTool,
126+ setCurrentTool,
127+ serialize,
128+ deserialize,
129+ activateTemporaryCrosshairs,
130+ deactivateTemporaryCrosshairs,
131+ } ;
112132} ) ;
0 commit comments