/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.studio.scripts.list; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.AbstractCellEditor; import javax.swing.JTree; import javax.swing.tree.TreeCellEditor; import com.opendoorlogistics.studio.scripts.execution.ScriptUIManager; public class ButtonCellEditor extends AbstractCellEditor implements TreeCellEditor, MouseListener { final private ButtonCellRenderer renderer; private ScriptNode lastEdited; private final ScriptUIManager uiManager; // private JPanel panel; // private Object value; public ButtonCellEditor(final ScriptUIManager uiManager) { this.uiManager = uiManager; renderer = new ButtonCellRenderer(uiManager); renderer.getButton().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { stopCellEditing(); if (lastEdited != null && ScriptNode.isRunnable(lastEdited, uiManager)) { uiManager.executeScript(lastEdited.getFile(),lastEdited.getLaunchExecutorId() ); } } }); renderer.getLabel().addMouseListener(this); renderer.getIconlessLabel().addMouseListener(this); } @Override public Object getCellEditorValue() { return null; } @Override public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { lastEdited = null; if (value != null && ScriptNode.class.isInstance(value)) { lastEdited = (ScriptNode) value; } return renderer.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, true); } @Override public void mouseClicked(MouseEvent e) { stopCellEditing(); processLaunchScriptEditor(e); } @Override public void mousePressed(MouseEvent e) { stopCellEditing(); processLaunchScriptEditor(e); } void processLaunchScriptEditor(MouseEvent e) { if (e.getClickCount() == 2 && lastEdited != null && lastEdited.isAvailable() && uiManager.getAppPermissions().isScriptEditingAllowed()) { uiManager.launchScriptEditor(lastEdited.getFile(), lastEdited.getLaunchEditorId()); } } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } }