diff --git a/client/dive-common/components/AnnotationVisibilityMenu.vue b/client/dive-common/components/AnnotationVisibilityMenu.vue new file mode 100644 index 000000000..f4e1a4857 --- /dev/null +++ b/client/dive-common/components/AnnotationVisibilityMenu.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/client/dive-common/components/EditorMenu.vue b/client/dive-common/components/EditorMenu.vue index 748f9db8d..13b74443a 100644 --- a/client/dive-common/components/EditorMenu.vue +++ b/client/dive-common/components/EditorMenu.vue @@ -1,22 +1,34 @@ @@ -222,96 +223,111 @@ export default Vue.extend({ Multi-select in progress. Editing is disabled. Select additional tracks to merge or group. - - {{ modeToolTips[editingDetails][editingMode] }} + + {{ editingTooltip }} Right click on an annotation to edit - + -
{{ button.mousetrap[0].bind }}:
- {{ button.icon }} -
- - - + + + + + +
{{ button.mousetrap[0].bind }}:
+ {{ button.icon }} +
+
+ + {{ button.id }} + +
+
+ + + + + + + + + @@ -330,7 +346,11 @@ export default Vue.extend({ .mode-button{ border: 1px solid grey; } -.tail-slider-width { - width: 240px; +.expand-toggle { + opacity: 0.5; + transition: opacity 0.2s; +} +.expand-toggle:hover { + opacity: 1; } diff --git a/client/dive-common/components/MultiCamToolbar.vue b/client/dive-common/components/MultiCamToolbar.vue new file mode 100644 index 000000000..b3f2a2abf --- /dev/null +++ b/client/dive-common/components/MultiCamToolbar.vue @@ -0,0 +1,490 @@ + + + + + diff --git a/client/dive-common/components/TrackSettingsPanel.vue b/client/dive-common/components/TrackSettingsPanel.vue index 90ed67ed9..71b1ec1b2 100644 --- a/client/dive-common/components/TrackSettingsPanel.vue +++ b/client/dive-common/components/TrackSettingsPanel.vue @@ -32,6 +32,7 @@ export default defineComponent({ prompt: 'Prompt user before deleting a track?', filterTracksByFrame: 'Filter the track list by those with detections in the current frame', autoZoom: 'Automatically zoom to the track when selected', + showMultiCamToolbar: 'Show multi-camera tools in the top toolbar when a track is selected', }); const modes = ref(['Track', 'Detection']); // Add unknown as the default type to the typeList @@ -322,6 +323,45 @@ export default defineComponent({ + +
+ Multi-Camera Settings +
+ + + + + + + + {{ help.showMultiCamToolbar }} + + + diff --git a/client/dive-common/components/Viewer.vue b/client/dive-common/components/Viewer.vue index b05d9bf78..b3da641be 100644 --- a/client/dive-common/components/Viewer.vue +++ b/client/dive-common/components/Viewer.vue @@ -49,6 +49,7 @@ import context from 'dive-common/store/context'; import { MarkChangesPendingFilter } from 'vue-media-annotator/BaseFilterControls'; import GroupSidebarVue from './GroupSidebar.vue'; import MultiCamToolsVue from './MultiCamTools.vue'; +import MultiCamToolbar from './MultiCamToolbar.vue'; import PrimaryAttributeTrackFilter from './PrimaryAttributeTrackFilter.vue'; export interface ImageDataItem { @@ -68,6 +69,7 @@ export default defineComponent({ ConfidenceFilter, UserGuideButton, EditorMenu, + MultiCamToolbar, PrimaryAttributeTrackFilter, }, @@ -1010,6 +1012,12 @@ export default defineComponent({ @delete-annotation="handler.removeAnnotation" /> + !readonlyState && handler.trackAdd() }, { bind: 'r', handler: () => aggregateController.resetZoom() }, { bind: 'esc', handler: () => handler.trackAbort() }, + { bind: 'e', handler: () => multiCamList.length === 1 && selectedTrackId !== null && handler.trackEdit(selectedTrackId) }, ]" class="d-flex flex-column grow" > diff --git a/client/dive-common/store/settings.ts b/client/dive-common/store/settings.ts index 61f390872..adab2e24f 100644 --- a/client/dive-common/store/settings.ts +++ b/client/dive-common/store/settings.ts @@ -44,7 +44,10 @@ interface AnnotationSettings { timelineCountSettings: { totalCount: boolean; defaultView: 'tracks' | 'detections'; - } + }; + multiCamSettings: { + showToolbar: boolean; + }; } const defaultSettings: AnnotationSettings = { @@ -99,7 +102,9 @@ const defaultSettings: AnnotationSettings = { totalCount: true, defaultView: 'tracks', }, - + multiCamSettings: { + showToolbar: true, + }, }; // Utility to safely load from localStorage diff --git a/client/platform/desktop/frontend/components/Settings.vue b/client/platform/desktop/frontend/components/Settings.vue index 7a9ea7721..93ce64c5e 100644 --- a/client/platform/desktop/frontend/components/Settings.vue +++ b/client/platform/desktop/frontend/components/Settings.vue @@ -9,6 +9,7 @@ import { useRequest } from 'dive-common/use'; import { NvidiaSmiReply } from 'platform/desktop/constants'; import { cloneDeep, isEqual } from 'lodash'; +import { clientSettings } from 'dive-common/store/settings'; import { autoDiscover } from '../store/dataset'; import { settings, updateSettings, validateSettings } from '../store/settings'; import { nvidiaSmi } from '../api'; @@ -73,6 +74,7 @@ export default defineComponent({ appversion, arch, autoDiscoverState, + clientSettings, gitHash, platform, settings, @@ -96,7 +98,7 @@ export default defineComponent({ - Settings + Folder Settings @@ -180,6 +182,22 @@ export default defineComponent({ + Annotation Settings + + + + + + + + Platform support Not all checks must pass in order to use this application.