/*
* Copyright (c) 2010-2016 Evolveum
*
* 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 com.evolveum.midpoint.web.component.menu.cog;
import java.util.List;
import com.evolveum.midpoint.web.component.AjaxButton;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import com.evolveum.midpoint.web.component.util.SimplePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
/**
* @author lazyman
*/
public class InlineMenu extends SimplePanel<List<InlineMenuItem>> {
private static String ID_MENU_ITEM_CONTAINER= "menuItemContainer";
private static String ID_MENU_ITEM_BUTTON = "menuItemButton";
private static String ID_MENU_ITEM = "menuItem";
private static String ID_MENU_ITEM_BODY = "menuItemBody";
private static String ID_MENU_ITEM_ICON = "menuItemIcon";
private boolean hideByDefault;
public InlineMenu(String id, IModel model) {
this(id, model, false);
}
public InlineMenu(String id, IModel model, boolean hideByDefault) {
super(id, model);
this.hideByDefault = hideByDefault;
setOutputMarkupId(true);
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
StringBuilder sb = new StringBuilder();
sb.append("initInlineMenu('").append(getMarkupId()).append("', ").append(hideByDefault).append(");");
response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
}
@Override
protected void initLayout() {
WebMarkupContainer menuItemContainer = new WebMarkupContainer(ID_MENU_ITEM_CONTAINER);
menuItemContainer.setOutputMarkupId(true);
menuItemContainer.add(new AttributeAppender("class", getMenuItemContainerClass()));
menuItemContainer.add(new AttributeAppender("style", getMenuItemContainerStyle()));
add(menuItemContainer);
AjaxButton menuItemButton = new AjaxButton(ID_MENU_ITEM_BUTTON) {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
}
};
menuItemButton.setOutputMarkupId(true);
menuItemButton.add(new AttributeAppender("class", "dropdown-toggle " + getAdditionalButtonClass()));
menuItemButton.add(new AttributeAppender("style", getMenuItemButtonStyle()));
menuItemContainer.add(menuItemButton);
WebMarkupContainer icon = new WebMarkupContainer(ID_MENU_ITEM_ICON);
icon.setOutputMarkupId(true);
icon.add(new AttributeAppender("class", getIconClass()));
menuItemButton.add(icon);
ListView<InlineMenuItem> li = new ListView<InlineMenuItem>(ID_MENU_ITEM, getModel()) {
@Override
protected void populateItem(ListItem<InlineMenuItem> item) {
initMenuItem(item);
}
};
li.add(new VisibleEnableBehaviour() {
@Override
public boolean isVisible() {
List list = InlineMenu.this.getModel().getObject();
return list != null && !list.isEmpty();
}
});
menuItemContainer.add(li);
}
private void initMenuItem(ListItem<InlineMenuItem> menuItem) {
final InlineMenuItem item = menuItem.getModelObject();
menuItem.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {
@Override
public String getObject() {
if (item.isMenuHeader()) {
return "dropdown-header";
} else if (item.isDivider()) {
return "divider";
}
return getBoolean(item.getEnabled(), true) ? null : "disabled";
}
}));
menuItem.add(new VisibleEnableBehaviour() {
@Override
public boolean isEnabled() {
return getBoolean(item.getEnabled(), true);
}
@Override
public boolean isVisible() {
return getBoolean(item.getVisible(), true);
}
});
WebMarkupContainer menuItemBody;
if (item.isMenuHeader() || item.isDivider()) {
menuItemBody = new MenuDividerPanel(ID_MENU_ITEM_BODY, menuItem.getModel());
} else {
menuItemBody = new MenuLinkPanel(ID_MENU_ITEM_BODY, menuItem.getModel());
}
menuItemBody.setRenderBodyOnly(true);
menuItem.add(menuItemBody);
}
protected String getIconClass(){
return "fa fa-cog";
}
protected String getAdditionalButtonClass(){
return "";
}
protected String getMenuItemButtonStyle(){
return "border-top: 2px; !important";
}
protected String getMenuItemContainerClass(){
return "nav nav-pills cog pull-right";
}
protected String getMenuItemContainerStyle(){
return "";
}
private boolean getBoolean(IModel<Boolean> model, boolean def) {
if (model == null) {
return def;
}
Boolean value = model.getObject();
return value != null ? value : def;
}
}