From 4387b8986f0726d11827b2eb32ea57de05d9fa77 Mon Sep 17 00:00:00 2001 From: hengsin Date: Thu, 20 May 2021 18:10:32 +0800 Subject: [PATCH] IDEMPIERE-4792 Bring back frozen column feature for desktop browser (#692) Incorporate workaround from zk tracker and re-eanble grid frozen columns for dekstop browser. --- .../WEB-INF/src/metainfo/zk/lang-addon.xml | 2 +- .../adempiere/webui/adwindow/GridView.java | 10 +++--- .../web/js/org/idempiere/commons/layout.js | 34 +++++++++++++++++++ org.adempiere.ui.zk/index.zul | 32 ++++++++++++++++- 4 files changed, 72 insertions(+), 6 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 109f703fb7..10c12434a5 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/org/adempiere/webui/adwindow/GridView.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridView.java index 3e0380b377..f9a98b9216 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridView.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridView.java @@ -61,6 +61,7 @@ import org.zkoss.zul.Cell; import org.zkoss.zul.Center; import org.zkoss.zul.Column; import org.zkoss.zul.Div; +import org.zkoss.zul.Frozen; import org.zkoss.zul.Paging; import org.zkoss.zul.Row; import org.zkoss.zul.Vlayout; @@ -299,6 +300,10 @@ public class GridView extends Vlayout implements EventListener, IdSpace, setupColumns(); render(); + if (listbox.getFrozen() != null){ + listbox.getFrozen().setWidgetOverride("syncScroll", "function (){idempiere.syncScrollFrozen(this);}"); + } + updateListIndex(); this.init = true; @@ -528,9 +533,7 @@ public class GridView extends Vlayout implements EventListener, IdSpace, Columns columns = new Columns(); //frozen not working well on tablet devices yet - //frozen is implemented poorly on zk ce, not working with scroll and white-space wrap //unlikely to be fixed since the working 'smooth scrolling frozen' is a zk ee only feature - /* if (!ClientInfo.isMobile()) { Frozen frozen = new Frozen(); @@ -538,8 +541,7 @@ public class GridView extends Vlayout implements EventListener, IdSpace, frozen.setColumns(2); listbox.appendChild(frozen); } - */ - + org.zkoss.zul.Column selection = new Column(); selection.setHeight("2em"); ZKUpdateUtil.setWidth(selection, "22px"); 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 47540fd35b..a3ed1691c7 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 @@ -13,3 +13,37 @@ window.idempiere.scrollToRow = function(uuid){ } }; +//overload for recalculate width of grid frozen scroll +window.idempiere.syncScrollFrozen = function(wgt){ + 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; + } + for (var i = frozens; i < cells.length; i++){ + totalWidth -= cells[i].offsetWidth; + toScroll++; + if (totalWidth <= availableWidth) { + break; + } + } + + if (toScroll > 0) + scroll.firstChild.style.width = jq.px0(availableWidth+(toScroll * 50)); + } + + wgt.$syncScroll () +} \ No newline at end of file diff --git a/org.adempiere.ui.zk/index.zul b/org.adempiere.ui.zk/index.zul index 287f808eab..09508cbd74 100644 --- a/org.adempiere.ui.zk/index.zul +++ b/org.adempiere.ui.zk/index.zul @@ -13,6 +13,12 @@ Copyright (C) 2007 Ashley G Ramdass. + table > tbody > tr.z-columns > th.z-column.hiddencol > .z-column-content { + white-space: nowrap !important; + text-overflow: unset !important; + } +"?>