@doc hierarchy="GMLDOM">
Layout Code
(c) SAP AG 2003-2006. All rights reserved.
Aspect ToolbandLayout for Layout; inherit ControlGroupLayout;
override virtual property type = 'toolband';
override virtual method layoutContents(focusWidget, operation)
var rootInfo = this.buildRearrangeParams(focusWidget, operation);
var changes = this.board.getChangesFromCache(rootInfo&&rootInfo.focus);
RULE('rearrangeWidgets', base, this.board, rootInfo, changes);
var repaint = !ISEMPTY(changes);
if (repaint) RULE('doApplyLayout', base, changes);
return repaint;
end
override virtual method buildRearrangeParams(focusWidget, operation, contentsSize, syncElems)
var board = this.board;
var sessionCache = board.sessionCache;
// TODO: try to find new solution
var withLabel = {
'core.gml2:InputField' :true,
'core.gml2:ComboBox' :true,
'core.gml2:DropDown' :true,
'core.gml2:DatePicker' :true,
'core.gml2:DateTimePicker' :true
};
var maxTBLabelWidth = board.textedit._maxTBLabelWidth;
var bSize = SPLIT(base.size);
var rootInfo = {
object : base,
w : INT(bSize[0]||160),
h : INT(bSize[1]||24),
focus : null, // if children contain focusWidget's ctlInfo, this points to it.
operation : operation,
children : [], // ctlInfo of child objects (groups/controls)
syncElems : syncElems
};
var controls = base.controls;
for (var iter in controls) {
var ctlWidget = board.getWidget(iter);
var ctl = controls[iter];
var pos = SPLIT(sessionCache[ctl.id + '_pos'] ? sessionCache[ctl.id + '_pos'].value : ctl.pos);
var size = SPLIT(sessionCache[ctl.id + '_size'] ? sessionCache[ctl.id + '_size'].value : ctl.size);
var ctlInfo = {
object : ctl,
x : INT(pos[0]||0),
y : INT(pos[1]||0),
w : INT(size[0]||(ctlWidget&&ctlWidget.defaultWidth)||100),
h : INT(size[1]||16),
index : ctl.index, // object's index in its parent. NOTE: DOM dependency
freeSize : ctlWidget&&ctlWidget.freeSize,
minWidth : ctlWidget&&ctlWidget.minWidth||0,
defaultWidth : ctlWidget&&ctlWidget.defaultWidth||0,
suportLabel : ctl.Class.fullname in withLabel,
labelWidth : ctlWidget&&ctlWidget.labelWidth||0,
maxTBLabelWidth : maxTBLabelWidth,
focus : null, // if children contain focusWidget's ctlInfo, this points to it.
children : null // ctlInfo of child objects (groups/controls)
};
rootInfo.children.push(ctlInfo);
if (focusWidget && focusWidget.id == iter) rootInfo.focus = ctlInfo;
}
return rootInfo;
end
override virtual method adjustDndArrows(clientX, clientY, currentElement, checkParent)
var data = this.supercall();
try {
// currentElement from palette OR from same toolbar
var newParent = currentElement&¤tElement.parentElement&¤tElement.parentElement.parentElement&¤tElement.parentElement.parentElement.id == this.parentElement.id;
if (!currentElement || currentElement.parentElement.id == this.id || (currentElement.parentElement.parentElement && (currentElement.parentElement.parentElement.id == this.parentElement.id))) {
var r = this.getAbsoluteContentRect();
var leftShift = r.x, topShift = r.y;
var arrows = base.arrows;
var curWidget = this.board.getWidget(currentElement);
clientX += this.board.editbox.scrollLeft - leftShift;
clientY += this.board.editbox.scrollTop - topShift;
for (var i=0, len=arrows.length; i= clientX && aData.fromY <= clientY && aData.toY >= clientY) {
if (!newParent && checkParent && curWidget && curWidget.base.index + aData.rowNumner == i) aData = arrows[i - 1];
data.newIndex = arrows[i].index - 0.5;
data.top = topShift - this.arrowImageTopShift + aData.top;
data.left = leftShift + aData.left;
data.twoArrowVisible = true;
data.newOffX = arrows[i].left;
data.newOffY = arrows[i].top+3;
data.newParent = currentElement ? true : undefined;
data.dropObjLeft = r.x + this.getDropLeftShift();
data.dropObjTop = r.y;
data.dropObjWidth = r.w;
data.dropObjHeight = r.h;
data.dropObjVisible = true;
return data;
}
}
} else return tbWidget.adjustParentArrows(currentElement);
}
catch(ex) {}
return data;
end
override virtual method adjustParentArrows(currentElement)
var data = this.supercall();
try {
data.twoArrowVisible = true;
data.dropObjVisible = true;
var r = this.getAbsoluteContentRect();
if (base.arrows) {
var index = this.board.getWidget(currentElement).base.index;
var arrow = base.arrows[index];
var addToIndex = arrow.rowNumner ? arrow.rowNumner : 0;
arrow =base.arrows[index + addToIndex];
var left = arrow.left;
data.top = r.y - this.arrowImageTopShift + arrow.top;
data.left = r.x + left;
data.newOffX = left;
}
// data.dropObjLeft = r.x + this.getDropLeftShift();
// data.dropObjTop = r.y;
// data.dropObjWidth = r.w;
// data.dropObjHeight = r.h;
}
catch(ex) {}
return data;
end