From c1ef701eb2976afafe7e0d5f7453e9ba382f535c Mon Sep 17 00:00:00 2001 From: Pegah Sarram Date: Tue, 11 Dec 2018 11:28:16 -0800 Subject: [PATCH] merge display layout view config with components, add line view. * Hacky WIP * WIP * check for 'domainobject' in data transfer * Metadata manager can return default display value * Refactor subobject and telemetry views to use layout frame * Use data domainObject * Get metadata for selected object. * Don't inject lodash via vue * move selection to specific layout types * restore toolbar functionality * Support creating line * Add controls for setting x, y, x2 and y2 for lines from the toolbar. * Initial attempt at resizing lines * Check for duplicate panel * line resize handles working * Get Text and Box elements working. * Refactor image view to use layout frame * Fix drill in * Check for object before accessing the identifier to avoid type error. * Add inspectable class if item is subobject or telemetry view. * Delete unused files * remove unused imports * Fix typos * Fix cssClass and objectPath * object can be undefined so check for it not being undefined before adding a listener. * Set cssClass when domain object is available * Get user input for text and image in the toolbar when adding element. --- src/api/telemetry/TelemetryMetadataManager.js | 16 + .../displayLayout/DisplayLayoutToolbar.js | 143 +++++---- .../displayLayout/DisplayLayoutType.js | 7 +- .../displayLayout/ElementViewConfiguration.js | 171 ---------- .../SubobjectViewConfiguration.js | 122 ------- .../TelemetryViewConfiguration.js | 124 -------- .../displayLayout/ViewConfiguration.js | 121 ------- .../displayLayout/components/BoxView.vue | 57 +++- .../components/DisplayLayout.vue | 297 ++++++++---------- .../displayLayout/components/ImageView.vue | 49 ++- .../{LayoutItem.vue => LayoutFrame.vue} | 123 +++----- .../displayLayout/components/LineView.vue | 215 +++++++++++-- .../components/SubobjectView.vue | 113 +++++-- .../components/TelemetryView.vue | 126 +++++--- .../displayLayout/components/TextView.vue | 63 +++- .../components/mixins/context-menu-gesture.js | 8 +- src/ui/components/mixins/object-link.js | 2 +- src/ui/components/toolbar/Toolbar.vue | 4 +- 18 files changed, 787 insertions(+), 974 deletions(-) delete mode 100644 src/plugins/displayLayout/ElementViewConfiguration.js delete mode 100644 src/plugins/displayLayout/SubobjectViewConfiguration.js delete mode 100644 src/plugins/displayLayout/TelemetryViewConfiguration.js delete mode 100644 src/plugins/displayLayout/ViewConfiguration.js rename src/plugins/displayLayout/components/{LayoutItem.vue => LayoutFrame.vue} (63%) diff --git a/src/api/telemetry/TelemetryMetadataManager.js b/src/api/telemetry/TelemetryMetadataManager.js index eba12f1f9f..8ab1d7441d 100644 --- a/src/api/telemetry/TelemetryMetadataManager.js +++ b/src/api/telemetry/TelemetryMetadataManager.js @@ -124,6 +124,22 @@ define([ return sortedMetadata; }; + TelemetryMetadataManager.prototype.getDefaultDisplayValue = function () { + let valueMetadata = this.valuesForHints(['range'])[0]; + + if (valueMetadata === undefined) { + valueMetadata = this.values().filter(values => { + return !(values.hints.domain); + })[0]; + } + + if (valueMetadata === undefined) { + valueMetadata = this.values()[0]; + } + + return valueMetadata.key; + }; + return TelemetryMetadataManager; diff --git a/src/plugins/displayLayout/DisplayLayoutToolbar.js b/src/plugins/displayLayout/DisplayLayoutToolbar.js index 5f758532a7..a30c10dd98 100644 --- a/src/plugins/displayLayout/DisplayLayoutToolbar.js +++ b/src/plugins/displayLayout/DisplayLayoutToolbar.js @@ -35,9 +35,48 @@ define([], function () { (selection[0].context.item && selection[0].context.item.type === 'layout'))); }, toolbar: function (selection) { + const DIALOG_FORM = { + 'text': { + name: "Text Element Properties", + sections: [ + { + rows: [ + { + key: "text", + control: "textfield", + name: "Text", + required: true + } + ] + } + ] + }, + 'image': { + name: "Image Properties", + sections: [ + { + rows: [ + { + key: "url", + control: "textfield", + name: "Image URL", + "cssClass": "l-input-lg", + required: true + } + ] + } + ] + } + }; + + function getUserInput(form) { + return openmct.$injector.get('dialogService').getUserInput(form, {}); + } + let selectedParent = selection[1] && selection[1].context.item, selectedObject = selection[0].context.item, layoutItem = selection[0].context.layoutItem, + layoutItemIndex = selection[0].context.index, toolbar = []; if (selectedObject && selectedObject.type === 'layout') { @@ -45,7 +84,14 @@ define([], function () { control: "menu", domainObject: selectedObject, method: function (option) { - selection[0].context.addElement(option.name.toLowerCase()); + let name = option.name.toLowerCase(); + let form = DIALOG_FORM[name]; + if (form) { + getUserInput(form) + .then(element => selection[0].context.addElement(name, element)); + } else { + selection[0].context.addElement(name); + } }, key: "add", icon: "icon-plus", @@ -75,16 +121,19 @@ define([], function () { return toolbar; } + let path = `configuration.items[${layoutItemIndex}]`; + let separator = { + control: "separator" + }; + if (layoutItem.type === 'subobject-view') { if (toolbar.length > 0) { - toolbar.push({ - control: "separator" - }); + toolbar.push(separator); } toolbar.push({ control: "toggle-button", domainObject: selectedParent, - property: "configuration.panels[" + layoutItem.id + "].hasFrame", + property: path + ".hasFrame", options: [ { value: false, @@ -100,19 +149,7 @@ define([], function () { }); } else { const TEXT_SIZE = [9, 10, 11, 12, 13, 14, 15, 16, 20, 24, 30, 36, 48, 72, 96]; - let path; - // TODO: get the path from the view configuration - // let path = layoutItem.config.path(); - if (layoutItem.type === 'telemetry-view') { - path = "configuration.alphanumerics[" + layoutItem.config.alphanumeric.index + "]"; - } else { - path = "configuration.elements[" + layoutItem.config.element.index + "]"; - } - - let separator = { - control: "separator" - }, - fill = { + let fill = { control: "color-picker", domainObject: selectedParent, property: path + ".fill", @@ -180,9 +217,7 @@ define([], function () { }; if (layoutItem.type === 'telemetry-view') { - // TODO: add "remove", "order", "useGrid" - let metadata = openmct.telemetry.getMetadata(layoutItem.domainObject), - displayMode = { + let displayMode = { control: "select-menu", domainObject: selectedParent, property: path + ".displayMode", @@ -207,7 +242,7 @@ define([], function () { domainObject: selectedParent, property: path + ".value", title: "Set value", - options: metadata.values().map(value => { + options: openmct.telemetry.getMetadata(selectedObject).values().map(value => { return { name: value.name, value: value.key @@ -231,28 +266,13 @@ define([], function () { width ]; } else if (layoutItem.type === 'text-view' ) { - // TODO: Add "remove", "order", "useGrid" let text = { control: "button", domainObject: selectedParent, property: path, icon: "icon-gear", title: "Edit text properties", - dialog: { - name: "Text Element Properties", - sections: [ - { - rows: [ - { - key: "text", - control: "textfield", - name: "Text", - required: true - } - ] - } - ] - } + dialog: DIALOG_FORM['text'] }; toolbar = [ fill, @@ -269,7 +289,6 @@ define([], function () { text ]; } else if (layoutItem.type === 'box-view') { - // TODO: Add "remove", "order", "useGrid" toolbar = [ fill, stroke, @@ -280,30 +299,14 @@ define([], function () { width ]; } else if (layoutItem.type === 'image-view') { - // TODO: Add "remove", "order", "useGrid" let url = { control: "button", domainObject: selectedParent, property: path, icon: "icon-image", title: "Edit image properties", - dialog: { - name: "Image Properties", - sections: [ - { - rows: [ - { - key: "url", - control: "textfield", - name: "Image URL", - "cssClass": "l-input-lg", - required: true - } - ] - } - ] - } - }; + dialog: DIALOG_FORM['image'] + }; toolbar = [ stroke, separator, @@ -315,8 +318,30 @@ define([], function () { url ]; } else if (layoutItem.type === 'line-view') { - // TODO: Add "remove", "order", "useGrid", "x1", "y1", x2", "y2" - toolbar = [stroke]; + let x2 = { + control: "input", + type: "number", + domainObject: selectedParent, + property: path + ".x2", + label: "X2:", + title: "X2 position" + }, + y2 = { + control: "input", + type: "number", + domainObject: selectedParent, + property: path + ".y2", + label: "Y2:", + title: "Y2 position", + }; + toolbar = [ + stroke, + separator, + x, + y, + x2, + y2 + ]; } } diff --git a/src/plugins/displayLayout/DisplayLayoutType.js b/src/plugins/displayLayout/DisplayLayoutType.js index 3951ea9e82..66b34d6c17 100644 --- a/src/plugins/displayLayout/DisplayLayoutType.js +++ b/src/plugins/displayLayout/DisplayLayoutType.js @@ -29,13 +29,12 @@ define(function () { initialize(domainObject) { domainObject.composition = []; domainObject.configuration = { - panels: {}, - alphanumerics: [], - elements: [] + items: [], + layoutGrid: [10, 10], }; } } } return DisplayLayoutType; -}); \ No newline at end of file +}); diff --git a/src/plugins/displayLayout/ElementViewConfiguration.js b/src/plugins/displayLayout/ElementViewConfiguration.js deleted file mode 100644 index 3e4cfceb79..0000000000 --- a/src/plugins/displayLayout/ElementViewConfiguration.js +++ /dev/null @@ -1,171 +0,0 @@ -/***************************************************************************** - * Open MCT, Copyright (c) 2014-2018, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ['./ViewConfiguration'], - function (ViewConfiguration) { - class ElementViewConfiguration extends ViewConfiguration { - - static create(type, openmct) { - const DEFAULT_WIDTH = 10, - DEFAULT_HEIGHT = 5, - DEFAULT_X = 1, - DEFAULT_Y = 1; - const INITIAL_STATES = { - "image": { - stroke: "transparent" - }, - "box": { - fill: "#717171", - stroke: "transparent" - }, - "line": { - x: 5, - y: 3, - x2: 6, - y2: 6, - stroke: "#717171" - }, - "text": { - fill: "transparent", - stroke: "transparent", - size: "13px", - color: "" - } - }; - const DIALOGS = { - "image": { - name: "Image Properties", - sections: [ - { - rows: [ - { - key: "url", - control: "textfield", - name: "Image URL", - "cssClass": "l-input-lg", - required: true - } - ] - } - ] - }, - "text": { - name: "Text Element Properties", - sections: [ - { - rows: [ - { - key: "text", - control: "textfield", - name: "Text", - required: true - } - ] - } - ] - } - }; - - let element = INITIAL_STATES[type] || {}; - element = JSON.parse(JSON.stringify(element)); - element.x = element.x || DEFAULT_X; - element.y = element.y || DEFAULT_Y; - element.width = DEFAULT_WIDTH; - element.height = DEFAULT_HEIGHT; - element.type = type; - - return DIALOGS[type] ? - openmct.$injector.get('dialogService').getUserInput(DIALOGS[type], element) : - element; - } - - /** - * @param {Object} configuration the element (line, box, text or image) view configuration - * @param {Object} configuration.element - * @param {Object} configuration.domainObject the telemetry domain object - * @param {Object} configuration.openmct the openmct object - */ - constructor({element, ...rest}) { - super(rest); - this.element = element; - this.updateStyle(this.position()); - } - - path() { - return "configuration.elements[" + this.element.index + "]"; - } - - x() { - return this.element.x; - } - - y() { - return this.element.y; - } - - width() { - return this.element.width; - } - - height() { - return this.element.height; - } - - observeProperties() { - [ - "width", - "height", - "stroke", - "fill", - "x", - "y", - "x1", - "y1", - "x2", - "y2", - "color", - "size", - "text", - "url" - ].forEach(property => { - this.attachListener(property, newValue => { - this.element[property] = newValue; - - if (property === 'width' || property === 'height' || - property === 'x' || property === 'y') { - this.updateStyle(); - } - }); - }); - - // TODO: attach listener for useGrid - } - - inspectable() { - return false; - } - } - - return ElementViewConfiguration; - } -); diff --git a/src/plugins/displayLayout/SubobjectViewConfiguration.js b/src/plugins/displayLayout/SubobjectViewConfiguration.js deleted file mode 100644 index 67352ce6f9..0000000000 --- a/src/plugins/displayLayout/SubobjectViewConfiguration.js +++ /dev/null @@ -1,122 +0,0 @@ -/***************************************************************************** - * Open MCT, Copyright (c) 2014-2018, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ['./ViewConfiguration'], - function (ViewConfiguration) { - class SubobjectViewConfiguration extends ViewConfiguration { - - static create(domainObject, gridSize, position) { - const MINIMUM_FRAME_SIZE = [320, 180], - DEFAULT_DIMENSIONS = [10, 10], - DEFAULT_POSITION = [0, 0], - DEFAULT_HIDDEN_FRAME_TYPES = ['hyperlink', 'summary-widget']; - - function getDefaultDimensions() { - return MINIMUM_FRAME_SIZE.map((min, index) => { - return Math.max( - Math.ceil(min / gridSize[index]), - DEFAULT_DIMENSIONS[index] - ); - }); - } - - function hasFrameByDefault(type) { - return DEFAULT_HIDDEN_FRAME_TYPES.indexOf(type) === -1; - } - - position = position || DEFAULT_POSITION; - let defaultDimensions = getDefaultDimensions(); - let panel = { - width: defaultDimensions[0], - height: defaultDimensions[1], - x: position[0], - y: position[1], - hasFrame: hasFrameByDefault(domainObject.type) - }; - - return panel; - } - - /** - * - * @param {Object} configuration the subobject view configuration - * @param {String} configuration.id the domain object keystring identifier - * @param {Boolean} configuration.panel - * @param {Object} configuration.domainObject the domain object to observe the changes on - * @param {Object} configuration.openmct the openmct object - */ - constructor({panel, id, ...rest}) { - super(rest); - this.id = id; - this.panel = panel; - this.hasFrame = this.hasFrame.bind(this); - this.updateStyle(this.position()); - } - - path() { - return "configuration.panels[" + this.id + "]"; - } - - x() { - return this.panel.x; - } - - y() { - return this.panel.y; - } - - width() { - return this.panel.width; - } - - height() { - return this.panel.height; - } - - hasFrame() { - return this.panel.hasFrame; - } - - observeProperties() { - [ - 'hasFrame', - 'x', - 'y', - 'width', - 'height' - ].forEach(property => { - this.attachListener(property, newValue => { - this.panel[property] = newValue; - - if (property === 'width' || property === 'height' || - property === 'x' || property === 'y') { - this.updateStyle(); - } - }); - }); - } - } - - return SubobjectViewConfiguration; - } -); diff --git a/src/plugins/displayLayout/TelemetryViewConfiguration.js b/src/plugins/displayLayout/TelemetryViewConfiguration.js deleted file mode 100644 index 1a22933b9d..0000000000 --- a/src/plugins/displayLayout/TelemetryViewConfiguration.js +++ /dev/null @@ -1,124 +0,0 @@ -/***************************************************************************** - * Open MCT, Copyright (c) 2014-2018, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ['./ViewConfiguration'], - function (ViewConfiguration) { - - class TelemetryViewConfiguration extends ViewConfiguration { - static create(domainObject, position, openmct) { - const DEFAULT_TELEMETRY_DIMENSIONS = [10, 5]; - - function getDefaultTelemetryValue(domainObject, openmct) { - let metadata = openmct.telemetry.getMetadata(domainObject); - let valueMetadata = metadata.valuesForHints(['range'])[0]; - - if (valueMetadata === undefined) { - valueMetadata = metadata.values().filter(values => { - return !(values.hints.domain); - })[0]; - } - - if (valueMetadata === undefined) { - valueMetadata = metadata.values()[0]; - } - - return valueMetadata.key; - } - - let alphanumeric = { - identifier: domainObject.identifier, - x: position[0], - y: position[1], - width: DEFAULT_TELEMETRY_DIMENSIONS[0], - height: DEFAULT_TELEMETRY_DIMENSIONS[1], - displayMode: 'all', - value: getDefaultTelemetryValue(domainObject, openmct), - stroke: "transparent", - fill: "", - color: "", - size: "13px", - }; - - return alphanumeric; - } - - /** - * @param {Object} configuration the telemetry object view configuration - * @param {Object} configuration.alphanumeric - * @param {Object} configuration.domainObject the domain object to observe the changes on - * @param {Object} configuration.openmct the openmct object - */ - constructor({alphanumeric, ...rest}) { - super(rest); - this.alphanumeric = alphanumeric; - this.updateStyle(this.position()); - } - - path() { - return "configuration.alphanumerics[" + this.alphanumeric.index + "]"; - } - - x() { - return this.alphanumeric.x; - } - - y() { - return this.alphanumeric.y; - } - - width() { - return this.alphanumeric.width; - } - - height() { - return this.alphanumeric.height; - } - - observeProperties() { - [ - 'displayMode', - 'value', - 'fill', - 'stroke', - 'color', - 'size', - 'x', - 'y', - 'width', - 'height' - ].forEach(property => { - this.attachListener(property, newValue => { - this.alphanumeric[property] = newValue; - - if (property === 'width' || property === 'height' || - property === 'x' || property === 'y') { - this.updateStyle(); - } - }); - }); - } - } - - return TelemetryViewConfiguration; - } -); diff --git a/src/plugins/displayLayout/ViewConfiguration.js b/src/plugins/displayLayout/ViewConfiguration.js deleted file mode 100644 index 37a4387b9c..0000000000 --- a/src/plugins/displayLayout/ViewConfiguration.js +++ /dev/null @@ -1,121 +0,0 @@ -/***************************************************************************** - * Open MCT, Copyright (c) 2014-2018, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - define([], - function () { - class ViewConfiguration { - - constructor({domainObject, openmct, gridSize}) { - this.domainObject = domainObject; - this.gridSize = gridSize; - this.mutatePosition = this.mutatePosition.bind(this); - this.listeners = []; - this.observe = openmct.objects.observe.bind(openmct.objects); - this.mutate = function (path, value) { - openmct.objects.mutate(this.domainObject, path, value); - }.bind(this); - this.newPosition = {}; - } - - mutatePosition() { - this.mutate(this.path() + ".x", this.newPosition.position[0]); - this.mutate(this.path() + ".y", this.newPosition.position[1]); - this.mutate(this.path() + ".width", this.newPosition.dimensions[0]); - this.mutate(this.path() + ".height", this.newPosition.dimensions[1]); - } - - attachListener(property, callback) { - this.listeners.push(this.observe(this.domainObject, this.path() + "." + property, callback)); - } - - attachListeners() { - this.observeProperties(); - this.listeners.push(this.observe(this.domainObject, '*', function (obj) { - this.domainObject = JSON.parse(JSON.stringify(obj)); - }.bind(this))); - } - - removeListeners() { - this.listeners.forEach(listener => { - listener(); - }); - this.listeners = []; - } - - position() { - return { - position: [this.x(), this.y()], - dimensions: [this.width(), this.height()] - }; - } - - path() { - throw "NOT IMPLEMENTED;" - } - - inspectable() { - return true; - } - - updateStyle(raw) { - if (!raw) { - raw = this.position(); - } - - this.style = { - left: (this.gridSize[0] * raw.position[0]) + 'px', - top: (this.gridSize[1] * raw.position[1]) + 'px', - width: (this.gridSize[0] * raw.dimensions[0]) + 'px', - height: (this.gridSize[1] * raw.dimensions[1]) + 'px', - minWidth: (this.gridSize[0] * raw.dimensions[0]) + 'px', - minHeight: (this.gridSize[1] * raw.dimensions[1]) + 'px' - }; - } - - observeProperties() { - // Not implemented - } - - x() { - // Not implemented - } - - y() { - // Not implemented - } - - width() { - // Not implemented - } - - height() { - // Not implemented - } - - hasFrame() { - // Not implemented - } - } - - return ViewConfiguration; - } - ); \ No newline at end of file diff --git a/src/plugins/displayLayout/components/BoxView.vue b/src/plugins/displayLayout/components/BoxView.vue index ca2d3a3cbb..0a9bb359c8 100644 --- a/src/plugins/displayLayout/components/BoxView.vue +++ b/src/plugins/displayLayout/components/BoxView.vue @@ -21,9 +21,13 @@ *****************************************************************************/ \ No newline at end of file + + \ No newline at end of file diff --git a/src/plugins/displayLayout/components/DisplayLayout.vue b/src/plugins/displayLayout/components/DisplayLayout.vue index 869a06e755..dbdf12d208 100644 --- a/src/plugins/displayLayout/components/DisplayLayout.vue +++ b/src/plugins/displayLayout/components/DisplayLayout.vue @@ -37,15 +37,16 @@ v-if="gridSize[1] >= 3" :style="[{ backgroundSize: '100%' + gridSize[1] + 'px' }]"> - - + + @@ -85,112 +86,74 @@ \ No newline at end of file + + diff --git a/src/plugins/displayLayout/components/ImageView.vue b/src/plugins/displayLayout/components/ImageView.vue index 2d9ce9ac7d..17fa360f54 100644 --- a/src/plugins/displayLayout/components/ImageView.vue +++ b/src/plugins/displayLayout/components/ImageView.vue @@ -21,9 +21,13 @@ *****************************************************************************/ \ No newline at end of file diff --git a/src/plugins/displayLayout/components/LayoutItem.vue b/src/plugins/displayLayout/components/LayoutFrame.vue similarity index 63% rename from src/plugins/displayLayout/components/LayoutItem.vue rename to src/plugins/displayLayout/components/LayoutFrame.vue index 4744455a07..4a51793f97 100644 --- a/src/plugins/displayLayout/components/LayoutItem.vue +++ b/src/plugins/displayLayout/components/LayoutFrame.vue @@ -21,14 +21,16 @@ *****************************************************************************/