Skip to content

Commit 9557e26

Browse files
committed
fix(tools): ignore non-annotation widget selections
1 parent 01db3eb commit 9557e26

3 files changed

Lines changed: 35 additions & 9 deletions

File tree

.github/workflows/e2e.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
name: E2E Testing on ${{ matrix.os }}
1212
runs-on: ${{ matrix.os }}
1313
env:
14-
DOWNLOAD_TIMEOUT: 60000
14+
DOWNLOAD_TIMEOUT: 90000
1515
VITE_SHOW_SAMPLE_DATA: true
1616
steps:
1717
- uses: actions/checkout@v4

src/components/ProcessTypeSelector.vue

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
v-bind="props"
88
variant="tonal"
99
block
10+
spaced="end"
1011
class="process-type-menu-button"
1112
data-testid="process-type-selector"
13+
:prepend-icon="activeDefinition.icon"
14+
append-icon="mdi-menu-down"
1215
:disabled="isDisabled"
1316
>
14-
<v-icon start>{{ activeDefinition.icon }}</v-icon>
15-
<span>{{ activeDefinition.label }}</span>
16-
<v-spacer />
17-
<v-icon end>mdi-menu-down</v-icon>
17+
<span class="process-type-label">{{ activeDefinition.label }}</span>
1818
</v-btn>
1919
</template>
2020

@@ -68,4 +68,9 @@ const activeDefinition = computed(
6868
justify-content: start;
6969
min-height: 40px;
7070
}
71+
72+
.process-type-label {
73+
overflow: hidden;
74+
text-overflow: ellipsis;
75+
}
7176
</style>

src/components/tools/SelectTool.vue

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import { WIDGET_PRIORITY } from '@kitware/vtk.js/Widgets/Core/AbstractWidget/Con
44
import { useToolSelectionStore } from '@/src/store/tools/toolSelection';
55
import { useToolStore } from '@/src/store/tools';
66
import { Tools } from '@/src/store/tools/types';
7-
import { vtkAnnotationToolWidget } from '@/src/vtk/ToolWidgetUtils/types';
7+
import type {
8+
vtkAnnotationToolWidget,
9+
vtkAnnotationWidgetState,
10+
} from '@/src/vtk/ToolWidgetUtils/types';
811
import { inject } from 'vue';
912
import { VtkViewContext } from '@/src/components/vtk/context';
1013
@@ -16,6 +19,17 @@ const toolStore = useToolStore();
1619
1720
const PLACING_TOOLS = [Tools.Ruler, Tools.Rectangle, Tools.Polygon];
1821
22+
const isAnnotationWidgetState = (
23+
widgetState: unknown
24+
): widgetState is vtkAnnotationWidgetState => {
25+
const candidate = widgetState as Partial<vtkAnnotationWidgetState> | null;
26+
return (
27+
!!candidate &&
28+
typeof candidate.getId === 'function' &&
29+
typeof candidate.getToolType === 'function'
30+
);
31+
};
32+
1933
onVTKEvent(
2034
view.interactor,
2135
'onLeftButtonPress',
@@ -28,9 +42,16 @@ onVTKEvent(
2842
const withModifiers = !!(event.shiftKey || event.controlKey);
2943
const selectedData = view.widgetManager.getSelectedData();
3044
if ('widget' in selectedData) {
31-
// clicked in empty space.
32-
const widget = selectedData.widget as vtkAnnotationToolWidget;
33-
const widgetState = widget.getWidgetState();
45+
const widget =
46+
selectedData.widget as Partial<vtkAnnotationToolWidget> | null;
47+
const widgetState = widget?.getWidgetState?.();
48+
if (!isAnnotationWidgetState(widgetState)) {
49+
if (!withModifiers) {
50+
selectionStore.clearSelection();
51+
}
52+
return;
53+
}
54+
3455
const id = widgetState.getId();
3556
const type = widgetState.getToolType();
3657
// preserve if we've used shift or ctrl

0 commit comments

Comments
 (0)