From cbb3bf6614520f8605671e23979a445e630579ca Mon Sep 17 00:00:00 2001 From: hengsin Date: Fri, 5 Nov 2021 19:24:17 +0800 Subject: [PATCH] IDEMPIERE-5024 Horizontal scrolling anomaly (#967) --- .../WEB-INF/src/metainfo/zk/lang-addon.xml | 2 +- .../web/js/org/idempiere/commons/layout.js | 98 ++++++++++++++----- 2 files changed, 74 insertions(+), 26 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml b/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml index cceb26b442..508a60977f 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml +++ b/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml @@ -48,7 +48,7 @@ Copyright (C) 2007 Ashley G Ramdass (ADempiere WebUI). - + diff --git a/org.adempiere.ui.zk/WEB-INF/src/web/js/org/idempiere/commons/layout.js b/org.adempiere.ui.zk/WEB-INF/src/web/js/org/idempiere/commons/layout.js index a3ed1691c7..3e9a8a9fca 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/web/js/org/idempiere/commons/layout.js +++ b/org.adempiere.ui.zk/WEB-INF/src/web/js/org/idempiere/commons/layout.js @@ -14,36 +14,84 @@ window.idempiere.scrollToRow = function(uuid){ }; //overload for recalculate width of grid frozen scroll +//base on _onSizeLater(wgt) from Frozen.js window.idempiere.syncScrollFrozen = function(wgt){ - var parent = wgt.parent; - + var parent = wgt.parent; if (parent.eheadtbl && parent._nativebar) { - var scroll = wgt.$n('scrollX'); - var cells = parent._getFirstRowCells(parent.eheadrows); - var frozens = wgt._columns; - - var frozenWidth = 0; - for (var i = 0; i < frozens; i++) - frozenWidth += cells[i].offsetWidth; - - var bodyWidth = parent.$n('body').offsetWidth; - var availableWidth = bodyWidth - frozenWidth; - var totalWidth = 0; - var toScroll = 0; - for (var i = frozens; i < cells.length; i++){ - totalWidth += cells[i].offsetWidth; + var cells = parent._getFirstRowCells(parent.eheadrows), + head = parent.head, + totalcols = cells.length - jq(head).find(head.$n('bar')).length, + columns = wgt._columns, + leftWidth = 0; + + //B70-ZK-2553: one may specify frozen without any real column + if (!cells || totalcols <= 0) { + //no need to do the following computation since there is no any column + return; } - for (var i = frozens; i < cells.length; i++){ - totalWidth -= cells[i].offsetWidth; - toScroll++; - if (totalWidth <= availableWidth) { - break; + + for (var i = columns; i < totalcols; i++) { + var n = cells[i], + hdWgt = zk.Widget.$(n), + isVisible = hdWgt && hdWgt.isVisible(); + if (!isVisible) + continue; + if (n.offsetWidth==0 ) { + if (hdWgt._origWd && hdWgt._origWd.indexOf('px')>0) + n.style.width = hdWgt._origWd; + else if (hdWgt._hflexWidth && hdWgt._hflexWidth > 0) + n.style.width = jq.px(hdWgt._hflexWidth); } } - if (toScroll > 0) - scroll.firstChild.style.width = jq.px0(availableWidth+(toScroll * 50)); + for (var i = 0; i < columns; i++) + leftWidth += cells[i].offsetWidth; + + parent._deleteFakeRow(parent.eheadrows); + + wgt.$n('cave').style.width = jq.px0(leftWidth); + var scroll = wgt.$n('scrollX'), + width = parent.$n('body').offsetWidth; + + // B70-ZK-2074: Resize forzen's width as meshwidget's body. + parent.$n('frozen').style.width = jq.px0(width); + width -= leftWidth; + scroll.style.width = jq.px0(width); + var rightWidth = 0; + var toScroll = 0; + for (var i = columns; i < cells.length; i++){ + var hdWgt = zk.Widget.$(cells[i]); + var isVisible = hdWgt && hdWgt.isVisible(); + if (!isVisible) + continue; + if (cells[i].offsetWidth==0) { + if (hdWgt._origWd && hdWgt._origWd.indexOf('px')>0) + rightWidth += parseInt(hdWgt._origWd,10); + else if (hdWgt._hflexWidth && hdWgt._hflexWidth > 0) + rightWidth += hdWgt._hflexWidth; + + } else { + rightWidth += cells[i].offsetWidth; + } + } + for (var i = columns; i < cells.length; i++){ + var ow=cells[i].offsetWidth; + if (ow==0) { + var hdWgt = zk.Widget.$(cells[i]); + if (hdWgt._origWd && hdWgt._origWd.indexOf('px')>0) + ow = parseInt(hdWgt._origWd,10); + else if (hdWgt._hflexWidth && hdWgt._hflexWidth > 0) + ow = hdWgt._hflexWidth; + } + rightWidth -= ow; + toScroll++; + if (rightWidth <= width) { + break; + } + } + if (toScroll > 0) { + scroll.firstChild.style.width = jq.px0(width+(toScroll * 50)); + } } - - wgt.$syncScroll () + wgt.$syncScroll (); } \ No newline at end of file