diff options
author | Henry <akhenry@gmail.com> | 2017-10-25 19:08:19 +0300 |
---|---|---|
committer | Henry <akhenry@gmail.com> | 2017-10-25 19:08:22 +0300 |
commit | d2217f52f79bbb008adecef38f1ef6db450310f9 (patch) | |
tree | 75f42b5e7d88c84b7bcc5a9b841d1300a7582ae5 | |
parent | 7442768ced51167e4951a34cee48b2cde1bb9cf9 (diff) |
Added properties editor for 3D rover viewrover-properties-editor
-rw-r--r-- | index.html | 1 | ||||
-rw-r--r-- | src/plugins/plugins.js | 8 | ||||
-rw-r--r-- | src/plugins/roverView/RoverPropertiesAction.js | 126 | ||||
-rw-r--r-- | src/plugins/roverView/RoverPropertiesActionPolicy.js | 56 | ||||
-rw-r--r-- | src/plugins/roverView/plugin.js | 70 |
5 files changed, 259 insertions, 2 deletions
diff --git a/index.html b/index.html index db553988e..d7fcd3197 100644 --- a/index.html +++ b/index.html @@ -44,6 +44,7 @@ openmct.install(openmct.plugins.ExampleImagery()); openmct.install(openmct.plugins.UTCTimeSystem()); openmct.install(openmct.plugins.ImportExport()); + openmct.install(openmct.plugins.RoverView()); openmct.install(openmct.plugins.Conductor({ menuOptions: [ { diff --git a/src/plugins/plugins.js b/src/plugins/plugins.js index b381a1cfc..9a5003e45 100644 --- a/src/plugins/plugins.js +++ b/src/plugins/plugins.js @@ -27,7 +27,8 @@ define([ '../../platform/features/autoflow/plugin', './timeConductor/plugin', '../../example/imagery/plugin', - '../../platform/import-export/bundle' + '../../platform/import-export/bundle', + './roverView/plugin.js' ], function ( _, UTCTimeSystem, @@ -35,7 +36,8 @@ define([ AutoflowPlugin, TimeConductorPlugin, ExampleImagery, - ImportExport + ImportExport, + RoverView ) { var bundleMap = { CouchDB: 'platform/persistence/couch', @@ -121,5 +123,7 @@ define([ plugins.ExampleImagery = ExampleImagery; + plugins.RoverView = RoverView; + return plugins; }); diff --git a/src/plugins/roverView/RoverPropertiesAction.js b/src/plugins/roverView/RoverPropertiesAction.js new file mode 100644 index 000000000..85aab76c0 --- /dev/null +++ b/src/plugins/roverView/RoverPropertiesAction.js @@ -0,0 +1,126 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2017, 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. + *****************************************************************************/ + +/** + * Edit the properties of a domain object. Shows a dialog + * which should display a set of properties similar to that + * shown in the Create wizard. + */ +define( + [ + '../../../platform/commonUI/edit/src/actions/PropertiesDialog', + '../../../platform/core/src/types/TypeProperty' + ], + function (PropertiesDialog, TypeProperty) { + + /** + * Implements the "Edit Properties" action, which prompts the user + * to modify a domain object's properties. + * + * @param {DialogService} dialogService a service which will show the dialog + * @param {DomainObject} object the object to be edited + * @param {ActionContext} context the context in which this action is performed + * @memberof platform/commonUI/edit + * @implements {Action} + * @constructor + */ + function RoverPropertiesAction(dialogService, context) { + this.domainObject = (context || {}).domainObject; + this.dialogService = dialogService; + } + + RoverPropertiesAction.prototype.perform = function () { + var type = this.domainObject.getCapability('type'), + domainObject = this.domainObject, + dialogService = this.dialogService; + + // Update the domain object model based on user input + function updateModel(userInput, dialog) { + return domainObject.useCapability('mutation', function (model) { + dialog.updateModel(model, userInput); + }); + } + + function generateFormFromJoints(telemetry) { + var properties = Object.keys(telemetry).map(function (jointName) { + return new TypeProperty({ + name: jointName, + control: "textfield", + cssClass: "l-input-lg", + key: "joint." + jointName, + required: true, + property: [ + "configuration", + "telemetry", + jointName + ] + }); + }, {}); + + return { + getProperties: function () { + return properties; + } + } + } + + function showDialog(objType) { + var model = domainObject.getModel(); + var form = generateFormFromJoints(model.configuration.telemetry); + + // Create a dialog object to generate the form structure, etc. + var dialog = + new PropertiesDialog(form, domainObject.getModel()); + + // Show the dialog + return dialogService.getUserInput( + dialog.getFormStructure(), + dialog.getInitialFormValue() + ).then(function (userInput) { + // Update the model, if user input was provided + return userInput && updateModel(userInput, dialog); + }); + } + + return type && showDialog(type); + }; + + /** + * Filter this action for applicability against a given context. + * This will ensure that a domain object is present in the + * context. + */ + RoverPropertiesAction.appliesTo = function (context) { + var domainObject = (context || {}).domainObject, + type = domainObject && domainObject.getCapability('type'), + creatable = type && type.hasFeature('creation'); + + // Only allow creatable types to be edited + return domainObject && creatable && type.getKey() === 'webgl.rover.view'; + }; + + return RoverPropertiesAction; + } + +); + + diff --git a/src/plugins/roverView/RoverPropertiesActionPolicy.js b/src/plugins/roverView/RoverPropertiesActionPolicy.js new file mode 100644 index 000000000..66c505a34 --- /dev/null +++ b/src/plugins/roverView/RoverPropertiesActionPolicy.js @@ -0,0 +1,56 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2017, 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 () { + + /** + * Policy controlling when the `edit` and/or `properties` actions + * can appear as applicable actions of the `view-control` category + * (shown as buttons in the top-right of browse mode.) + * @memberof platform/commonUI/edit + * @constructor + * @implements {Policy.<Action, ActionContext>} + */ + function RoverPropertiesActionPolicy(policyService) { + this.policyService = policyService; + } + + RoverPropertiesActionPolicy.prototype.allow = function (action, context) { + var key = action.getMetadata().key; + var category = (context || {}).category; + var domainObject = (context || {}).domainObject; + var objectType = domainObject.useCapability('type'); + var typeKey = objectType.getKey(); + + if (key === 'properties' && category === 'view-control' && domainObject) { + return typeKey !== 'webgl.rover.view'; + } + + // Like all policies, allow by default. + return true; + }; + + return RoverPropertiesActionPolicy; + } +); diff --git a/src/plugins/roverView/plugin.js b/src/plugins/roverView/plugin.js new file mode 100644 index 000000000..2105e7b5b --- /dev/null +++ b/src/plugins/roverView/plugin.js @@ -0,0 +1,70 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2017, 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([ + './RoverPropertiesAction', + './RoverPropertiesActionPolicy' + ], function ( + RoverPropertiesAction, + RoverPropertiesActionPolicy + ) { + return function () { + return function (openmct) { + openmct.legacyExtension('actions', { + "key": "rover-properties", + "category": [ + "contextual", + "view-control" + ], + "implementation": RoverPropertiesAction, + "cssClass": "major icon-pencil", + "name": "Edit Properties...", + "description": "Edit properties of this object.", + "depends": [ + "dialogService" + ] + }); + + openmct.legacyExtension('policies', { + "category": "action", + "implementation": RoverPropertiesActionPolicy + }); + + // Dummy rover view type for testing +/* openmct.types.addType('webgl.rover.view', { + key: 'webgl.rover.view', + name: 'Rover View', + cssClass: 'icon-image', + description: 'For development use.', + creatable: true, + initialize: function (object) { + object.configuration = { + telemetry: { + 'joint1': 'value1', + 'joint2': 'value2' + } + } + } + });*/ + }; + }; +}); |