/*
* Copyright (c) 2010, grossmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the jo-widgets.org nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.jowidgets.examples.common.demo;
import org.jowidgets.addons.icons.silkicons.SilkIcons;
import org.jowidgets.api.command.EnabledState;
import org.jowidgets.api.command.IAction;
import org.jowidgets.api.command.IActionBuilder;
import org.jowidgets.api.command.IActionBuilderFactory;
import org.jowidgets.api.command.ICommandAction;
import org.jowidgets.api.command.ICommandExecutor;
import org.jowidgets.api.command.IExecutionContext;
import org.jowidgets.api.model.item.IActionItemModel;
import org.jowidgets.api.model.item.ICheckedItemModel;
import org.jowidgets.api.model.item.IMenuModel;
import org.jowidgets.api.model.item.IRadioItemModel;
import org.jowidgets.api.model.item.ISelectableItemModel;
import org.jowidgets.api.model.item.IToolBarModel;
import org.jowidgets.api.toolkit.Toolkit;
import org.jowidgets.api.widgets.blueprint.IComboBoxSelectionBluePrint;
import org.jowidgets.api.widgets.blueprint.factory.IBluePrintFactory;
import org.jowidgets.common.types.Modifier;
import org.jowidgets.common.types.VirtualKey;
import org.jowidgets.common.widgets.controller.IActionListener;
import org.jowidgets.common.widgets.controller.IInputListener;
import org.jowidgets.common.widgets.controller.IItemStateListener;
import org.jowidgets.tools.command.EnabledChecker;
import org.jowidgets.tools.model.item.InputControlItemModel;
import org.jowidgets.tools.model.item.MenuModel;
import org.jowidgets.tools.model.item.RadioItemModel;
import org.jowidgets.tools.model.item.ToolBarModel;
public class DemoMenuProvider {
private static final IBluePrintFactory BPF = Toolkit.getBluePrintFactory();
private ICommandAction action1;
private ICommandAction action2;
private ICommandAction refreshAction;
private ICommandAction imageEditAction;
private IMenuModel menuModel;
private ICheckedItemModel editItem;
private IToolBarModel toolBarModel;
public DemoMenuProvider(final boolean lessToolBarItems) {
createActions();
createMenuModel();
createToolBarModel(lessToolBarItems);
}
private void createActions() {
final IActionBuilderFactory actionBF = Toolkit.getActionBuilderFactory();
final IActionBuilder action1Builder = actionBF.create();
action1Builder.setText("Step First").setToolTipText("Step to the first").setIcon(SilkIcons.RESULTSET_FIRST);
action1Builder.setMnemonic('f').setAccelerator(VirtualKey.F, Modifier.CTRL);
action1 = action1Builder.build();
final EnabledChecker enabledChecker1 = new EnabledChecker();
final EnabledChecker enabledChecker2 = new EnabledChecker();
enabledChecker2.setEnabledState(EnabledState.disabled("Step First must be invoked first"));
final ICommandExecutor command1 = new ICommandExecutor() {
@Override
public void execute(final IExecutionContext event) {
final IAction action = event.getAction();
Toolkit.getMessagePane().showMessage(action.getText(), action.getIcon(), "Step First", SilkIcons.RESULTSET_FIRST);
enabledChecker1.setEnabledState(EnabledState.disabled("Step Last Action must be invoked first"));
enabledChecker2.setEnabledState(EnabledState.ENABLED);
}
};
action1.setCommand(command1, enabledChecker1);
final IActionBuilder action2Builder = actionBF.create();
action2Builder.setText("Step Last").setToolTipText("Step to the last").setIcon(SilkIcons.RESULTSET_LAST);
action2Builder.setMnemonic('l').setAccelerator(VirtualKey.L, Modifier.CTRL);
action2 = action2Builder.build();
final ICommandExecutor command2 = new ICommandExecutor() {
@Override
public void execute(final IExecutionContext event) {
final IAction action = event.getAction();
Toolkit.getMessagePane().showMessage(action.getText(), action.getIcon(), "Step Last", SilkIcons.RESULTSET_LAST);
enabledChecker1.setEnabledState(EnabledState.ENABLED);
enabledChecker2.setEnabledState(EnabledState.disabled("Step First Action must be invoked first"));
}
};
action2.setCommand(command2, enabledChecker2);
final IActionBuilder refreshActionBuilder = actionBF.create();
refreshActionBuilder.setText("Refresh");
refreshActionBuilder.setIcon(SilkIcons.ARROW_REFRESH_SMALL);
refreshActionBuilder.setCommand(new ICommandExecutor() {
@Override
public void execute(final IExecutionContext executionContext) throws Exception {
// CHECKSTYLE:OFF
System.out.println("Refreshed :-)");
// CHECKSTYLE:ON
}
});
refreshAction = refreshActionBuilder.build();
final IActionBuilder imageEditActionBuilder = actionBF.create();
imageEditActionBuilder.setText("Edit Image...");
imageEditActionBuilder.setIcon(SilkIcons.IMAGE_EDIT);
imageEditActionBuilder.setAccelerator(VirtualKey.I, Modifier.SHIFT).setMnemonic('i');
imageEditActionBuilder.setCommand(new ICommandExecutor() {
@Override
public void execute(final IExecutionContext executionContext) throws Exception {
final IAction action = executionContext.getAction();
Toolkit.getMessagePane().showMessage(action.getText(), action.getIcon(), "Edit the image", action.getIcon());
}
});
imageEditAction = imageEditActionBuilder.build();
}
private IMenuModel createMenuModel() {
//first create the menu
menuModel = new MenuModel(MenuModel.builder("Menu1").setMnemonic('n'));
menuModel.addAction(refreshAction);
menuModel.addAction(imageEditAction);
menuModel.addAction(action1);
menuModel.addAction(action2);
menuModel.addSeparator();
final IMenuModel subMenu = menuModel.addItem(MenuModel.builder("Sub menu 1").setMnemonic('e'));
final IActionItemModel subItem1 = subMenu.addActionItem("Sub item1");
final IActionItemModel subItem2 = subMenu.addActionItem("Sub item2");
final IMenuModel subMenu2 = subMenu.addItem(MenuModel.builder("Sub menu 2").setMnemonic('n'));
final IActionItemModel sub2Item1 = subMenu2.addActionItem("Sub2 item1");
final IActionItemModel sub2Item2 = subMenu2.addActionItem("Sub2 item2");
final IActionItemModel sub2Item3 = subMenu2.addActionItem("Sub2 item3");
final IActionItemModel sub2Item4 = subMenu2.addActionItem("Sub2 item4");
subMenu.addSeparator();
final IActionItemModel subItem3 = subMenu.addActionItem("Sub item3");
subMenu.addSeparator();
subMenu.addRadioItem("Group 1: 1.");
subMenu.addRadioItem("Group 1: 2.");
subMenu.addSeparator();
final IActionItemModel subItem4 = subMenu.addActionItem("Sub item4");
final IActionItemModel subItem5 = subMenu.addActionItem("Sub item5");
subMenu.addSeparator();
subMenu.addRadioItem("Group 2: 1.");
subMenu.addRadioItem("Group 2: 2.");
subMenu.addRadioItem("Group 2: 3.");
editItem = menuModel.addCheckedItem("Readonly");
editItem.setIcon(SilkIcons.EYE);
menuModel.addSeparator();
final IRadioItemModel item5 = menuModel.addRadioItem("Low");
final IRadioItemModel item6 = menuModel.addItem(RadioItemModel.builder("Med").setSelected(true));
final IRadioItemModel item7 = menuModel.addRadioItem("Fast");
//then add listeners to the created items
addListener(subItem1);
addListener(subItem2);
addListener(subItem3);
addListener(subItem4);
addListener(subItem5);
addListener(sub2Item1);
addListener(sub2Item2);
addListener(sub2Item3);
addListener(sub2Item4);
addListener(editItem);
addListener(item5);
addListener(item6);
addListener(item7);
return menuModel;
}
private void createToolBarModel(final boolean lessToolBarItems) {
toolBarModel = new ToolBarModel();
final IMenuModel radioSubMenu = new MenuModel();
radioSubMenu.addRadioItem("All").setSelected(true);
radioSubMenu.addRadioItem("Current");
toolBarModel.addPopupAction(refreshAction, radioSubMenu);
toolBarModel.addPopupAction(imageEditAction, radioSubMenu);
toolBarModel.addAction(action1);
toolBarModel.addAction(action2);
toolBarModel.addItem(editItem);
if (!lessToolBarItems) {
toolBarModel.addSeparator();
final IComboBoxSelectionBluePrint<String> comboBoxBp = BPF.comboBoxSelection(" ", "Spain", "Italy", "France");
final InputControlItemModel<String> comboBox = new InputControlItemModel<String>(comboBoxBp, 80);
toolBarModel.addItem(comboBox);
final InputControlItemModel<String> textField = new InputControlItemModel<String>(BPF.inputFieldString(), 150);
toolBarModel.addItem(textField);
toolBarModel.addItem(getMenuModel());
addInputListener(textField);
addInputListener(comboBox);
}
}
public IMenuModel getMenuModel() {
return this.menuModel;
}
public IToolBarModel getToolBarModel() {
return this.toolBarModel;
}
private void addListener(final IActionItemModel item) {
item.addActionListener(new IActionListener() {
@Override
public void actionPerformed() {
// CHECKSTYLE:OFF
System.out.println("Action performed: " + item.getText());
// CHECKSTYLE:ON
}
});
}
private void addListener(final ISelectableItemModel item) {
item.addItemListener(new IItemStateListener() {
@Override
public void itemStateChanged() {
// CHECKSTYLE:OFF
System.out.println(item.getText() + ", selected=" + item.isSelected());
// CHECKSTYLE:ON
}
});
}
private void addInputListener(final InputControlItemModel<?> inputComponent) {
inputComponent.addInputListener(new IInputListener() {
@Override
public void inputChanged() {
// CHECKSTYLE:OFF
System.out.println("Input changed: " + inputComponent.getValue());
// CHECKSTYLE:ON
}
});
}
}