From 42b552710593be7c9b18c08e379dd84af04cc619 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Fri, 5 Mar 2010 08:31:08 +0000 Subject: [PATCH] [LMS-1403] fixed bug with unnecessary reload of section data; minor refactorings and improvements SVN: 15052 --- .../application/ServerRequestQueue.java | 1 + .../application/SingleSectionPanel.java | 24 ++++----- .../application/ui/widget/SectionsPanel.java | 52 +++++-------------- 3 files changed, 25 insertions(+), 52 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java index 8e7da07565a..69cec81866f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java @@ -118,6 +118,7 @@ public class ServerRequestQueue request.onInvoke(); } } + requests.clear(); } // Internal API diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java index b02e90547de..5b782f492f3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java @@ -22,7 +22,7 @@ import com.extjs.gxt.ui.client.widget.layout.FitLayout; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDisplayTypeIDGenerator; /** - * {@link ContentPanel} configured for Experiment Viewer. + * {@link ContentPanel} for sections with deferred request handling. * * @author Izabela Adamczyk */ @@ -30,7 +30,7 @@ public class SingleSectionPanel extends ContentPanel { private String displayId; - private boolean isContentVisible; + private boolean isContentVisible = false; /** * A queue used to store requests for data when the selection panel is hidden to avoid @@ -47,7 +47,6 @@ public class SingleSectionPanel extends ContentPanel setAnimCollapse(false); setBodyBorder(true); setLayout(new FitLayout()); - isContentVisible = false; serverRequestQueue = new ServerRequestQueue(); } @@ -73,23 +72,22 @@ public class SingleSectionPanel extends ContentPanel } } - public boolean isContentVisible() + public void setContentVisible(boolean visible) { - return isContentVisible; - } - - public void setContentVisible(boolean isContentVisible) - { - this.isContentVisible = isContentVisible; - if (this.isContentVisible) + if (this.isContentVisible != visible) { - serverRequestQueue.processUniqueRequests(); + this.isContentVisible = visible; + if (visible) + { + serverRequestQueue.processUniqueRequests(); + } + serverRequestQueue.setProcessImmediately(visible); } - serverRequestQueue.setProcessImmediately(this.isContentVisible); } protected ServerRequestQueue getServerRequestQueue() { return serverRequestQueue; } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java index a4bf1d299be..7f8986393e1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java @@ -147,66 +147,40 @@ public class SectionsPanel extends ContentPanel }); elements.add(element); addToToolbar(element.getButton()); - if (element.getButton().isPressed()) - { - element.getPanel().setContentVisible(true); - internalAdd(element); - } else - { - element.getPanel().setContentVisible(false); - } + updateElementVisibility(element); } /** removes all sections and adds them once again with with refreshed state */ private void refreshLayout() { + // NOTE: changing visibility of only those sections that changed state doesn't improve + // performance but makes code more complex removeAll(); for (SectionElement el : elements) { - boolean isVisible = el.getButton().isPressed(); - el.getPanel().setContentVisible(isVisible); - if (isVisible) - { - internalAdd(el); - } + updateElementVisibility(el); } layout(); } - private void addToToolbar(ToggleButton bb) - { - toolbar.add(bb); - } - - public void removePanel(final SingleSectionPanel panel) + private void updateElementVisibility(SectionElement element) { - int index = elements.indexOf(panel); - if (index > -1) + boolean visible = element.getButton().isPressed(); + element.getPanel().setContentVisible(visible); + if (visible) { - internalRemove(panel); - elements.remove(index); - toolbar.remove(toolbar.getItem(index)); + internalAdd(element); } } - private void internalAdd(final SectionElement element) - { - super.add(element.getPanel()); - } - - private void internalRemove(final ContentPanel panel) + private void addToToolbar(ToggleButton bb) { - super.remove(panel); + toolbar.add(bb); } - /** - * Use {@link #removePanel(SingleSectionPanel)} - */ - @Deprecated - @Override - protected boolean remove(Component item) + private void internalAdd(final SectionElement element) { - return super.remove(item); + super.add(element.getPanel()); } /** -- GitLab