package de.flower.common.ui.ajax.markup.html.tab; import de.flower.common.ui.panel.BasePanel; import org.apache.wicket.Page; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.model.IModel; import java.util.ArrayList; import java.util.List; /** * @author flowerrrr */ public abstract class AbstractAjaxTabbedPanel<T> extends BasePanel<T> { /** * Goes into url so keep it small. */ public static final String TAB_INDEX_KEY = "tab"; private AjaxTabbedPanel tabbedPanel; public AbstractAjaxTabbedPanel() { this(null); } public AbstractAjaxTabbedPanel(final IModel<T> model) { super(model); // create a list of ITab objects used to feed the tabbed panel List<ITab> tabs = new ArrayList<ITab>(); addTabs(tabs); tabbedPanel = new AjaxTabbedPanel("tabs", tabs) { @Override protected void onAjaxUpdate(final AjaxRequestTarget target) { AbstractAjaxTabbedPanel.this.onAjaxUpdate(target, getSelectedTab()); } }; add(tabbedPanel); } @Override protected void onInitialize() { super.onInitialize(); selectActiveTab(); } /** * Cannot be called in constructor cause page is not available then. */ private void selectActiveTab() { Page page = findPage(); if (page != null) { int index = page.getPageParameters().get(TAB_INDEX_KEY).toInt(0); if (index >= 0 && index < tabbedPanel.getTabs().size()) { tabbedPanel.setSelectedTab(index); } } } public int getSelectedTab() { return tabbedPanel.getSelectedTab(); } /** * Must be implementing classes to add their panels to the tab-list. */ protected abstract void addTabs(List<ITab> tabs); /** * See AjaxTabbedPanel#onAjaxUpdate(). * @param target */ protected void onAjaxUpdate(final AjaxRequestTarget target, int selectedTab) { } }