/* 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 org.activiti.kickstart.ui;
import java.util.HashMap;
import java.util.Map;
import org.activiti.kickstart.KickstartApplication;
import com.vaadin.terminal.Resource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.themes.Reindeer;
/**
* @author Joram Barrez
* @author Frederik Heremans
*/
@SuppressWarnings("serial")
public class MainMenuBar extends HorizontalLayout {
private static final long serialVersionUID = 1L;
public static final String MENU_ITEM_CREATE_WORKFLOW = "create-workflow";
public static final String MENU_ITEM_EDIT_WORKFLOW = "edit-workflow";
public static final String MENU_ITEM_SETTINGS = "settings";
private static final String STYLE_APPLICATION_LOGO = "logo";
private static final String STYLE_ACTIVE = "active";
private static final String STYLE_MAIN_MENU_BUTTON = "main-menu-button";
protected Map<String, Button> menuItemButtons;
protected String currentMainNavigation;
public MainMenuBar() {
menuItemButtons = new HashMap<String, Button>();
init();
}
/**
* Highlights the given main navigation in the menubar.
*/
public synchronized void setMainNavigation(String navigation) {
if (currentMainNavigation != null) {
menuItemButtons.get(currentMainNavigation).removeStyleName(STYLE_ACTIVE);
}
currentMainNavigation = navigation;
Button current = menuItemButtons.get(navigation);
if (current != null) {
current.addStyleName(STYLE_ACTIVE);
}
}
protected void init() {
setHeight(54, UNITS_PIXELS);
setWidth(100, UNITS_PERCENTAGE);
setMargin(false, true, false, false);
initTitle();
initButtons();
}
protected void initTitle() {
Label title = new Label();
title.addStyleName(Reindeer.LABEL_H1);
title.addStyleName(STYLE_APPLICATION_LOGO);
addComponent(title);
setComponentAlignment(title, Alignment.MIDDLE_LEFT);
setExpandRatio(title, 0.5f);
}
protected void initButtons() {
Button taskButton = addMenuButton("Create",
Images.MAIN_MENU_CREATE_WORKFLOW, false, 80);
taskButton.addListener(new CreateWorkflowButtonClickListener());
menuItemButtons.put(MENU_ITEM_CREATE_WORKFLOW, taskButton);
Button processButton = addMenuButton("Edit",
Images.MAIN_MENU_EDIT_WORKFLOW, false, 80);
processButton.addListener(new EditWorkflowButtonClickListener());
menuItemButtons.put(MENU_ITEM_EDIT_WORKFLOW, processButton);
Button manageButton = addMenuButton("Settings",
Images.MAIN_MENU_SETTINGS, false, 90);
manageButton.addListener(new SettingsClickListener());
menuItemButtons.put(MENU_ITEM_SETTINGS, manageButton);
// To center the buttons
Label invisibleLabel = new Label();
addComponent(invisibleLabel);
setExpandRatio(invisibleLabel, 0.5f);
}
protected Button addMenuButton(String label, Resource icon, boolean active, float width) {
Button button = new Button(label);
button.addStyleName(STYLE_MAIN_MENU_BUTTON);
button.addStyleName(Reindeer.BUTTON_LINK);
button.setHeight(54, UNITS_PIXELS);
button.setIcon(icon);
button.setWidth(width, UNITS_PIXELS);
addComponent(button);
setComponentAlignment(button, Alignment.TOP_CENTER);
return button;
}
// Button Listener classes
private class CreateWorkflowButtonClickListener implements ClickListener {
public void buttonClick(ClickEvent event) {
KickstartApplication.get().getViewManager().showCreateWorkflowPage();
}
}
private class EditWorkflowButtonClickListener implements ClickListener {
public void buttonClick(ClickEvent event) {
KickstartApplication.get().getViewManager().showEditWorkflowPage();
}
}
private class SettingsClickListener implements ClickListener {
public void buttonClick(ClickEvent event) {
KickstartApplication.get().getViewManager().showSettingsPage();
}
}
}