mirror of
https://github.com/nasa/openmct.git
synced 2025-04-26 22:10:03 +00:00
Use ng-model when communicating state to/from the tree in browse mode. This will simplify implementation of the Locator control, which also uses a tree, but which should not set navigation state. WTD-593.
72 lines
2.7 KiB
JavaScript
72 lines
2.7 KiB
JavaScript
/*global define,Promise*/
|
|
|
|
/**
|
|
* Module defining BrowseController. Created by vwoeltje on 11/7/14.
|
|
*/
|
|
define(
|
|
[],
|
|
function () {
|
|
"use strict";
|
|
|
|
var ROOT_OBJECT = "ROOT";
|
|
|
|
/**
|
|
* The BrowseController is used to populate the initial scope in Browse
|
|
* mode. It loads the root object from the objectService and makes it
|
|
* available in the scope for Angular template's; this is the point at
|
|
* which Angular templates first have access to the domain object
|
|
* hierarchy.
|
|
*
|
|
* @constructor
|
|
*/
|
|
function BrowseController($scope, objectService, navigationService) {
|
|
// Callback for updating the in-scope reference to the object
|
|
// that is currently navigated-to.
|
|
function setNavigation(domainObject) {
|
|
$scope.navigatedObject = domainObject;
|
|
$scope.treeModel.selectedObject = domainObject;
|
|
}
|
|
|
|
// Load the root object, put it in the scope.
|
|
// Also, load its immediate children, and (possibly)
|
|
// navigate to one of them, so that navigation state has
|
|
// a useful initial value.
|
|
objectService.getObjects([ROOT_OBJECT]).then(function (objects) {
|
|
var composition = objects[ROOT_OBJECT].useCapability("composition");
|
|
$scope.domainObject = objects[ROOT_OBJECT];
|
|
if (composition) {
|
|
composition.then(function (c) {
|
|
// Check if an object has been navigated-to already...
|
|
if (!navigationService.getNavigation()) {
|
|
// If not, pick a default as the last
|
|
// root-level component (usually "mine")
|
|
navigationService.setNavigation(c[c.length - 1]);
|
|
} else {
|
|
// Otherwise, just expose it in the scope
|
|
$scope.navigatedObject = navigationService.getNavigation();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// Provide a model for the tree to modify
|
|
$scope.treeModel = {
|
|
selectedObject: navigationService.getNavigation()
|
|
};
|
|
|
|
// Listen for changes in navigation state.
|
|
navigationService.addListener(setNavigation);
|
|
|
|
// Also listen for changes which come from the tree
|
|
$scope.$watch("treeModel.selectedObject", setNavigation);
|
|
|
|
// Clean up when the scope is destroyed
|
|
$scope.$on("$destroy", function () {
|
|
navigationService.removeListener(setNavigation);
|
|
});
|
|
|
|
}
|
|
|
|
return BrowseController;
|
|
}
|
|
); |