/**
* Copyright (C) 2010 Asterios Raptis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.alpharogroup.wicket.components.examples.ajaxtabs.addable;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import de.alpharogroup.wicket.base.util.ComponentFinder;
import de.alpharogroup.wicket.components.ajax.editable.tabs.AbstractContentTab;
import de.alpharogroup.wicket.components.ajax.editable.tabs.AjaxAddableTabbedPanel;
import de.alpharogroup.wicket.components.ajax.editable.tabs.ICloseableTab;
import de.alpharogroup.wicket.components.examples.ajaxtabs.tabpanels.TabModel;
import de.alpharogroup.wicket.components.examples.ajaxtabs.tabpanels.TabPanel;
import de.alpharogroup.wicket.components.examples.ajaxtabs.tabpanels.TabbedPanelModels;
import de.alpharogroup.wicket.components.factory.ComponentFactory;
import de.alpharogroup.wicket.dialogs.panels.save.SaveDialogPanel;
import lombok.Getter;
public class AddableTabbedPanel extends Panel
{
/**
* The serialVersionUID.
*/
private static final long serialVersionUID = 1L;
private final List<ICloseableTab> tabs = new ArrayList<>();
@Getter
private final AjaxAddableTabbedPanel<ICloseableTab> ajaxTabbedPanel;
public AddableTabbedPanel(final String id, final IModel<TabbedPanelModels<String>> model)
{
super(id, model);
setDefaultModel(new CompoundPropertyModel<TabbedPanelModels<String>>(model));
final List<TabModel<String>> tabModels = model.getObject().getTabModels();
for (int i = 0; i < tabModels.size(); i++)
{
tabs.add(new AbstractContentTab<TabModel<String>>(tabModels.get(i).getTitle(),
Model.of(tabModels.get(i)), Model.of("x"))
{
private static final long serialVersionUID = 1L;
@Override
public Panel getPanel(final String panelId)
{
final Panel p = new TabPanel(panelId, getContent().getObject().getContent());
return p;
}
});
}
add(ajaxTabbedPanel = new AjaxAddableTabbedPanel<ICloseableTab>("tabs", tabs)
{
private static final long serialVersionUID = 1L;
@Override
protected Component newAddTab(final String id, final IModel<String> model)
{
final WebMarkupContainer addTabContainer = new WebMarkupContainer(id);
addTabContainer.setOutputMarkupId(true);
addTabContainer.add(new AttributeAppender("class", " label"));
final ModalWindow modalWindow = newAddTabModalWindow("modalWindow",
Model.of("Add new tab"));
addTabContainer.add(modalWindow);
final AjaxLink<Void> openModal = new AjaxLink<Void>("openModal")
{
private static final long serialVersionUID = 1L;
@Override
public void onClick(final AjaxRequestTarget target)
{
target.prependJavaScript("Wicket.Window.unloadConfirmation = false;");
modalWindow.show(target);
}
};
openModal.setOutputMarkupId(true);
openModal.add(newAddTabButtonLabel("addTabLabel", Model.of("+")));
openModal.add(new AttributeAppender("class", " label-success"));
addTabContainer.add(openModal);
return addTabContainer;
}
@Override
protected Label newaddTabLabel(final String id, final IModel<String> model)
{
return ComponentFactory.newLabel(id, model);
}
@Override
protected IModel<String> newAddTabLabelModel()
{
return Model.of("+");
}
@Override
protected ModalWindow newAddTabModalWindow(final String id, final IModel<String> model)
{
final ModalWindow modalWindow = new ModalWindow(id);
modalWindow.setOutputMarkupId(true);
modalWindow.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
modalWindow.setTitle(model.getObject());
modalWindow.setInitialHeight(200);
modalWindow.setInitialWidth(300);
modalWindow.setContent(
new SaveDialogPanel<String>(modalWindow.getContentId(), Model.of(new String()))
{
/**
* The serialVersionUID.
*/
private static final long serialVersionUID = 1L;
@Override
protected void onCancel(final AjaxRequestTarget target, final Form<?> form)
{
super.onCancel(target, form);
modalWindow.close(target);
}
@SuppressWarnings("unchecked")
@Override
protected void onSave(AjaxRequestTarget target, final Form<?> form)
{
super.onSave(target, form);
if (target == null)
{
target = ComponentFinder.findAjaxRequestTarget();
}
final Object value = getModel();
String v = null;
if (value instanceof IModel)
{
final Object obj = ((IModel<?>)value).getObject();
if (obj instanceof String)
{
v = (String)obj;
}
}
target.add(ajaxTabbedPanel);
final TabModel<String> newTabModel = new TabModel<>(Model.of(v),
Model.of(v), Model.of("x"));
final AbstractContentTab<TabModel<String>> tab = new AbstractContentTab<TabModel<String>>(
newTabModel.getTitle(), Model.of(newTabModel), Model.of("x"))
{
private static final long serialVersionUID = 1L;
@Override
public Panel getPanel(final String panelId)
{
final Panel p = new TabPanel(panelId,
getContent().getObject().getContent());
return p;
}
};
final Object object = AddableTabbedPanel.this.getDefaultModelObject();
final TabbedPanelModels<String> tabbedModel = (TabbedPanelModels<String>)object;
final List<TabModel<String>> tabModels = tabbedModel.getTabModels();
tabModels.add(newTabModel);
ajaxTabbedPanel.onNewTab(target, tab);
modalWindow.close(target);
}
});
return modalWindow;
}
@Override
protected WebMarkupContainer newCloseLink(final String linkId, final int index)
{
final WebMarkupContainer wmc = super.newCloseLink(linkId, index);
wmc.add(new AttributeAppender("class", "close label label-warning"));
return wmc;
}
@Override
protected WebMarkupContainer newLink(final String linkId, final int index)
{
final WebMarkupContainer wmc = super.newLink(linkId, index);
wmc.add(new AttributeAppender("class", "label label-success"));
return wmc;
}
});
}
}