@doc alias="layout" hierarchy="GMLDOM">
Interactor Layout Aspect
(c) SAP AG 2003-2006. All rights reserved.
//NOTE: TEMP: This class is a temporary workaround - it will be removed!!!
Aspect GridViewLayout for Layout; inherit InteractorLayout;
//attach gml2:GridView;
virtual property headerHeight = #[LYT_COLUMN_HEAD_HEIGHT];
override virtual method repaint(attr)
this.supercall();
var isEmpty = ISEMPTY(base.controls);
this.contents.style.borderLeftWidth = isEmpty ? 1 : 0;
if (!isEmpty && attr == "scaleMode") this.repaintContents(attr);
end
override virtual method buildRearrangeParams(focusWidget, operation, contentsSize, syncElems)
var board = this.board;
var sessionCache = board.sessionCache;
var controls = base.controls;
var bSize = SPLIT(base.size);
var selectionWidth = this.getContentsLeftGap();
var rootInfo = {
object : base, // this object (interactor/group/control)
w : bSize[0] - selectionWidth - 1, // -1 is for border (left only), otherwise scrollbar appears
h : this.getContentsOffsetHeight(bSize) - 1, // -1 is for border (top only), otherwise scrollbar appears
focus : null, // if children contain focusWidget's ctlInfo, this points to it.
scaleMode : base.scaleMode||'fix',
operation : operation,
children : [], // ctlInfo of child objects (groups/controls)
syncElems : syncElems,
skipColDefs: sessionCache[base.id + '.skipColDefs']||false
};
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]||-1),
y : INT(pos[1]||-1),
w : INT(size[0]||-100),
h : INT(size[1]||-1),
minWidth : ctlWidget&&ctlWidget.minWidth||16,
index : ctl.index, // object's index in its parent.
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 onModelRemove(evt)
this.supercall();
var noControls = ISEMPTY(base.controls);
this.selectionRow.style.display = noControls ? 'none' : 'block';
var cst = this.contents.style;
var selectionWidth = this.getContentsLeftGap();
cst.left = selectionWidth;
cst.width = this.elem.offsetWidth - selectionWidth;
cst.borderLeftWidth = noControls ? 1 : 0;
end
override virtual method repaintContents(attr)
this.supercall();
if (attr == 'showHeading') this.resizeFeatures();
end
override virtual method adjustDndArrows(clientX, clientY, currentElement, checkParent)
var data = this.supercall();
try {
var board = this.board;
var curWidget = board.getWidget(currentElement);
// currentElement from palette OR [from same table AND NOT from toolbar]
if (!currentElement || (curWidget.getBox() == this && !board.getWidget(currentElement.parentElement))) {
var r = this.getAbsoluteContentRect();
var leftShift = r.x - this.getContentScroll().w, topShift = r.y;
var arrows = base.arrows;
clientX = clientX - leftShift + board.editbox.scrollLeft;
for (var i=0, len = arrows.length; i= clientX) {
if (checkParent && curWidget && curWidget.base.index + 1 == i) aData = arrows[i - 1];
data.top = topShift - this.arrowImageTopShift;
data.left = leftShift + aData.left;
data.oneArrowVisible = true;
data.newIndex = i - 0.5;
data.newOffX = arrows[i].left;
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.oneArrowVisible = true;
data.dropObjVisible = true;
}
catch(ex) {}
return data;
end
/////////////////////////////////////////////////
///// row count calc methods
////////////////////////////////////////////////
virtual method checkRows(operation, calcContentsHeight)
if (operation != 'move') {
var gridRows = this.getRowsFromHeight(calcContentsHeight);
if (base.gridRows != gridRows) {
base.setProperty('gridRows', gridRows, true);
if ($ENV.contextElement == base) $ENV.fireSyncState({prop:true});
}
}
end
virtual method getRowsFromHeight(calcContentsHeight)
var contentsHeight = calcContentsHeight ? INT(SPLIT(base.size)[1]) - this.getFeaturesHeight() : 0;
var tableHeight = (contentsHeight||this.contents.offsetHeight||0) - (base.showHeading && !ISEMPTY(base.controls) ? this.headerHeight : 0) - 2; // 2px for border
if (tableHeight <= 0) return 1;
var rowCount = parseInt(tableHeight / #[LYT_COLUMN_ROW_HEIGHT]);
if (rowCount != tableHeight / #[LYT_COLUMN_ROW_HEIGHT]) rowCount++;
if(rowCount < 1) rowCount = 1; //minimum count
return rowCount;
end
override virtual method checkOrganizer(focusWidget, operation)
var controls = base.controls;
var sessionCache = this.board.sessionCache;
if (operation != 'move' && base.scaleMode != 'fix') {
sessionCache[base.id + '.skipColDefs'] = true;
return;
}
var columns = base.colDefs2Object().columns;
var nColumns = [];
var children = [];
for (var iter in controls) {
var ctl = controls[iter];
var pos = SPLIT(sessionCache[ctl.id + '_pos'] ? sessionCache[ctl.id + '_pos'].value : ctl.pos);
var ctlInfo = {
index : ctl.index,
x : INT(pos[0])
}
children.push(ctlInfo);
}
SORTN(children, 'x');
for (var i = 0, len = children.length; i < len; i++) {
var ctlInfo = children[i];
nColumns[i] = columns[ctlInfo.index];
}
base.setProperty('colDefs', base.colDefs2String(nColumns), true);
end