@vcmap/ui 6.2.0-rc.1 → 6.2.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/build.js +52 -7
- package/config/dev.config.json +28 -0
- package/config/pano.config.json +420 -0
- package/config/projects.config.json +5 -0
- package/dist/assets/cesium/Workers/{chunk-P6TRGU3S.js → chunk-2PFJ45KC.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-7ZZ5LMZY.js → chunk-35ALNMG5.js} +15 -15
- package/dist/assets/cesium/Workers/{chunk-7YIOHQWH.js → chunk-35EJBV7X.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-EJVGYGLF.js → chunk-3E3OH65K.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-JBSKHTNX.js → chunk-4FHUY275.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-Z2QP3CXW.js → chunk-565T3GIE.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-IZGUQO6Q.js → chunk-5LGDCKCZ.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-3IFRSGEY.js → chunk-6JXJYBWN.js} +9 -9
- package/dist/assets/cesium/Workers/{chunk-WGDFYAGC.js → chunk-6RAEC3AW.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-44QAAS4P.js → chunk-6Z67VIOY.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-NGZJIN5Z.js → chunk-ADDGROZ6.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-GBT7MJ6X.js → chunk-ASYGMBRG.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-C4WPMOKT.js → chunk-BABDQOWA.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-IBRIWOCM.js → chunk-BQHHGIFB.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-LLAF3CPH.js → chunk-C33B4KHN.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-JXVLNVXC.js → chunk-CMCR2ZK4.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-3HQMMUPU.js → chunk-EGGJIATZ.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-RJM36CNY.js → chunk-EWS5LXAB.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-OPP2SKMA.js → chunk-FDXPBTSX.js} +12 -12
- package/dist/assets/cesium/Workers/{chunk-QN6TBED4.js → chunk-FIFQP4YX.js} +11 -11
- package/dist/assets/cesium/Workers/{chunk-JISPSEF3.js → chunk-HOGDZ2EB.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-2PTKXHJB.js → chunk-I4NB77NH.js} +10 -10
- package/dist/assets/cesium/Workers/{chunk-QQOZO7KO.js → chunk-JX4A2BCF.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-XIUSRWL6.js → chunk-K6PDUSH6.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-KHZNBFOH.js → chunk-KFHZFU5O.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-U5HSOKPQ.js → chunk-KYGXRFA6.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-56EDBCGT.js → chunk-LNWNAP2C.js} +10 -10
- package/dist/assets/cesium/Workers/{chunk-YCDZX5LS.js → chunk-LWN2B3KW.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-TI3TRKIC.js → chunk-LXLABO2L.js} +10 -10
- package/dist/assets/cesium/Workers/{chunk-C3EQ27WF.js → chunk-MB6B2UUL.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-57H6I3SV.js → chunk-MZSRINXK.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-ZVUUPJEM.js → chunk-NBI3GZSK.js} +17 -17
- package/dist/assets/cesium/Workers/{chunk-O72GZTSE.js → chunk-NUAXNUP5.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-M24KHENR.js → chunk-PNZR4RLL.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-HJMNR3GC.js → chunk-Q4K22DSJ.js} +11 -11
- package/dist/assets/cesium/Workers/{chunk-2LOWCAMW.js → chunk-Q4OS4EFN.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-TK5IIG2F.js → chunk-QLIMO7TQ.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-EDLRS3AW.js → chunk-RQ4F6YFU.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-JSQJDZI4.js → chunk-SB67D3JL.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-RTJKHZWU.js → chunk-SS6WRJ5J.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-L5GODJAR.js → chunk-TC4NTWIJ.js} +14 -14
- package/dist/assets/cesium/Workers/{chunk-IZJ42N4W.js → chunk-TKNA6WSZ.js} +17 -17
- package/dist/assets/cesium/Workers/{chunk-HP5XLODI.js → chunk-VQYEP77L.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-YSIJTJ7N.js → chunk-WKS5H3VW.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-XWOUPGUF.js → chunk-WPGX7DEA.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-6SQMLVGV.js → chunk-X3EPFVG3.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-NDDI2LWR.js → chunk-XH7MSR3A.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-FFLMY4TE.js → chunk-YDEBBUNQ.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-YK3QIKY7.js → chunk-YSVI7YNN.js} +9 -9
- package/dist/assets/cesium/Workers/{chunk-BVKITG4N.js → chunk-YVAS5WPH.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-X7IQYYHF.js → chunk-Z4QVAZM6.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-LJ2JQHJT.js → chunk-ZXOK77EW.js} +7 -7
- package/dist/assets/cesium/Workers/combineGeometry.js +22 -22
- package/dist/assets/cesium/Workers/createBoxGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +14 -14
- package/dist/assets/cesium/Workers/createCircleGeometry.js +24 -24
- package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +31 -31
- package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
- package/dist/assets/cesium/Workers/createCorridorGeometry.js +27 -27
- package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +26 -26
- package/dist/assets/cesium/Workers/createCylinderGeometry.js +18 -18
- package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createEllipseGeometry.js +24 -24
- package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createFrustumGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createGeometry.js +22 -22
- package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +20 -20
- package/dist/assets/cesium/Workers/createPlaneGeometry.js +14 -14
- package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +13 -13
- package/dist/assets/cesium/Workers/createPolygonGeometry.js +30 -30
- package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +28 -28
- package/dist/assets/cesium/Workers/createPolylineGeometry.js +23 -23
- package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +29 -29
- package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
- package/dist/assets/cesium/Workers/createRectangleGeometry.js +25 -25
- package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +18 -18
- package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +21 -21
- package/dist/assets/cesium/Workers/createSphereGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +3 -3
- package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +13 -13
- package/dist/assets/cesium/Workers/createVectorTileGeometries.js +22 -22
- package/dist/assets/cesium/Workers/createVectorTilePoints.js +12 -12
- package/dist/assets/cesium/Workers/createVectorTilePolygons.js +20 -20
- package/dist/assets/cesium/Workers/createVectorTilePolylines.js +13 -13
- package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
- package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +20 -20
- package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
- package/dist/assets/cesium/Workers/createWallGeometry.js +22 -22
- package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +21 -21
- package/dist/assets/cesium/Workers/decodeDraco.js +11 -11
- package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/dist/assets/cesium/Workers/decodeI3S.js +10 -10
- package/dist/assets/cesium/Workers/transcodeKTX2.js +7 -7
- package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
- package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +20 -20
- package/dist/assets/{cesium-ac6c193a.js → cesium-8dd00805.js} +44609 -44606
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/core-6b5c0363.js +34173 -0
- package/dist/assets/core-workers/panoramaImageWorker.js +1 -0
- package/dist/assets/core-workers/panoramaImageWorker.js-0ce7d2f3.js +34 -0
- package/dist/assets/core.js +1 -1
- package/dist/assets/ol.js +1 -1
- package/dist/assets/start.js +3 -1
- package/dist/assets/ui-aadb7707.css +1 -0
- package/dist/assets/{ui-4f308e45.js → ui-aadb7707.js} +7917 -7606
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +1 -1
- package/dist/assets/{vuetify-99195777.js → vuetify-533fb61b.js} +1 -1
- package/dist/assets/vuetify.js +1 -1
- package/index.d.ts +8 -0
- package/index.js +4 -0
- package/package.json +4 -4
- package/plugins/@vcmap-show-case/panorama-inspector/package.json +10 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaDebugInfo.vue +86 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaDebugTools.vue +259 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaInspector.vue +31 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/api.js +161 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/index.js +57 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/showClickInteraction.js +20 -0
- package/src/actions/actionHelper.js +138 -26
- package/src/application/VcsApp.vue +11 -0
- package/src/application/VcsApp.vue.d.ts +4 -0
- package/src/application/VcsContainer.vue.d.ts +4 -0
- package/src/application/VcsNavbar.vue +2 -1
- package/src/callback/activateMapCallback.d.ts +30 -0
- package/src/callback/activateMapCallback.js +63 -0
- package/src/callback/activateOverviewMapCallback.d.ts +7 -0
- package/src/callback/activateOverviewMapCallback.js +26 -0
- package/src/callback/deactivateOverviewMapCallback.d.ts +7 -0
- package/src/callback/deactivateOverviewMapCallback.js +20 -0
- package/src/components/lists/VcsGroupedList.vue +10 -2
- package/src/components/lists/VcsTreeNode.vue +3 -0
- package/src/components/plugins/AbstractWorkspaceItemCreator.vue +104 -0
- package/src/components/plugins/AbstractWorkspaceItemCreator.vue.d.ts +82 -0
- package/src/components/section/VcsExpansionPanel.vue +13 -3
- package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +1 -1
- package/src/contentTree/LayerSwap.vue +15 -6
- package/src/featureInfo/featureInfo.js +6 -25
- package/src/featureInfo/iframeWmsFeatureInfoView.d.ts +10 -0
- package/src/featureInfo/iframeWmsFeatureInfoView.js +42 -0
- package/src/i18n/de.d.ts +4 -0
- package/src/i18n/de.js +3 -0
- package/src/i18n/en.d.ts +4 -0
- package/src/i18n/en.js +3 -0
- package/src/legend/VcsLegend.vue +5 -1
- package/src/navigation/MapNavigation.vue +60 -18
- package/src/navigation/MapNavigation.vue.d.ts +1 -0
- package/src/navigation/TiltSlider.vue +10 -2
- package/src/navigation/TiltSlider.vue.d.ts +20 -0
- package/src/navigation/VcsCompass.vue +3 -1
- package/src/navigation/overviewMap.d.ts +5 -0
- package/src/navigation/overviewMap.js +17 -0
- package/src/search/ResultsComponent.vue +8 -1
- package/src/search/SearchComponent.vue +3 -17
- package/src/search/SearchComponent.vue.d.ts +1 -2
- package/src/search/search.d.ts +13 -0
- package/src/search/search.js +21 -1
- package/src/uiConfig.d.ts +9 -0
- package/src/uiConfig.js +1 -0
- package/dist/assets/core-de8e51b5.js +0 -26236
- package/dist/assets/ui-4f308e45.css +0 -1
- /package/dist/assets/{ol-94c57f2e.js → ol-f58f403b.js} +0 -0
- /package/dist/assets/{vue-62303c82.js → vue-d7691a29.js} +0 -0
- /package/dist/assets/{vuetify-99195777.css → vuetify-533fb61b.css} +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ButtonLocation, createToggleAction, WindowSlot } from '@vcmap/ui';
|
|
2
|
+
import { name, version, mapVersion } from '../package.json';
|
|
3
|
+
import PanoramaInspector from './PanoramaInspector.vue';
|
|
4
|
+
import ShowClickInteraction from './showClickInteraction.js';
|
|
5
|
+
|
|
6
|
+
export default function panoramaInspector() {
|
|
7
|
+
let destroy;
|
|
8
|
+
let clickedInteraction;
|
|
9
|
+
let removeInteraction;
|
|
10
|
+
let clickedPrimitive;
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
name,
|
|
14
|
+
version,
|
|
15
|
+
mapVersion,
|
|
16
|
+
get clickedInteraction() {
|
|
17
|
+
return clickedInteraction;
|
|
18
|
+
},
|
|
19
|
+
get clickedPrimitive() {
|
|
20
|
+
return clickedPrimitive;
|
|
21
|
+
},
|
|
22
|
+
async initialize(app) {
|
|
23
|
+
const { action, destroy: destroyAction } = createToggleAction(
|
|
24
|
+
{
|
|
25
|
+
name: 'Panorama Inspector',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'panorama-inspector',
|
|
29
|
+
state: {
|
|
30
|
+
headerTitle: 'panoramaInspector.title',
|
|
31
|
+
},
|
|
32
|
+
component: PanoramaInspector,
|
|
33
|
+
slot: WindowSlot.DYNAMIC_RIGHT,
|
|
34
|
+
},
|
|
35
|
+
app.windowManager,
|
|
36
|
+
name,
|
|
37
|
+
);
|
|
38
|
+
app.navbarManager.add(
|
|
39
|
+
{ id: 'panorama-inspector', action },
|
|
40
|
+
name,
|
|
41
|
+
ButtonLocation.MENU,
|
|
42
|
+
);
|
|
43
|
+
clickedInteraction = new ShowClickInteraction();
|
|
44
|
+
removeInteraction =
|
|
45
|
+
app.maps.eventHandler.addPersistentInteraction(clickedInteraction);
|
|
46
|
+
destroy = destroyAction;
|
|
47
|
+
},
|
|
48
|
+
destroy() {
|
|
49
|
+
destroy?.();
|
|
50
|
+
removeInteraction?.();
|
|
51
|
+
clickedInteraction?.destroy();
|
|
52
|
+
clickedInteraction = undefined;
|
|
53
|
+
clickedPrimitive?.destroy();
|
|
54
|
+
clickedPrimitive = undefined;
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AbstractInteraction, EventType, VcsEvent } from '@vcmap/core';
|
|
2
|
+
|
|
3
|
+
export default class ShowClickInteraction extends AbstractInteraction {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(EventType.CLICK);
|
|
6
|
+
|
|
7
|
+
this.clicked = new VcsEvent();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
pipe(event) {
|
|
11
|
+
if (
|
|
12
|
+
event.map.className === 'PanoramaMap' &&
|
|
13
|
+
!event.map.getCesiumWidget().scene.screenSpaceCameraController
|
|
14
|
+
.enableInputs
|
|
15
|
+
) {
|
|
16
|
+
this.clicked.raiseEvent(event);
|
|
17
|
+
}
|
|
18
|
+
return Promise.resolve(event);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
Extent,
|
|
7
7
|
MapCollection,
|
|
8
8
|
mercatorProjection,
|
|
9
|
+
PanoramaMap,
|
|
9
10
|
Viewpoint,
|
|
10
11
|
} from '@vcmap/core';
|
|
11
12
|
import { Feature } from 'ol';
|
|
@@ -56,6 +57,64 @@ export function getActionFromOptions(options) {
|
|
|
56
57
|
return options;
|
|
57
58
|
}
|
|
58
59
|
|
|
60
|
+
/**
|
|
61
|
+
* @param {import("@vcmap/core").PanoramaMap} map
|
|
62
|
+
* @param {import("../actions/actionHelper.js").VcsAction} action
|
|
63
|
+
* @returns {() => void}
|
|
64
|
+
*/
|
|
65
|
+
function setupDisablePanorama(map, action) {
|
|
66
|
+
const datasetListeners = new Map();
|
|
67
|
+
|
|
68
|
+
action.disabled = true;
|
|
69
|
+
const setupDataset = (dataset) => {
|
|
70
|
+
datasetListeners.get(dataset.name)?.();
|
|
71
|
+
if (dataset.active) {
|
|
72
|
+
action.disabled = false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const listener = dataset.stateChanged.addEventListener(() => {
|
|
76
|
+
if (!dataset.active) {
|
|
77
|
+
action.disabled = ![...map.layerCollection].find(
|
|
78
|
+
(d) => d.active && d.className === 'PanoramaDatasetLayer',
|
|
79
|
+
);
|
|
80
|
+
} else if (dataset.active) {
|
|
81
|
+
action.disabled = false;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
datasetListeners.set(dataset.name, () => {
|
|
86
|
+
listener();
|
|
87
|
+
action.disabled = ![...map.layerCollection].find(
|
|
88
|
+
(d) => d.active && d.className === 'PanoramaDatasetLayer',
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
let datasetCollectionListeners = [];
|
|
94
|
+
const setupDatasets = () => {
|
|
95
|
+
datasetCollectionListeners.forEach((cb) => cb());
|
|
96
|
+
datasetListeners.forEach((cb) => cb());
|
|
97
|
+
datasetListeners.clear();
|
|
98
|
+
|
|
99
|
+
[...map.layerCollection].forEach(setupDataset);
|
|
100
|
+
|
|
101
|
+
datasetCollectionListeners = [
|
|
102
|
+
map.layerCollection.added.addEventListener(setupDataset),
|
|
103
|
+
map.layerCollection.removed.addEventListener((removedDataset) => {
|
|
104
|
+
datasetListeners.get(removedDataset.name)?.();
|
|
105
|
+
datasetListeners.delete(removedDataset.name);
|
|
106
|
+
}),
|
|
107
|
+
];
|
|
108
|
+
};
|
|
109
|
+
setupDatasets();
|
|
110
|
+
|
|
111
|
+
return () => {
|
|
112
|
+
datasetCollectionListeners.forEach((cb) => cb());
|
|
113
|
+
datasetListeners.forEach((cb) => cb());
|
|
114
|
+
datasetListeners.clear();
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
59
118
|
/**
|
|
60
119
|
* @param {ActionOptions} actionOptions
|
|
61
120
|
* @param {string} mapName
|
|
@@ -79,11 +138,23 @@ export function createMapButtonAction(actionOptions, mapName, maps) {
|
|
|
79
138
|
maps.setActiveMap(mapName);
|
|
80
139
|
},
|
|
81
140
|
});
|
|
82
|
-
|
|
83
|
-
|
|
141
|
+
|
|
142
|
+
const map = maps.getByKey(mapName);
|
|
143
|
+
let datasetListener;
|
|
144
|
+
if (map instanceof PanoramaMap) {
|
|
145
|
+
datasetListener = setupDisablePanorama(map, action);
|
|
146
|
+
}
|
|
147
|
+
const destroyListener = maps.mapActivated.addEventListener((activatedMap) => {
|
|
148
|
+
action.active = activatedMap?.name === mapName;
|
|
84
149
|
});
|
|
85
150
|
|
|
86
|
-
return {
|
|
151
|
+
return {
|
|
152
|
+
action,
|
|
153
|
+
destroy() {
|
|
154
|
+
datasetListener?.();
|
|
155
|
+
destroyListener();
|
|
156
|
+
},
|
|
157
|
+
};
|
|
87
158
|
}
|
|
88
159
|
|
|
89
160
|
/**
|
|
@@ -145,6 +216,64 @@ export function createToggleAction(
|
|
|
145
216
|
|
|
146
217
|
export const searchComponentId = 'searchId';
|
|
147
218
|
|
|
219
|
+
/**
|
|
220
|
+
* @param {import("../vcsUiApp.js").default} app
|
|
221
|
+
* @returns {{action: import("vue").UnwrapRef<VcsAction>, destroy: function():void}}
|
|
222
|
+
*/
|
|
223
|
+
function createSearchAction(app) {
|
|
224
|
+
const windowComponent = {
|
|
225
|
+
id: searchComponentId,
|
|
226
|
+
component: SearchComponent,
|
|
227
|
+
position: { width: 440 },
|
|
228
|
+
state: { hideHeader: true },
|
|
229
|
+
slot: WindowSlot.DYNAMIC_RIGHT,
|
|
230
|
+
};
|
|
231
|
+
const action = reactive({
|
|
232
|
+
name: 'search.title',
|
|
233
|
+
icon: '$vcsSearch',
|
|
234
|
+
title: 'search.tooltip',
|
|
235
|
+
active: false,
|
|
236
|
+
background: false,
|
|
237
|
+
callback() {
|
|
238
|
+
if (this.active && !this.background) {
|
|
239
|
+
app.windowManager.remove(searchComponentId);
|
|
240
|
+
this.active = false;
|
|
241
|
+
app.search.clearSearch();
|
|
242
|
+
} else {
|
|
243
|
+
app.windowManager.add(windowComponent, vcsAppSymbol);
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
const addedListener = app.windowManager.added.addEventListener(({ id }) => {
|
|
248
|
+
if (id === searchComponentId) {
|
|
249
|
+
action.active = true;
|
|
250
|
+
action.background = false;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
const removedListener = app.windowManager.removed.addEventListener(
|
|
254
|
+
({ id }) => {
|
|
255
|
+
if (id === searchComponentId) {
|
|
256
|
+
if (app.search.currentResults.value.length) {
|
|
257
|
+
action.active = true;
|
|
258
|
+
action.background = true;
|
|
259
|
+
} else {
|
|
260
|
+
action.active = false;
|
|
261
|
+
action.background = false;
|
|
262
|
+
app.search.clearSearch();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
action,
|
|
270
|
+
destroy: () => {
|
|
271
|
+
addedListener();
|
|
272
|
+
removedListener();
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
148
277
|
/**
|
|
149
278
|
* Creates a toggle button for the search tool, which is only available, if at least one search implementation is registered.
|
|
150
279
|
* @param {import("../vcsUiApp.js").default} app
|
|
@@ -156,38 +285,21 @@ export function createSearchButtonAction(app) {
|
|
|
156
285
|
const uiConfig = app.uiConfig.config;
|
|
157
286
|
|
|
158
287
|
const determineAction = () => {
|
|
159
|
-
if (app.windowManager.has(searchComponentId)) {
|
|
160
|
-
app.windowManager.remove(searchComponentId);
|
|
161
|
-
}
|
|
162
288
|
if (
|
|
163
289
|
!uiConfig.hideSearch &&
|
|
164
290
|
app.search.size > 0 &&
|
|
165
291
|
searchAction.value === null
|
|
166
292
|
) {
|
|
167
|
-
const action =
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
icon: '$vcsSearch',
|
|
171
|
-
title: 'search.tooltip',
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
id: searchComponentId,
|
|
175
|
-
component: SearchComponent,
|
|
176
|
-
state: { hideHeader: true },
|
|
177
|
-
slot: WindowSlot.DYNAMIC_RIGHT,
|
|
178
|
-
position: {
|
|
179
|
-
width: 440,
|
|
180
|
-
},
|
|
181
|
-
},
|
|
182
|
-
app.windowManager,
|
|
183
|
-
vcsAppSymbol,
|
|
184
|
-
);
|
|
185
|
-
destroyAction = action.destroy;
|
|
186
|
-
searchAction.value = reactive(action.action);
|
|
293
|
+
const { action, destroy } = createSearchAction(app);
|
|
294
|
+
destroyAction = destroy;
|
|
295
|
+
searchAction.value = action;
|
|
187
296
|
} else if (
|
|
188
297
|
(uiConfig.hideSearch || app.search.size === 0) &&
|
|
189
298
|
searchAction.value !== null
|
|
190
299
|
) {
|
|
300
|
+
if (app.windowManager.has(searchComponentId)) {
|
|
301
|
+
app.windowManager.remove(searchComponentId);
|
|
302
|
+
}
|
|
191
303
|
destroyAction();
|
|
192
304
|
destroyAction = () => {};
|
|
193
305
|
searchAction.value = null;
|
|
@@ -170,11 +170,14 @@
|
|
|
170
170
|
OpenlayersMap: '$vcs2d',
|
|
171
171
|
CesiumMap: '$vcs3d',
|
|
172
172
|
ObliqueMap: '$vcsObliqueView',
|
|
173
|
+
PanoramaMap: 'mdi-image',
|
|
173
174
|
};
|
|
175
|
+
|
|
174
176
|
const mapBtnWeight = {
|
|
175
177
|
OpenlayersMap: 3,
|
|
176
178
|
CesiumMap: 2,
|
|
177
179
|
ObliqueMap: 1,
|
|
180
|
+
PanoramaMap: 0,
|
|
178
181
|
};
|
|
179
182
|
|
|
180
183
|
const mapButtonActionDestroy = {};
|
|
@@ -322,6 +325,14 @@
|
|
|
322
325
|
vcsAppSymbol,
|
|
323
326
|
);
|
|
324
327
|
}
|
|
328
|
+
|
|
329
|
+
if (
|
|
330
|
+
app.uiConfig.config.autoCloseLegend &&
|
|
331
|
+
newValue.length === 0 &&
|
|
332
|
+
app.windowManager.has(legendComponentId)
|
|
333
|
+
) {
|
|
334
|
+
app.windowManager.remove(legendComponentId);
|
|
335
|
+
}
|
|
325
336
|
currentEntryLength = newValue.length;
|
|
326
337
|
});
|
|
327
338
|
|
|
@@ -398,6 +398,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
398
398
|
* - open the legend window, if new layer has a config
|
|
399
399
|
*/
|
|
400
400
|
readonly openLegendOnAdd?: boolean | undefined;
|
|
401
|
+
/**
|
|
402
|
+
* - automatically close the legend window, if no layer has a config
|
|
403
|
+
*/
|
|
404
|
+
readonly autoCloseLegend?: boolean | undefined;
|
|
401
405
|
/**
|
|
402
406
|
* - can be used to apply a scale factor to the overviewMap
|
|
403
407
|
*/
|
|
@@ -310,6 +310,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
310
310
|
* - open the legend window, if new layer has a config
|
|
311
311
|
*/
|
|
312
312
|
readonly openLegendOnAdd?: boolean | undefined;
|
|
313
|
+
/**
|
|
314
|
+
* - automatically close the legend window, if no layer has a config
|
|
315
|
+
*/
|
|
316
|
+
readonly autoCloseLegend?: boolean | undefined;
|
|
313
317
|
/**
|
|
314
318
|
* - can be used to apply a scale factor to the overviewMap
|
|
315
319
|
*/
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="d-flex">
|
|
15
15
|
<VcsActionButtonList
|
|
16
16
|
:actions="mapActions"
|
|
17
|
-
:overflow-count="smAndDown ? 2 :
|
|
17
|
+
:overflow-count="smAndDown ? 2 : 4"
|
|
18
18
|
:force-overflow="false"
|
|
19
19
|
button="VcsToolButton"
|
|
20
20
|
/>
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
:tooltip="searchAction.title"
|
|
105
105
|
:icon="searchAction.icon"
|
|
106
106
|
:active="searchAction.active"
|
|
107
|
+
:background="searchAction.background"
|
|
107
108
|
@click.stop="searchAction.callback($event)"
|
|
108
109
|
v-bind="{ ...$attrs }"
|
|
109
110
|
/>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export default ActivateMapCallback;
|
|
2
|
+
export type ActivateMapCallbackOptions = import("./vcsCallback.js").VcsCallbackOptions & {
|
|
3
|
+
mapName: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import("./vcsCallback.js").VcsCallbackOptions & { mapName: string }} ActivateMapCallbackOptions
|
|
7
|
+
* @property {string} mapName
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Callback to activate a map by name using the app's map collection.
|
|
11
|
+
* @class
|
|
12
|
+
* @extends VcsCallback
|
|
13
|
+
*/
|
|
14
|
+
declare class ActivateMapCallback extends VcsCallback {
|
|
15
|
+
/**
|
|
16
|
+
* @param {ActivateMapCallbackOptions} options
|
|
17
|
+
* @param {import("@src/vcsUiApp.js").default} app
|
|
18
|
+
*/
|
|
19
|
+
constructor(options: ActivateMapCallbackOptions, app: import("@src/vcsUiApp.js").default);
|
|
20
|
+
/**
|
|
21
|
+
* @type {string}
|
|
22
|
+
* @private
|
|
23
|
+
*/
|
|
24
|
+
private _mapName;
|
|
25
|
+
/**
|
|
26
|
+
* @returns {ActivateMapCallbackOptions}
|
|
27
|
+
*/
|
|
28
|
+
toJSON(): ActivateMapCallbackOptions;
|
|
29
|
+
}
|
|
30
|
+
import VcsCallback from './vcsCallback.js';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { getLogger } from '@vcsuite/logger';
|
|
2
|
+
import VcsCallback, { callbackClassRegistry } from './vcsCallback.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import("./vcsCallback.js").VcsCallbackOptions & { mapName: string }} ActivateMapCallbackOptions
|
|
6
|
+
* @property {string} mapName
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Callback to activate a map by name using the app's map collection.
|
|
11
|
+
* @class
|
|
12
|
+
* @extends VcsCallback
|
|
13
|
+
*/
|
|
14
|
+
class ActivateMapCallback extends VcsCallback {
|
|
15
|
+
/**
|
|
16
|
+
* @param {ActivateMapCallbackOptions} options
|
|
17
|
+
* @param {import("@src/vcsUiApp.js").default} app
|
|
18
|
+
*/
|
|
19
|
+
constructor(options, app) {
|
|
20
|
+
super(options, app);
|
|
21
|
+
/**
|
|
22
|
+
* @type {string}
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
this._mapName = options.mapName;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Activates the map with the given name.
|
|
30
|
+
*/
|
|
31
|
+
callback() {
|
|
32
|
+
if (this._mapName) {
|
|
33
|
+
this._app.maps.setActiveMap(this._mapName).catch((error) => {
|
|
34
|
+
getLogger(ActivateMapCallback.className).error(
|
|
35
|
+
`Failed to activate map "${this._mapName}":`,
|
|
36
|
+
error,
|
|
37
|
+
);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @returns {ActivateMapCallbackOptions}
|
|
44
|
+
*/
|
|
45
|
+
toJSON() {
|
|
46
|
+
const config = super.toJSON();
|
|
47
|
+
config.mapName = this._mapName;
|
|
48
|
+
return config;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @type {string}
|
|
53
|
+
*/
|
|
54
|
+
static get className() {
|
|
55
|
+
return 'ActivateMapCallback';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
callbackClassRegistry.registerClass(
|
|
60
|
+
ActivateMapCallback.className,
|
|
61
|
+
ActivateMapCallback,
|
|
62
|
+
);
|
|
63
|
+
export default ActivateMapCallback;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getLogger } from '@vcsuite/logger';
|
|
2
|
+
import VcsCallback, { callbackClassRegistry } from './vcsCallback.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Callback to activate the overview map using its API.
|
|
6
|
+
*/
|
|
7
|
+
class ActivateOverviewMapCallback extends VcsCallback {
|
|
8
|
+
static get className() {
|
|
9
|
+
return 'ActivateOverviewMapCallback';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
callback() {
|
|
13
|
+
this._app.overviewMap.activate().catch((error) => {
|
|
14
|
+
getLogger(ActivateOverviewMapCallback.className).error(
|
|
15
|
+
'Failed to activate overview map:',
|
|
16
|
+
error,
|
|
17
|
+
);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
callbackClassRegistry.registerClass(
|
|
23
|
+
ActivateOverviewMapCallback.className,
|
|
24
|
+
ActivateOverviewMapCallback,
|
|
25
|
+
);
|
|
26
|
+
export default ActivateOverviewMapCallback;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import VcsCallback, { callbackClassRegistry } from './vcsCallback.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Callback to deactivate the overview map using its API.
|
|
5
|
+
*/
|
|
6
|
+
class DeactivateOverviewMapCallback extends VcsCallback {
|
|
7
|
+
static get className() {
|
|
8
|
+
return 'DeactivateOverviewMapCallback';
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
callback() {
|
|
12
|
+
this._app.overviewMap.deactivate();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
callbackClassRegistry.registerClass(
|
|
17
|
+
DeactivateOverviewMapCallback.className,
|
|
18
|
+
DeactivateOverviewMapCallback,
|
|
19
|
+
);
|
|
20
|
+
export default DeactivateOverviewMapCallback;
|
|
@@ -150,9 +150,10 @@
|
|
|
150
150
|
/>
|
|
151
151
|
<v-expansion-panels
|
|
152
152
|
variant="accordion"
|
|
153
|
+
flat
|
|
153
154
|
multiple
|
|
154
155
|
v-model="localOpenedGroups"
|
|
155
|
-
class="rounded-0"
|
|
156
|
+
class="rounded-0 panels"
|
|
156
157
|
>
|
|
157
158
|
<vcs-expansion-panel
|
|
158
159
|
v-for="(group, i) in groups"
|
|
@@ -176,4 +177,11 @@
|
|
|
176
177
|
</div>
|
|
177
178
|
</template>
|
|
178
179
|
|
|
179
|
-
<style scoped lang="scss"
|
|
180
|
+
<style scoped lang="scss">
|
|
181
|
+
.panels .vcs-expansion-panel:not(:last-child) {
|
|
182
|
+
border-bottom: 1px solid rgb(var(--v-theme-base-lighten-2));
|
|
183
|
+
}
|
|
184
|
+
:deep(.v-list-item-title) > span {
|
|
185
|
+
font-weight: bold;
|
|
186
|
+
}
|
|
187
|
+
</style>
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-container class="pa-0 abstract-workspace-item-creator">
|
|
3
|
+
<slot />
|
|
4
|
+
<div v-if="showFooter">
|
|
5
|
+
<v-divider class="mt-3" />
|
|
6
|
+
<div class="d-flex w-full justify-space-between px-2 pt-2 pb-1">
|
|
7
|
+
<VcsFormButton
|
|
8
|
+
v-if="showAdd && !workspaceHidden"
|
|
9
|
+
icon="$vcsComponentsPlus"
|
|
10
|
+
:disabled="disableAdd"
|
|
11
|
+
:tooltip="tooltipAdd"
|
|
12
|
+
@click="$emit('addClicked', $event)"
|
|
13
|
+
/>
|
|
14
|
+
<div class="d-flex gc-2 w-100 justify-end">
|
|
15
|
+
<slot name="secondaryButton" />
|
|
16
|
+
<VcsFormButton
|
|
17
|
+
variant="filled"
|
|
18
|
+
:disabled="disableNew"
|
|
19
|
+
:tooltip="tooltipNew"
|
|
20
|
+
@click="$emit('newClicked', $event)"
|
|
21
|
+
>
|
|
22
|
+
{{ $st(newButtonTitle) }}
|
|
23
|
+
</VcsFormButton>
|
|
24
|
+
<VcsActionButtonList :actions="actions" button="VcsFormButton" />
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</v-container>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script>
|
|
32
|
+
import { VContainer, VDivider } from 'vuetify/components';
|
|
33
|
+
import { computed, inject } from 'vue';
|
|
34
|
+
import VcsFormButton from '../buttons/VcsFormButton.vue';
|
|
35
|
+
import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @description Basic wrapper for all plugins interacting with MyWorkspace.
|
|
39
|
+
* Providing a footer with add and new buttons.
|
|
40
|
+
* @vue-prop {boolean} [showFooter=true] - Flag to hide the footer.
|
|
41
|
+
* @vue-prop {boolean} [showAdd=true] - Flag to show an add button in the footer. You need to handle @addClicked in a child component.
|
|
42
|
+
* @vue-prop {boolean} [disableAdd=false] - Flag to render add button disabled.
|
|
43
|
+
* @vue-prop {boolean} [tooltipAdd='components.addToMyWorkspace'] - Option to change the add button tooltip.
|
|
44
|
+
* @vue-prop {boolean} [disableNew=false] - Flag to render new button disabled.
|
|
45
|
+
* @vue-prop {boolean} [tooltipNew''] - Option to change the add a tooltip to the new button.
|
|
46
|
+
* @vue-prop {Array<VcsAction>} [actions] - Optional actions rendered as ActionButtonList in the footer.
|
|
47
|
+
* @vue-prop {string} [newButtonTitle='components.new'] - Option to change the new button title, e.g. to 'components.apply'.
|
|
48
|
+
* @vue-event {Event} addClicked - Event fired on clicking the reset button.
|
|
49
|
+
* @vue-event {Event} newClicked - Event fired on clicking the cancel button.
|
|
50
|
+
* @vue-slot secondaryButton An optionnal named slot to add a secondary button to the footer, rendered filled on the left of the new button.
|
|
51
|
+
*/
|
|
52
|
+
export default {
|
|
53
|
+
name: 'AbstractWorkspaceItemCreator',
|
|
54
|
+
components: {
|
|
55
|
+
VContainer,
|
|
56
|
+
VDivider,
|
|
57
|
+
VcsFormButton,
|
|
58
|
+
VcsActionButtonList,
|
|
59
|
+
},
|
|
60
|
+
props: {
|
|
61
|
+
showFooter: {
|
|
62
|
+
type: Boolean,
|
|
63
|
+
default: true,
|
|
64
|
+
},
|
|
65
|
+
showAdd: {
|
|
66
|
+
type: Boolean,
|
|
67
|
+
default: true,
|
|
68
|
+
},
|
|
69
|
+
disableAdd: {
|
|
70
|
+
type: Boolean,
|
|
71
|
+
default: false,
|
|
72
|
+
},
|
|
73
|
+
tooltipAdd: {
|
|
74
|
+
type: String,
|
|
75
|
+
default: 'components.addToMyWorkspace',
|
|
76
|
+
},
|
|
77
|
+
newButtonTitle: {
|
|
78
|
+
type: String,
|
|
79
|
+
default: 'components.new',
|
|
80
|
+
},
|
|
81
|
+
disableNew: {
|
|
82
|
+
type: Boolean,
|
|
83
|
+
default: false,
|
|
84
|
+
},
|
|
85
|
+
tooltipNew: {
|
|
86
|
+
type: String,
|
|
87
|
+
default: '',
|
|
88
|
+
},
|
|
89
|
+
actions: {
|
|
90
|
+
type: Array,
|
|
91
|
+
default: () => [],
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
emits: ['addClicked', 'newClicked'],
|
|
95
|
+
setup() {
|
|
96
|
+
const app = inject('vcsApp');
|
|
97
|
+
return {
|
|
98
|
+
workspaceHidden: computed(() => !!app.uiConfig.config.workspaceHidden),
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
</script>
|
|
103
|
+
|
|
104
|
+
<style scoped></style>
|