/* 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.editor.ui;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.I18nManager;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ui.Images;
import org.activiti.explorer.ui.mainlayout.ExplorerLayout;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.ui.AbstractLayout;
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.VerticalLayout;
import com.vaadin.ui.themes.Reindeer;
/**
* @author Joram Barrez
*/
public class SelectEditorComponent extends VerticalLayout {
private static final long serialVersionUID = 1L;
protected I18nManager i18nManager;
protected boolean enableHighlightWhenClicked;
protected HorizontalLayout modelerLayout;
protected Button modelerButton;
protected Label modelerLabel;
protected Label modelerDescriptionLabel;
protected HorizontalLayout tableEditorLayout;
protected Button tableEditorButton;
protected Label tableEditorLabel;
protected Label tableEditorDescriptionLabel;
protected boolean modelerPreferred;
protected EditorSelectedListener editorSelectedListener;
public SelectEditorComponent() {
this(true);
}
public SelectEditorComponent(boolean enableHighlightWhenClicked) {
this.i18nManager = ExplorerApp.get().getI18nManager();
this.enableHighlightWhenClicked = enableHighlightWhenClicked;
createModelerEditorChoice();
addComponent(new Label(" ", Label.CONTENT_XHTML));
createTableDrivenEditorChoice();
preferModeler(); // is default to select modeler
}
protected void createModelerEditorChoice() {
modelerLayout = new HorizontalLayout();
modelerLayout.setWidth("300px");
modelerLayout.addStyleName(ExplorerLayout.STYLE_CLICKABLE);
addComponent(modelerLayout);
modelerButton = new Button();
modelerButton.setIcon(Images.PROCESS_EDITOR_BPMN);
modelerButton.setStyleName(Reindeer.BUTTON_LINK);
modelerLayout.addComponent(modelerButton);
modelerLayout.setComponentAlignment(modelerButton, Alignment.MIDDLE_LEFT);
VerticalLayout modelerTextLayout = new VerticalLayout();
modelerLayout.addComponent(modelerTextLayout);
modelerLayout.setExpandRatio(modelerTextLayout, 1.0f);
modelerLabel = new Label(i18nManager.getMessage(Messages.PROCESS_EDITOR_MODELER));
modelerLabel.addStyleName(ExplorerLayout.STYLE_CLICKABLE);
modelerTextLayout.addComponent(modelerLabel);
modelerDescriptionLabel = new Label(i18nManager.getMessage(Messages.PROCESS_EDITOR_MODELER_DESCRIPTION));
modelerDescriptionLabel.addStyleName(Reindeer.LABEL_SMALL);
modelerDescriptionLabel.addStyleName(ExplorerLayout.STYLE_CLICKABLE);
modelerTextLayout.addComponent(modelerDescriptionLabel);
modelerLayout.addListener(new LayoutClickListener() {
public void layoutClick(LayoutClickEvent event) {
preferModeler();
}
});
modelerButton.addListener(new ClickListener() {
public void buttonClick(ClickEvent event) {
preferModeler();
}
});
}
protected void createTableDrivenEditorChoice() {
tableEditorLayout = new HorizontalLayout();
tableEditorLayout.setWidth("300px");
tableEditorLayout.addStyleName(ExplorerLayout.STYLE_CLICKABLE);
addComponent(tableEditorLayout);
tableEditorButton = new Button();
tableEditorButton.setIcon(Images.PROCESS_EDITOR_TABLE);
tableEditorButton.setStyleName(Reindeer.BUTTON_LINK);
tableEditorLayout.addComponent(tableEditorButton);
tableEditorLayout.setComponentAlignment(tableEditorButton, Alignment.MIDDLE_LEFT);
VerticalLayout tableEditorTextLayout = new VerticalLayout();
tableEditorLayout.addComponent(tableEditorTextLayout);
tableEditorLayout.setExpandRatio(tableEditorTextLayout, 1.0f);
tableEditorLabel = new Label(i18nManager.getMessage(Messages.PROCESS_EDITOR_TABLE));
tableEditorLabel.addStyleName(ExplorerLayout.STYLE_CLICKABLE);
tableEditorTextLayout.addComponent(tableEditorLabel);
tableEditorDescriptionLabel = new Label(i18nManager.getMessage(Messages.PROCESS_EDITOR_TABLE_DESCRIPTION));
tableEditorDescriptionLabel.addStyleName(Reindeer.LABEL_SMALL);
tableEditorDescriptionLabel.addStyleName(ExplorerLayout.STYLE_CLICKABLE);
tableEditorTextLayout.addComponent(tableEditorDescriptionLabel);
tableEditorLayout.addListener(new LayoutClickListener() {
public void layoutClick(LayoutClickEvent event) {
preferTableDrivenEditor();
}
});
tableEditorButton.addListener(new ClickListener() {
public void buttonClick(ClickEvent event) {
preferTableDrivenEditor();
}
});
}
public void preferModeler() {
if (!modelerPreferred) {
modelerPreferred = true;
if (enableHighlightWhenClicked) {
selectEditor(modelerLayout);
deselectEditor(tableEditorLayout);
modelerLabel.addStyleName(ExplorerLayout.STYLE_LABEL_BOLD);
tableEditorLabel.removeStyleName(ExplorerLayout.STYLE_LABEL_BOLD);
}
}
if (editorSelectedListener != null) {
editorSelectedListener.editorSelectionChanged();
}
}
public void preferTableDrivenEditor() {
if (modelerPreferred) {
modelerPreferred = false;
if (enableHighlightWhenClicked) {
selectEditor(tableEditorLayout);
deselectEditor(modelerLayout);
tableEditorLabel.addStyleName(ExplorerLayout.STYLE_LABEL_BOLD);
modelerLabel.removeStyleName(ExplorerLayout.STYLE_LABEL_BOLD);
}
}
if (editorSelectedListener != null) {
editorSelectedListener.editorSelectionChanged();
}
}
protected void selectEditor(AbstractLayout editorLayout) {
editorLayout.addStyleName(ExplorerLayout.STYLE_PROCESS_EDITOR_CHOICE);
}
protected void deselectEditor(AbstractLayout editorLayout) {
editorLayout.removeStyleName(ExplorerLayout.STYLE_PROCESS_EDITOR_CHOICE);
}
public HorizontalLayout getModelerLayout() {
return modelerLayout;
}
public Button getModelerButton() {
return modelerButton;
}
public HorizontalLayout getTableEditorLayout() {
return tableEditorLayout;
}
public Button getTableEditorButton() {
return tableEditorButton;
}
public Label getModelerLabel() {
return modelerLabel;
}
public Label getModelerDescriptionLabel() {
return modelerDescriptionLabel;
}
public Label getTableEditorLabel() {
return tableEditorLabel;
}
public Label getTableEditorDescriptionLabel() {
return tableEditorDescriptionLabel;
}
public boolean isModelerPreferred() {
return modelerPreferred;
}
public EditorSelectedListener getEditorSelectedListener() {
return editorSelectedListener;
}
public void setEditorSelectedListener(EditorSelectedListener editorSelectedListener) {
this.editorSelectedListener = editorSelectedListener;
}
// Helper class
public static interface EditorSelectedListener {
void editorSelectionChanged();
}
}