diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbPanel.java index 61cd584c69c946e5c53a5d2acf538d25fca31b72..b39e624031f7077fe0bcb031913f3dd940b19aa6 100644 --- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbPanel.java +++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbPanel.java @@ -36,6 +36,11 @@ public interface BreadcrumbPanel extends StackedPanel { */ public void rootController(String displayName, Controller controller); + /** + * @return The first controller of the stack. + */ + public Controller getRootController(); + /** * Dissmiss all controllers but the root */ @@ -43,8 +48,12 @@ public interface BreadcrumbPanel extends StackedPanel { public void pushController(String displayName, Controller controller); - - public void popUpToController(Controller controller); + /** + * + * @param controller + * @return true if the controller has been found + */ + public boolean popUpToController(Controller controller); /** * Remove and dispose the specified controller and all diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java index a516d324de5c7bf8b119c69f03aabc548c9226bb..5d85bdf4363a96099fc10b66e178db4bad90ccbe 100644 --- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java +++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java @@ -201,6 +201,16 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre BusinessControlFactory.getInstance().addToHistory(ureq, wControl); } + public Controller getRootController() { + Controller controller = null; + if(stack.size() > 0) { + Link lastPath = stack.get(0); + BreadCrumb crumb = (BreadCrumb)lastPath.getUserObject(); + controller = crumb.getController(); + } + return controller; + } + public Controller getLastController() { Controller controller = null; if(stack.size() > 0) { @@ -221,7 +231,7 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre } @Override - public void popUpToController(Controller controller) { + public boolean popUpToController(Controller controller) { int index = getIndex(controller); if(index > 0 && index < stack.size() - 1) { BreadCrumb popedCrumb = null; @@ -235,10 +245,10 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre BreadCrumb crumb = (BreadCrumb)currentLink.getUserObject(); setContent(crumb.getController()); updateCloseLinkTitle(); + return true; } + return false; } - - @Override public void popController(Controller controller) { diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java index 3a2966b558c55468731d57318ac148f9b5f55091..070c446166691d57eabb0f2b1dc218102842bf66 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java @@ -26,6 +26,7 @@ import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.panel.SimpleStackedPanel; +import org.olat.core.gui.components.panel.StackedPanel; import org.olat.core.gui.components.stack.ButtonGroupComponent; import org.olat.core.gui.components.stack.PopEvent; import org.olat.core.gui.components.stack.TooledController; @@ -55,6 +56,7 @@ public class BinderController extends BasicController implements TooledControlle private final ButtonGroupComponent segmentButtonsCmp; private final TooledStackedPanel stackPanel; private Link editBinderMetadataLink; + private StackedPanel mainPanel; private PublishController publishCtrl; private TableOfContentController overviewCtrl; @@ -86,7 +88,11 @@ public class BinderController extends BasicController implements TooledControlle } stackPanel.addListener(this); - putInitialPanel(new SimpleStackedPanel("portfolioSegments")); + mainPanel = putInitialPanel(new SimpleStackedPanel("portfolioSegments")); + + overviewCtrl = new TableOfContentController(ureq, getWindowControl(), stackPanel, secCallback, binder, config); + listenTo(overviewCtrl); + mainPanel.setContent(overviewCtrl.getInitialComponent()); } @Override @@ -103,7 +109,7 @@ public class BinderController extends BasicController implements TooledControlle @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) { - doOpenOverview(ureq); + // } } @@ -141,29 +147,34 @@ public class BinderController extends BasicController implements TooledControlle } } + private void popUpToBinderController(UserRequest ureq) { + if(stackPanel.getRootController() == this) { + stackPanel.popUpToRootController(ureq); + } else { + stackPanel.popUpToController(this); + } + } + private void doOpenEntries(UserRequest ureq) { entriesCtrl = new BinderPageListController(ureq, getWindowControl(), stackPanel, secCallback, binder, config); listenTo(entriesCtrl); - stackPanel.popUpToController(this); + popUpToBinderController(ureq); stackPanel.pushController(translate("portfolio.entries"), entriesCtrl); segmentButtonsCmp.setSelectedButton(entriesLink); } private void doOpenOverview(UserRequest ureq) { - overviewCtrl = new TableOfContentController(ureq, getWindowControl(), stackPanel, secCallback, binder, config); - listenTo(overviewCtrl); - - stackPanel.popUpToController(this); - stackPanel.pushController(translate("portfolio.overview"), overviewCtrl); + popUpToBinderController(ureq); segmentButtonsCmp.setSelectedButton(overviewLink); + mainPanel.setContent(overviewCtrl.getInitialComponent()); } private void doOpenPublish(UserRequest ureq) { publishCtrl = new PublishController(ureq, getWindowControl(), stackPanel, secCallback, binder, config); listenTo(publishCtrl); - - stackPanel.popUpToController(this); + + popUpToBinderController(ureq); stackPanel.pushController(translate("portfolio.publish"), publishCtrl); segmentButtonsCmp.setSelectedButton(publishLink); } @@ -171,8 +182,8 @@ public class BinderController extends BasicController implements TooledControlle private void doOpenAssessment(UserRequest ureq) { assessmentCtrl = new BinderAssessmentController(ureq, getWindowControl(), secCallback, binder, config); listenTo(assessmentCtrl); - - stackPanel.popUpToController(this); + + popUpToBinderController(ureq); stackPanel.pushController(translate("portfolio.assessment"), assessmentCtrl); segmentButtonsCmp.setSelectedButton(assessmentLink); }