package org.nocket.component.tabs; import java.util.List; import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.list.LoopItem; /** * Die TabbedPanel-Konponente von Wicket benutzt andere class-Definitionen als * Bootstrap benötigt. Deswegen, war es notwendig die Wicket-Komponente * abzuleiten. Wicket benutzt eine andere Markierung für das gerade aktive Tab * und in HTML muss tab * <ul> * -Element an Bootstrap angepasst werden. Außerdem verwenden wir für DMD ein * <i>Ajax</i>TabbedPanel, weil dieses erlaubt, über ein Überschreiben der * Methode {@link #newLink(String, int)} beim Tabwechsel das Synchronisieren der * Modelle aller Forms anzustoßen. Andernfalls gehen alle Eingaben im jeweils * verlassenen Tab verloren. Außerdem sieht es viel gefälliger aus, wenn sich * beim Tabwechsel nur der Inhalt des Tab-Bereichs ändert und nicht die ganze * Seite neu aufbaut. * * @author meis026 * */ public class DMDTabbedPanel<T extends ITab> extends AjaxTabbedPanel<T> { public DMDTabbedPanel(String id, List<T> tabs) { super(id, tabs); } @Override /** * Setzt das class-Attribut auf 'active', wenn dieses Tab das selektierte ist. */ protected LoopItem newTabContainer(final int tabIndex) { return new LoopItem(tabIndex) { private static final long serialVersionUID = 1L; @Override protected void onComponentTag(final ComponentTag tag) { super.onComponentTag(tag); String cssClass = tag.getAttribute("class"); if (cssClass == null) { cssClass = " "; } if (getIndex() == getSelectedTab()) { cssClass += " active"; } tag.put("class", cssClass.trim()); } @Override public boolean isVisible() { return getTabs().get(tabIndex).isVisible(); } }; } }