forked from extern/egroupware
Changes to action system:
- Change selected to not start at global root - fixes key handler only working for 1 app - Add depth limit for finding action / object (depth first search) - Use depth limit when looking for top level application action/object to avoid crossing apps
This commit is contained in:
parent
7879e7ac2e
commit
35c70fea93
@ -400,7 +400,8 @@ var et2_DOMWidget = et2_widget.extend(et2_IDOMNode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the action manager and add some actions to it
|
// Initialize the action manager and add some actions to it
|
||||||
var gam = egw_getAppActionManager();
|
// Only look 1 level deep
|
||||||
|
var gam = egw_getActionManager(this.egw().appName,true,1);
|
||||||
if(typeof this._actionManager != "object")
|
if(typeof this._actionManager != "object")
|
||||||
{
|
{
|
||||||
if(gam.getActionById(this.id) != null)
|
if(gam.getActionById(this.id) != null)
|
||||||
|
@ -327,14 +327,16 @@ var et2_dataview_selectionManager = Class.extend(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getElementRelatively (_step) {
|
function getElementRelatively (_step) {
|
||||||
var count = self._total;
|
// Get a reasonable number of iterations - not all
|
||||||
|
var total = Math.max(1,Math.min(Object.keys(self._indexMap).length,50));
|
||||||
|
var count = total;
|
||||||
var element = null;
|
var element = null;
|
||||||
var idx = _entry.idx;
|
var idx = _entry.idx;
|
||||||
while(element == null && count > 0 && idx <= self._total)
|
while(element == null && count > 0 && idx <= total)
|
||||||
{
|
{
|
||||||
count--;
|
count--;
|
||||||
element = getIndexAO(Math.max(0,
|
element = getIndexAO(Math.max(0,
|
||||||
Math.min(self._total - 1, idx += _step)));
|
Math.min(self._total||total - 1, idx += _step)));
|
||||||
}
|
}
|
||||||
return element;
|
return element;
|
||||||
};
|
};
|
||||||
|
@ -127,12 +127,8 @@ var et2_nextmatch_controller = et2_dataview_controller.extend(et2_IDataProvider,
|
|||||||
if(_actions == null) _actions = [];
|
if(_actions == null) _actions = [];
|
||||||
|
|
||||||
// Initialize the action manager and add some actions to it
|
// Initialize the action manager and add some actions to it
|
||||||
// To work around a bug in action system we call global actionManger
|
// Only look 1 level deep
|
||||||
// of an application NOT just appname, but prefix it with "__"
|
var gam = egw_getActionManager(this.egw.appName,true,1);
|
||||||
// If it is called just appname, actionLinks of actions with id
|
|
||||||
// of an application fetch that applications menu as children,
|
|
||||||
// if that applications tab is open in toplevel window.
|
|
||||||
var gam = egw_getActionManager('__'+this.egw.appName);
|
|
||||||
this._actionManager = gam.addAction("actionManager", uid);
|
this._actionManager = gam.addAction("actionManager", uid);
|
||||||
this._actionManager.updateActions(_actions, this.egw.appName);
|
this._actionManager.updateActions(_actions, this.egw.appName);
|
||||||
var data = this._actionManager.data;
|
var data = this._actionManager.data;
|
||||||
@ -166,8 +162,9 @@ var et2_nextmatch_controller = et2_dataview_controller.extend(et2_IDataProvider,
|
|||||||
}, this));
|
}, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the object manager
|
// Initialize the object manager - look for application
|
||||||
var gom = egw_getObjectManager(this.egw.appName);
|
// object manager 1 level deep
|
||||||
|
var gom = egw_getObjectManager(this.egw.appName,true,1);
|
||||||
this._objectManager = gom.addObject(
|
this._objectManager = gom.addObject(
|
||||||
new egwActionObjectManager(uid, this._actionManager));
|
new egwActionObjectManager(uid, this._actionManager));
|
||||||
this._objectManager.flags = this._objectManager.flags
|
this._objectManager.flags = this._objectManager.flags
|
||||||
|
@ -329,7 +329,8 @@ var et2_tree = et2_inputWidget.extend(
|
|||||||
_link_actions: function(actions)
|
_link_actions: function(actions)
|
||||||
{
|
{
|
||||||
// Get the top level element for the tree
|
// Get the top level element for the tree
|
||||||
var objectManager = egw_getAppObjectManager(true);
|
// Only look 1 level deep for application object manager
|
||||||
|
var objectManager = egw_getObjectManager(this.egw().appName,true,1);
|
||||||
var treeObj = objectManager.getObjectById(this.id);
|
var treeObj = objectManager.getObjectById(this.id);
|
||||||
if (treeObj == null) {
|
if (treeObj == null) {
|
||||||
// Add a new container to the object manager which will hold the tree
|
// Add a new container to the object manager which will hold the tree
|
||||||
|
@ -28,11 +28,18 @@ var egw_globalObjectManager = null;
|
|||||||
* @param _id is the name of the sub-actionManager which should be returned.
|
* @param _id is the name of the sub-actionManager which should be returned.
|
||||||
* If the action manager does not exist right now, it is created. If the
|
* If the action manager does not exist right now, it is created. If the
|
||||||
* parameter is ommited or null, the global action manager is returned.
|
* parameter is ommited or null, the global action manager is returned.
|
||||||
|
* @param {boolean} [_create=true] If an objectManager with the given id is not
|
||||||
|
* found, it will be created at the top level.
|
||||||
|
* @param {number} [_search_depth=Infinite] How deep into existing action children
|
||||||
|
* to search.
|
||||||
*/
|
*/
|
||||||
function egw_getActionManager(_id, _create) {
|
function egw_getActionManager(_id, _create,_search_depth) {
|
||||||
if (typeof _create == 'undefined') {
|
if (typeof _create == 'undefined') {
|
||||||
_create = true;
|
_create = true;
|
||||||
}
|
}
|
||||||
|
if (typeof _search_depth == "undefined") {
|
||||||
|
_search_depth = Number.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
// Check whether the global action manager had been created, if not do so
|
// Check whether the global action manager had been created, if not do so
|
||||||
var res = egw_globalActionManager;
|
var res = egw_globalActionManager;
|
||||||
@ -42,7 +49,7 @@ function egw_getActionManager(_id, _create) {
|
|||||||
|
|
||||||
// Check whether the sub-action manager exists, if not, create it
|
// Check whether the sub-action manager exists, if not, create it
|
||||||
if (typeof _id != 'undefined' && _id != null) {
|
if (typeof _id != 'undefined' && _id != null) {
|
||||||
res = egw_globalActionManager.getActionById(_id);
|
res = egw_globalActionManager.getActionById(_id,_search_depth);
|
||||||
if (res == null && _create) {
|
if (res == null && _create) {
|
||||||
res = egw_globalActionManager.addAction("actionManager", _id);
|
res = egw_globalActionManager.addAction("actionManager", _id);
|
||||||
}
|
}
|
||||||
@ -58,11 +65,18 @@ function egw_getActionManager(_id, _create) {
|
|||||||
* @param _id is the name of the sub-object manager should be returned. If the
|
* @param _id is the name of the sub-object manager should be returned. If the
|
||||||
* object manager does not exists right now, it is created. If the parameter
|
* object manager does not exists right now, it is created. If the parameter
|
||||||
* is ommited or null, the global object manager is returned.
|
* is ommited or null, the global object manager is returned.
|
||||||
|
* @param {boolean} [_create=true] If an objectManager with the given id is not
|
||||||
|
* found, it will be created at the top level.
|
||||||
|
* @param {number} [_search_depth=Infinite] How deep into existing action children
|
||||||
|
* to search.
|
||||||
*/
|
*/
|
||||||
function egw_getObjectManager(_id, _create) {
|
function egw_getObjectManager(_id, _create, _search_depth) {
|
||||||
if (typeof _create == "undefined") {
|
if (typeof _create == "undefined") {
|
||||||
_create = true;
|
_create = true;
|
||||||
}
|
}
|
||||||
|
if (typeof _search_depth == "undefined") {
|
||||||
|
_search_depth = Number.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
// Check whether the global object manager exists
|
// Check whether the global object manager exists
|
||||||
var res = egw_globalObjectManager;
|
var res = egw_globalObjectManager;
|
||||||
@ -74,7 +88,7 @@ function egw_getObjectManager(_id, _create) {
|
|||||||
|
|
||||||
// Check whether the sub-object manager exists, if not, create it
|
// Check whether the sub-object manager exists, if not, create it
|
||||||
if (typeof _id != 'undefined' && _id != null) {
|
if (typeof _id != 'undefined' && _id != null) {
|
||||||
res = egw_globalObjectManager.getObjectById(_id);
|
res = egw_globalObjectManager.getObjectById(_id, _search_depth);
|
||||||
if (res == null && _create) {
|
if (res == null && _create) {
|
||||||
res = new egwActionObjectManager(_id,
|
res = new egwActionObjectManager(_id,
|
||||||
egw_getActionManager(_id));
|
egw_getActionManager(_id));
|
||||||
@ -89,14 +103,14 @@ function egw_getObjectManager(_id, _create) {
|
|||||||
* Returns the object manager for the current application
|
* Returns the object manager for the current application
|
||||||
*/
|
*/
|
||||||
function egw_getAppObjectManager(_create) {
|
function egw_getAppObjectManager(_create) {
|
||||||
return egw_getObjectManager(egw_getAppName(), _create);
|
return egw_getObjectManager(egw_getAppName(), _create,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the action manager for the current application
|
* Returns the action manager for the current application
|
||||||
*/
|
*/
|
||||||
function egw_getAppActionManager(_create) {
|
function egw_getAppActionManager(_create) {
|
||||||
return egw_getActionManager(egw_getAppName(), _create);
|
return egw_getActionManager(egw_getAppName(), _create,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -185,22 +199,31 @@ egwAction.prototype.remove = function () {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Searches for a specific action with the given id
|
* Searches for a specific action with the given id
|
||||||
|
*
|
||||||
|
* @param {string|number} id ID of the action to find
|
||||||
|
* @param {number} [_search_depth=Infinite] How deep into existing action children
|
||||||
|
* to search.
|
||||||
|
*
|
||||||
|
* @return {egwAction|null}
|
||||||
*/
|
*/
|
||||||
egwAction.prototype.getActionById = function(_id)
|
egwAction.prototype.getActionById = function(_id,_search_depth)
|
||||||
{
|
{
|
||||||
// If the current action object has the given id, return this object
|
// If the current action object has the given id, return this object
|
||||||
if (this.id == _id)
|
if (this.id == _id)
|
||||||
{
|
{
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
if (typeof _search_depth == "undefined") {
|
||||||
|
_search_depth = Number.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
// If this element is capable of having children, search those for the given
|
// If this element is capable of having children, search those for the given
|
||||||
// action id
|
// action id
|
||||||
if (this.canHaveChildren)
|
if (this.canHaveChildren)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < this.children.length; i++)
|
for (var i = 0; i < this.children.length && _search_depth > 0; i++)
|
||||||
{
|
{
|
||||||
var elem = this.children[i].getActionById(_id);
|
var elem = this.children[i].getActionById(_id,_search_depth-1);
|
||||||
if (elem)
|
if (elem)
|
||||||
{
|
{
|
||||||
return elem;
|
return elem;
|
||||||
@ -933,16 +956,19 @@ egwActionObject.prototype.setAOI = function(_aoi)
|
|||||||
* Returns the object from the tree with the given ID
|
* Returns the object from the tree with the given ID
|
||||||
*/
|
*/
|
||||||
//TODO: Add search function to egw_action_commons.js
|
//TODO: Add search function to egw_action_commons.js
|
||||||
egwActionObject.prototype.getObjectById = function(_id)
|
egwActionObject.prototype.getObjectById = function(_id, _search_depth)
|
||||||
{
|
{
|
||||||
if (this.id == _id)
|
if (this.id == _id)
|
||||||
{
|
{
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
if (typeof _search_depth == "undefined") {
|
||||||
|
_search_depth = Number.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0; i < this.children.length; i++)
|
for (var i = 0; i < this.children.length && _search_depth > 0; i++)
|
||||||
{
|
{
|
||||||
var obj = this.children[i].getObjectById(_id);
|
var obj = this.children[i].getObjectById(_id, _search_depth - 1);
|
||||||
if (obj)
|
if (obj)
|
||||||
{
|
{
|
||||||
return obj;
|
return obj;
|
||||||
@ -1268,9 +1294,7 @@ egwActionObject.prototype.getIndex = function()
|
|||||||
*/
|
*/
|
||||||
egwActionObject.prototype.getFocusedObject = function()
|
egwActionObject.prototype.getFocusedObject = function()
|
||||||
{
|
{
|
||||||
/*var cr = this.getContainerRoot();*/
|
return this.focusedChild || null;
|
||||||
var cr = this.getRootObject();
|
|
||||||
return cr ? cr.focusedChild : null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user