UNPKG

webgme

Version:

Web-based Generic Modeling Environment

140 lines (116 loc) 5.07 kB
/*globals define, WebGMEGlobal*/ /*jshint browser: true*/ /** * @author pmeijer / https://github.com/pmeijer */ define(['js/RegistryKeys', 'js/Constants'], function (REGISTRY_KEYS, CONSTANTS) { 'use strict'; function ObjectBrowserControlBase(client, treeBrowser, logger) { var self = this; this._client = client; this._treeBrowser = treeBrowser; this._treeBrowser.onMakeNodeSelected = this._makeNodeSelected; this._treeBrowser.getDragEffects = function (/*el*/) { var nodeIds = self._treeBrowser.getSelectedIDs(), node, hasLibraryRoot = false, hasLibraryElement = false, i; for (i = 0; i < nodeIds.length; i += 1) { node = self._client.getNode(nodeIds[i]); if (node) { if (node.isLibraryRoot()) { hasLibraryRoot = true; } if (node.isLibraryElement()) { hasLibraryElement = true; } } } if (hasLibraryRoot) { return []; } else if (hasLibraryElement) { return [self._treeBrowser.DRAG_EFFECTS.DRAG_COPY, self._treeBrowser.DRAG_EFFECTS.DRAG_CREATE_POINTER, self._treeBrowser.DRAG_EFFECTS.DRAG_CREATE_INSTANCE, self._treeBrowser.DRAG_EFFECTS.DRAG_SET_REPLACEABLE, self._treeBrowser.DRAG_EFFECTS.DRAG_ADD_MEMBER ]; } return [self._treeBrowser.DRAG_EFFECTS.DRAG_COPY, self._treeBrowser.DRAG_EFFECTS.DRAG_MOVE, self._treeBrowser.DRAG_EFFECTS.DRAG_CREATE_POINTER, self._treeBrowser.DRAG_EFFECTS.DRAG_CREATE_INSTANCE, self._treeBrowser.DRAG_EFFECTS.DRAG_SET_REPLACEABLE, self._treeBrowser.DRAG_EFFECTS.DRAG_ADD_MEMBER ]; }; this._treeBrowser.getDragItems = function (/*el*/) { return self._treeBrowser.getSelectedIDs(); }; this._treeBrowser.onExtendMenuItems = function (nodeId, menuItems) { var nodeObj = self._client.getNode(nodeId); if (!nodeObj || nodeObj.isReadOnly() || nodeId === CONSTANTS.PROJECT_ROOT_ID) { delete menuItems.delete; delete menuItems.rename; delete menuItems.separatorOperationsStart; } }; //called from the TreeBrowserWidget when a node has been renamed this._treeBrowser.onNodeTitleChanged = function (nodeId, oldText, newText) { //send name update to the server client.setAttribute(nodeId, 'name', newText); //reject name change on client side - need server roundtrip to notify about the name change return false; }; //called from the TreeBrowserWidget when a node has been marked to "delete this" this._treeBrowser.onNodeDelete = function (selectedIds) { var i = selectedIds.length, node; //temporary fix to not allow deleting ROOT AND FCO while (i--) { node = client.getNode(selectedIds[i]); if (node && node.getBaseId() === null) { logger.warn('Can not delete item with ID: ' + selectedIds[i] + '. Possibly it is the ROOT or FCO'); selectedIds.splice(i, 1); } } client.deleteNodes(selectedIds); }; } ObjectBrowserControlBase.prototype.getIcon = function (nodeOrId, expanded) { var node, iconName; if (typeof nodeOrId === 'string') { node = this._client.getNode(nodeOrId); } else { node = nodeOrId; } if (node) { if (expanded) { iconName = WebGMEGlobal.SvgManager.getSvgUri(node, REGISTRY_KEYS.TREE_ITEM_EXPANDED_ICON) || WebGMEGlobal.SvgManager.getSvgUri(node, REGISTRY_KEYS.TREE_ITEM_COLLAPSED_ICON); } else { iconName = WebGMEGlobal.SvgManager.getSvgUri(node, REGISTRY_KEYS.TREE_ITEM_COLLAPSED_ICON) || WebGMEGlobal.SvgManager.getSvgUri(node, REGISTRY_KEYS.TREE_ITEM_EXPANDED_ICON); } } return iconName; }; ObjectBrowserControlBase.prototype.getMetaInfo = function (nodeObj) { var metaId = nodeObj.getMetaTypeId(), result = { name: '', isMetaNode: nodeObj.isMetaNode() }; if (metaId && this._client.getNode(metaId)) { result.name = this._client.getNode(metaId).getFullyQualifiedName(); } return result; }; ObjectBrowserControlBase.prototype._makeNodeSelected = function (nodeId) { WebGMEGlobal.State.registerActiveSelection([nodeId]); }; return ObjectBrowserControlBase; });