/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2012-2013, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.gui.swing.etl;
import java.awt.Color;
import java.awt.Point;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import org.netbeans.api.visual.action.ActionFactory;
import org.netbeans.api.visual.action.PopupMenuProvider;
import org.netbeans.api.visual.border.BorderFactory;
import org.netbeans.api.visual.layout.LayoutFactory;
import org.netbeans.api.visual.widget.Widget;
import static org.geotoolkit.gui.swing.etl.ChainEditorConstants.*;
import org.geotoolkit.gui.swing.resource.MessageBundle;
import org.geotoolkit.processing.chain.model.ElementManual;
import org.netbeans.api.visual.action.EditProvider;
/**
*
* @author Guilhem Legal (Geomatys)
*/
public class WElementManuel extends Widget implements WPositionable {
private final WName execWidget;
private final ElementManual manualIntervention;
public WElementManuel(final ChainScene scene, final ElementManual mi, final boolean editable) {
super(scene);
this.manualIntervention = mi;
setOpaque(true);
setBackground(MANUAL_INTERVENTION_COLOR);
getActions().addAction(ActionFactory.createMoveAction());
if (editable) {
getActions().addAction(ActionFactory.createPopupMenuAction(new ProcessPopup()));
getActions().addAction(ActionFactory.createEditAction(new ManualInterventionEditor()));
}
setBorder(BorderFactory.createRoundedBorder(20, 20, 8, 8, Color.WHITE, Color.DARK_GRAY));
final String name = MessageBundle.format("manualInt");
execWidget = new WName(scene, name, editable, true, true, this);
execWidget.setFont(CHAIN_ELEMENT_EXECUTION_TITLE_FONT);
//underline ChainElement title only if we display parameters.
//execWidget.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, MANUAL_INTERVENTION_BORDER_COLOR));
setLayout(LayoutFactory.createVerticalFlowLayout());
addChild(execWidget);
getScene().validate();
}
@Override
public ElementManual getObject() {
return manualIntervention;
}
public WName getExecutionWidget(){
return execWidget;
}
private class ProcessPopup implements PopupMenuProvider{
@Override
public JPopupMenu getPopupMenu(final Widget widget, final Point point) {
final JPopupMenu menu = new JPopupMenu();
menu.add(new JMenuItem(new AbstractAction("Configure") {
@Override
public void actionPerformed(ActionEvent e) {
final ChainScene scene = (ChainScene) getScene();
final WElementManuel elem = (WElementManuel) widget;
final ElementManual manual = elem.getObject();
final String msg = MessageBundle.format("manualDesc");
final String title = MessageBundle.format("manualInt");
final String desc = (String) JOptionPane.showInputDialog(null, msg, title, JOptionPane.PLAIN_MESSAGE, null, null, manual.getDescription());
if (desc != null) {
manual.setDescription(desc);
}
}
}));
menu.add(new JMenuItem(new AbstractAction("Delete") {
@Override
public void actionPerformed(ActionEvent e) {
((ChainScene) getScene()).getChain().getElements().remove(manualIntervention);
}
}));
return menu;
}
}
public Integer getId() {
if (manualIntervention != null) {
return manualIntervention.getId();
}
return -1;
}
@Override
protected void paintWidget() {
super.paintWidget();
manualIntervention.setX(getLocation().x);
manualIntervention.setY(getLocation().y);
}
private class ManualInterventionEditor implements EditProvider {
@Override
public void edit(Widget widget) {
final WElementManuel elem = (WElementManuel) widget;
final ElementManual manuel = elem.getObject();
final String msg = MessageBundle.format("manualDesc");
final String title = MessageBundle.format("manualInt");
final String desc = (String) JOptionPane.showInputDialog(null, msg, title, JOptionPane.PLAIN_MESSAGE, null, null, manuel.getDescription());
if (desc != null) {
manuel.setDescription(desc);
}
}
}
}