<@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