diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableSectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableSectionPanel.java index c64dafe835115550d838df0e1683bdf3a669bf32..b7983d86357d7118a9f3992f193ce726d2364aa3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableSectionPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableSectionPanel.java @@ -46,13 +46,12 @@ abstract public class DisposableSectionPanel extends SingleSectionPanel } @Override - protected void onDetach() + protected void disposeComponents() { if (disposableComponentOrNull != null) { disposableComponentOrNull.dispose(); } - super.onDetach(); } @Override 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 2179dee3c9eefdd0ab93d52bb431f245d654a33f..7f720857ebe8791f24ea189be511e1b609dedd41 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 @@ -41,6 +41,13 @@ abstract public class SingleSectionPanel extends ContentPanel private boolean isContentVisible = false; + /** + * whether additional components created for this section (e.g. browsers) should be automatically + * disposed (for sections that can temporarily removed from container as in + * {@link SectionsPanel} it should be turned off until detach from the container) + */ + private boolean autoDisposeComponents = true; + public SingleSectionPanel(final String header, IViewContext<?> viewContext) { this.viewContext = viewContext; @@ -82,4 +89,45 @@ abstract public class SingleSectionPanel extends ContentPanel isContentVisible = true; } } + + public boolean isContentVisible() + { + return isContentVisible; + } + + public void enableAutoDisposeComponents() + { + setAutoDisposeComponents(true); + } + + public void disableAutoDisposeComponents() + { + setAutoDisposeComponents(false); + } + + protected boolean isAutoDisposeComponents() + { + return autoDisposeComponents; + } + + private void setAutoDisposeComponents(boolean autoDisposeComponent) + { + this.autoDisposeComponents = autoDisposeComponent; + } + + @Override + protected void onDetach() + { + if (isAutoDisposeComponents()) + { + disposeComponents(); + } + super.onDetach(); + } + + /** disposes components created for the section (by default does nothing) */ + protected void disposeComponents() + { + } + } 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 b1ed415dfa2455d7fa3f5679497d9a21b2381550..a1b955aa17c4675ee2af4c4a32784086b7fd96c3 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 @@ -145,11 +145,24 @@ public class SectionsPanel extends ContentPanel refreshLayout(); } }); + // sections will be disposed when section panel is removed, not when they are hidden + // (see onDetach()) + panel.disableAutoDisposeComponents(); elements.add(element); addToToolbar(element.getButton()); updateElementVisibility(element); } + @Override + protected void onDetach() + { + for (SectionElement el : elements) + { + el.getPanel().enableAutoDisposeComponents(); + } + super.onDetach(); + } + /** removes all sections and adds them once again with with refreshed state */ private void refreshLayout() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java index a53c1d790e83f800927d558a3d46260b4ff62435..8f26cb4d6e7f3da4ddda2e1d5ed815cfaddd1b74 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java @@ -73,7 +73,7 @@ public class DataViewSection extends SingleSectionPanel } @Override - protected void onDetach() + protected void disposeComponents() { disposeCurrentReport(); }