Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nasa/openmct.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenry <akhenry@gmail.com>2017-10-25 19:08:19 +0300
committerHenry <akhenry@gmail.com>2017-10-25 19:08:22 +0300
commitd2217f52f79bbb008adecef38f1ef6db450310f9 (patch)
tree75f42b5e7d88c84b7bcc5a9b841d1300a7582ae5
parent7442768ced51167e4951a34cee48b2cde1bb9cf9 (diff)
Added properties editor for 3D rover viewrover-properties-editor
-rw-r--r--index.html1
-rw-r--r--src/plugins/plugins.js8
-rw-r--r--src/plugins/roverView/RoverPropertiesAction.js126
-rw-r--r--src/plugins/roverView/RoverPropertiesActionPolicy.js56
-rw-r--r--src/plugins/roverView/plugin.js70
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'
+ }
+ }
+ }
+ });*/
+ };
+ };
+});