git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268813 13f79535-47bb-0310-9956-ffa450edef68master
@@ -56,12 +56,13 @@ import org.apache.tools.ant.gui.core.AppContext; | |||
import org.apache.tools.ant.gui.event.ErrorEvent; | |||
import org.apache.tools.ant.gui.acs.ACSProjectElement; | |||
import org.apache.tools.ant.gui.acs.ACSTargetElement; | |||
import org.apache.tools.ant.gui.event.ShowConsoleEvent; | |||
/** | |||
* Starts an Ant build. | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
*/ | |||
public class BuildCmd extends AbstractCommand { | |||
@@ -70,37 +71,42 @@ public class BuildCmd extends AbstractCommand { | |||
/** Targets to build. */ | |||
private ACSTargetElement[] _targets = null; | |||
/** | |||
/** | |||
* Standard ctor. | |||
* | |||
* | |||
*/ | |||
public BuildCmd(AppContext context) { | |||
public BuildCmd(AppContext context) { | |||
super(context); | |||
} | |||
/** | |||
/** | |||
* Set the specific project to build (instead of the default). | |||
* | |||
* | |||
* @param project Project to build. | |||
*/ | |||
public void setProject(ACSProjectElement project) { | |||
_project = project; | |||
} | |||
/** | |||
/** | |||
* Set the specific targets to build (instead of the default). | |||
* | |||
* | |||
* @param targets Array of targets to build. | |||
*/ | |||
public void setTargets(ACSTargetElement[] targets) { | |||
_targets = targets; | |||
} | |||
/** | |||
/** | |||
* Start the Ant build. | |||
* | |||
* | |||
*/ | |||
public void run() { | |||
// Show the build console | |||
getContext().getEventBus().postEvent( | |||
new ShowConsoleEvent(getContext())); | |||
if(_project == null) { | |||
_project = getContext().getSelectionManager().getSelectedProject(); | |||
} | |||
@@ -0,0 +1,147 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999, 2000 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. 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. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS 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. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.gui.command; | |||
import org.apache.tools.ant.gui.core.AppContext; | |||
import org.apache.tools.ant.gui.event.*; | |||
import java.awt.*; | |||
import javax.swing.*; | |||
/** | |||
* Toggles the display of the console window | |||
* | |||
* @version $Revision$ | |||
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a> | |||
*/ | |||
public class ShowOrHideConsoleCmd extends AbstractCommand { | |||
/** Always show the console */ | |||
boolean _alwaysShow = false; | |||
/** | |||
* Standard ctor. | |||
* | |||
* @param context Application context. | |||
*/ | |||
public ShowOrHideConsoleCmd(AppContext context) { | |||
super(context); | |||
_alwaysShow = false; | |||
} | |||
/** | |||
* Standard ctor. | |||
* | |||
* @param context Application context. | |||
*/ | |||
public ShowOrHideConsoleCmd(AppContext context, boolean alwaysShow) { | |||
super(context); | |||
_alwaysShow = alwaysShow; | |||
} | |||
/** | |||
* If the console pane is visible, hide it. | |||
* If the console pane is not visible, show it. | |||
*/ | |||
public void run() { | |||
JComponent component = (JComponent) findComponent("Console"); | |||
JSplitPane pane = (JSplitPane) component.getParent(); | |||
if (_alwaysShow) { | |||
if (component.getHeight() == 0) { | |||
pane.setDividerLocation(pane.getLastDividerLocation()); | |||
} | |||
} else { | |||
if (component.getHeight() == 0) { | |||
pane.setDividerLocation(pane.getLastDividerLocation()); | |||
} else { | |||
pane.setDividerLocation(1.0); | |||
} | |||
} | |||
} | |||
/** | |||
* Starting from the top Frame, find the | |||
* first child window with the input name. | |||
* | |||
* @param name The name of the <code>Component</code> | |||
*/ | |||
private Component findComponent(String name) { | |||
JFrame frame = (JFrame) getContext().getParentFrame(); | |||
JRootPane root = frame.getRootPane(); | |||
return findChild(root.getContentPane(), name); | |||
} | |||
/** | |||
* Search the <code>Container</code> for a <code>Component</code> | |||
* with the input name. The search is recursive. | |||
* | |||
* @param container The <code>Container</code> to search | |||
* @param name The name of the <code>Component</code> | |||
*/ | |||
private Component findChild(Container container, String name) { | |||
Component[] components = container.getComponents(); | |||
for (int i = 0; i < components.length; i++) { | |||
Component component = components[i]; | |||
if ( name.equals(component.getName()) ) { | |||
return component; | |||
} | |||
if (component instanceof java.awt.Container) { | |||
Component test = findChild( | |||
(java.awt.Container) component, name); | |||
if (test != null) { | |||
return test; | |||
} | |||
} | |||
} | |||
return null; | |||
} | |||
} |
@@ -55,16 +55,19 @@ package org.apache.tools.ant.gui.core; | |||
import org.apache.tools.ant.gui.event.*; | |||
import org.apache.tools.ant.gui.command.Command; | |||
import org.apache.tools.ant.gui.util.CheckableButtonModel; | |||
import javax.swing.*; | |||
import javax.accessibility.*; | |||
import java.util.*; | |||
import java.beans.*; | |||
import java.lang.reflect.Constructor; | |||
/** | |||
* Manager of antidote actions. Receives its configuration from the action | |||
* ResourceBundle. | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
*/ | |||
public class ActionManager { | |||
/** Parameters for the Command constructor. */ | |||
@@ -86,9 +89,9 @@ public class ActionManager { | |||
private EventToActionMapper _mapper = null; | |||
/** | |||
/** | |||
* Standard ctor. | |||
* | |||
* | |||
* @param bus Event bus to post events to. | |||
* @param resources Location of resources. | |||
*/ | |||
@@ -113,9 +116,9 @@ public class ActionManager { | |||
} | |||
} | |||
/** | |||
/** | |||
* Create a menubar for the application based on the configuration file. | |||
* | |||
* | |||
* @return Menubar. | |||
*/ | |||
public JMenuBar createMenuBar() { | |||
@@ -162,7 +165,7 @@ public class ActionManager { | |||
} | |||
// See if we should add a separator. | |||
if(action.isPreceededBySeparator() && | |||
if(action.isPreceededBySeparator() && | |||
menu.getMenuComponentCount() > 0) { | |||
menu.addSeparator(); | |||
} | |||
@@ -173,10 +176,14 @@ public class ActionManager { | |||
addNiceStuff(item, action); | |||
} | |||
else { | |||
JCheckBoxMenuItem b = | |||
JCheckBoxMenuItem b = | |||
new JCheckBoxMenuItem(action.getName()); | |||
b.setActionCommand(action.getID()); | |||
b.addActionListener(action); | |||
action.addPropertyChangeListener( | |||
new PropertyWatcher(b)); | |||
// XXX eck. This is a 1.3 feature. Fix ME! | |||
// Need to provide binding between action and widget. | |||
// b.setAction(action); | |||
@@ -190,14 +197,14 @@ public class ActionManager { | |||
return retval; | |||
} | |||
/** | |||
/** | |||
* Create a tool bar based on the current configuration. | |||
* | |||
* | |||
* @return Toolbar ready for action. | |||
*/ | |||
public JToolBar createToolBar() { | |||
JToolBar retval = new JToolBar(); | |||
for(int i = 0; i < _actionIDs.length; i++) { | |||
AntAction action = (AntAction) _actions.get(_actionIDs[i]); | |||
// If it has an icon, then we add it to the toolbar. | |||
@@ -209,6 +216,15 @@ public class ActionManager { | |||
JButton button = retval.add(action); | |||
button.setText(null); | |||
// Watch for CHECKED changes | |||
action.addPropertyChangeListener( | |||
new PropertyWatcher(button)); | |||
if(action.isToggle()) { | |||
ButtonModel model = new CheckableButtonModel(); | |||
button.setModel(model); | |||
} | |||
addNiceStuff(button, action); | |||
} | |||
} | |||
@@ -216,12 +232,12 @@ public class ActionManager { | |||
return retval; | |||
} | |||
/** | |||
/** | |||
* Create a popup menu with the given actionIDs. | |||
* XXX check this for object leak. Does the button | |||
* get added to the action as a listener? There are also some | |||
* changes to this behavior in 1.3. | |||
* | |||
* | |||
* @param actionIDs List of action IDs for actions | |||
* to appear in popup menu. | |||
* @return Popup menu to display. | |||
@@ -240,9 +256,9 @@ public class ActionManager { | |||
return retval; | |||
} | |||
/** | |||
/** | |||
* Get the command assocaited with the Action with the given id. | |||
* | |||
* | |||
* @param actionID Id of action to get command for. | |||
* @return Command associated with action, or null if none available. | |||
*/ | |||
@@ -253,7 +269,7 @@ public class ActionManager { | |||
Class clazz = action.getCommandClass(); | |||
if(clazz != null) { | |||
try { | |||
Constructor ctor = | |||
Constructor ctor = | |||
clazz.getConstructor(COMMAND_CTOR_PARAMS); | |||
retval = (Command) ctor.newInstance( | |||
new Object[] { context }); | |||
@@ -268,10 +284,10 @@ public class ActionManager { | |||
} | |||
/** | |||
/** | |||
* Add tool tip, Mnemonic, etc. | |||
* | |||
* @param button Button to work on. | |||
* | |||
* @param button Button to work on. | |||
* @param action Associated action. | |||
*/ | |||
private void addNiceStuff(AbstractButton button, AntAction action) { | |||
@@ -297,19 +313,19 @@ public class ActionManager { | |||
private class Enabler implements BusMember { | |||
private final Filter _filter = new Filter(); | |||
/** | |||
/** | |||
* Get the filter to that is used to determine if an event should | |||
* to to the member. | |||
* | |||
* | |||
* @return Filter to use. | |||
*/ | |||
public BusFilter getBusFilter() { | |||
return _filter; | |||
} | |||
/** | |||
/** | |||
* Receives all events. | |||
* | |||
* | |||
* @param event Event to post. | |||
* @return true if event should be propogated, false if | |||
* it should be cancelled. | |||
@@ -322,9 +338,9 @@ public class ActionManager { | |||
/** Class providing filtering for project events. */ | |||
private static class Filter implements BusFilter { | |||
/** | |||
/** | |||
* Determines if the given event should be accepted. | |||
* | |||
* | |||
* @param event Event to test. | |||
* @return True if event should be given to BusMember, false otherwise. | |||
*/ | |||
@@ -333,5 +349,31 @@ public class ActionManager { | |||
} | |||
} | |||
/** Class which's hooks the action to toggle buttons. */ | |||
private static class PropertyWatcher implements PropertyChangeListener { | |||
private AbstractButton _target; | |||
/** | |||
* Standard ctor. | |||
* | |||
* @param target Button to update | |||
*/ | |||
public PropertyWatcher(AbstractButton target) { | |||
_target = target; | |||
} | |||
/** | |||
* Change the Selected stated of the button if the CHECKED | |||
* property is set on the <code>action</code> | |||
* | |||
* @param event Event to test. | |||
*/ | |||
public void propertyChange(PropertyChangeEvent e) { | |||
String propertyName = e.getPropertyName(); | |||
if (propertyName.equals(AccessibleState.CHECKED.toString())) { | |||
Boolean newValue = (Boolean) e.getNewValue(); | |||
_target.setSelected(newValue.booleanValue()); | |||
} | |||
} | |||
} | |||
} |
@@ -54,18 +54,20 @@ | |||
package org.apache.tools.ant.gui.core; | |||
import javax.swing.*; | |||
import javax.accessibility.*; | |||
import java.net.URL; | |||
import java.awt.event.ActionEvent; | |||
import java.awt.event.ActionListener; | |||
import java.beans.*; | |||
import java.util.*; | |||
import org.apache.tools.ant.gui.event.EventBus; | |||
/** | |||
* Class representing an action in the Antidote application. | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
* Class representing an action in the Antidote application. | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
*/ | |||
public class AntAction extends AbstractAction { | |||
/** Property name for the parent menu item. */ | |||
@@ -76,6 +78,8 @@ public class AntAction extends AbstractAction { | |||
public static final String ENABLE_ON = "enableOn"; | |||
public static final String DISABLE_ON = "disableOn"; | |||
public static final String TOGGLE = "toggle"; | |||
public static final String CHECKED_TRUE_ON = "checkedTrueOn"; | |||
public static final String CHECKED_FALSE_ON = "checkedFalseOn"; | |||
public static final String COMMAND = "command"; | |||
/** Property resources. */ | |||
@@ -85,22 +89,28 @@ public class AntAction extends AbstractAction { | |||
/** Unique id. */ | |||
private String _id = null; | |||
/** Events that the action should cause transition to the | |||
/** Events that the action should cause transition to the | |||
* enabled(true) state. */ | |||
private Class[] _enableOn = null; | |||
/** Events that the action should cause transition to the | |||
/** Events that the action should cause transition to the | |||
* enabled(false) state. */ | |||
private Class[] _disableOn = null; | |||
/** Events that the action should cause transition to the | |||
* checked state. */ | |||
private Class[] _checkedTrueOn = null; | |||
/** Events that the action should cause transition to the | |||
* not checked state. */ | |||
private Class[] _checkedFalseOn = null; | |||
/** Flag indicating toggle action. */ | |||
private boolean _toggle = false; | |||
/** | |||
/** | |||
* Standard ctor. | |||
* | |||
* | |||
* @param id Unique id for the action | |||
*/ | |||
public AntAction(ResourceManager resources, EventBus bus, String id) { | |||
_resources = resources; | |||
_bus = bus; | |||
_id = id; | |||
@@ -149,13 +159,14 @@ public class AntAction extends AbstractAction { | |||
_enableOn = resolveClasses(getString(ENABLE_ON)); | |||
_disableOn = resolveClasses(getString(DISABLE_ON)); | |||
_checkedTrueOn = resolveClasses(getString(CHECKED_TRUE_ON)); | |||
_checkedFalseOn = resolveClasses(getString(CHECKED_FALSE_ON)); | |||
} | |||
/** | |||
/** | |||
* Convenience method for looking put a resource with the name | |||
* "id.key". Will return null if the resource doesn't exist. | |||
* | |||
* | |||
* @param key Key name for the action. | |||
* @return String resource for composite key, or null if not found. | |||
*/ | |||
@@ -166,16 +177,16 @@ public class AntAction extends AbstractAction { | |||
} | |||
catch(MissingResourceException ex) { | |||
// Its ok to be missing a resource name... | |||
// Too bad the API throws an exception in this case. | |||
// Too bad the API throws an exception in this case. | |||
} | |||
return retval; | |||
} | |||
/** | |||
/** | |||
* Parse out the list of classes from the given string and | |||
* resolve them into classes. | |||
* | |||
* | |||
* @param classNames Comma delimited list of class names. | |||
*/ | |||
private Class[] resolveClasses(String classNames) { | |||
@@ -191,7 +202,7 @@ public class AntAction extends AbstractAction { | |||
catch(ClassNotFoundException ex) { | |||
//XXX log me. | |||
System.err.println( | |||
"Warning: the event class " + name + | |||
"Warning: the event class " + name + | |||
" was not found. Please check config file."); | |||
} | |||
} | |||
@@ -201,46 +212,46 @@ public class AntAction extends AbstractAction { | |||
return retval; | |||
} | |||
/** | |||
/** | |||
* Unique id for the action. | |||
* | |||
* | |||
* @return Action id. | |||
*/ | |||
public String getID() { | |||
return _id; | |||
} | |||
/** | |||
/** | |||
* Get the name of the menu in the menu bar that this action shoul | |||
* appear under. | |||
* | |||
* | |||
* @return Menu to appear under, or null if not a menu action. | |||
*/ | |||
public String getParentMenuName() { | |||
return (String) getValue(PARENT_MENU_NAME); | |||
} | |||
/** | |||
/** | |||
* Get the localized name for the action. | |||
* | |||
* | |||
* @return Name | |||
*/ | |||
public String getName() { | |||
return (String) getValue(NAME); | |||
} | |||
/** | |||
/** | |||
* Get the short description. Used in tool tips. | |||
* | |||
* | |||
* @return Short description. | |||
*/ | |||
public String getShortDescription() { | |||
return (String) getValue(SHORT_DESCRIPTION); | |||
} | |||
/** | |||
/** | |||
* Determine if a separator should appear before the action. | |||
* | |||
* | |||
* @return True if add separator, false otherwise. | |||
*/ | |||
public boolean isPreceededBySeparator() { | |||
@@ -248,18 +259,18 @@ public class AntAction extends AbstractAction { | |||
String.valueOf(getValue(SEPARATOR))).booleanValue(); | |||
} | |||
/** | |||
/** | |||
* Get the icon. | |||
* | |||
* | |||
* @return Icon for action, or null if none. | |||
*/ | |||
public Icon getIcon() { | |||
return (Icon) getValue(SMALL_ICON); | |||
} | |||
/** | |||
/** | |||
* Get the accelerator keystroke. | |||
* | |||
* | |||
* @return Accelerator | |||
*/ | |||
public KeyStroke getAccelerator() { | |||
@@ -267,27 +278,43 @@ public class AntAction extends AbstractAction { | |||
} | |||
/** | |||
/** | |||
* Get the event types which should cause this to go to the | |||
* enabled state. | |||
* | |||
* | |||
*/ | |||
public Class[] getEnableOnEvents() { | |||
return _enableOn; | |||
} | |||
/** | |||
* Get the event types which should cause this to go to | |||
/** | |||
* Get the event types which should cause this to go to | |||
* this disabled state. | |||
* | |||
* | |||
*/ | |||
public Class[] getDisableOnEvents() { | |||
return _disableOn; | |||
} | |||
/** | |||
/** | |||
* Get the event types which should cause this to go to the | |||
* checked state. | |||
*/ | |||
public Class[] getCheckedTrueOnEvents() { | |||
return _checkedTrueOn; | |||
} | |||
/** | |||
* Get the event types which should cause this to go to the | |||
* not checked state. | |||
*/ | |||
public Class[] getCheckedFalseOnEvents() { | |||
return _checkedFalseOn; | |||
} | |||
/** | |||
* True if this is a toggle action, false otherwise. | |||
* | |||
* | |||
* @return True if this is a toggle action, false otherwise. | |||
*/ | |||
public boolean isToggle() { | |||
@@ -295,18 +322,18 @@ public class AntAction extends AbstractAction { | |||
} | |||
/** | |||
/** | |||
* Get the assciated command class. | |||
* | |||
* | |||
* @return Command class. | |||
*/ | |||
public Class getCommandClass() { | |||
return (Class) getValue(COMMAND); | |||
} | |||
/** | |||
/** | |||
* Pass the action on to the EventBus. | |||
* | |||
* | |||
* @param e Event to forward. | |||
*/ | |||
public void actionPerformed(ActionEvent e) { | |||
@@ -52,14 +52,16 @@ | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.gui.core; | |||
import java.util.*; | |||
import javax.accessibility.AccessibleState; | |||
/** | |||
* The purpose of this class is to manage the | |||
* The purpose of this class is to manage the | |||
* mappings between event type and action enabled state. | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
*/ | |||
class EventToActionMapper { | |||
@@ -69,29 +71,37 @@ class EventToActionMapper { | |||
/** Lookup for enable(false) events. Key is event type, value is | |||
* a list of actions that are changed by the event. */ | |||
private Map _disableOn = new HashMap(); | |||
/** Lookup for CHECK(true) events. Key is event type, value is | |||
* a list of actions that are changed by the event. */ | |||
private Map _checkedTrueOn = new HashMap(); | |||
/** Lookup for CHECK(false) events. Key is event type, value is | |||
* a list of actions that are changed by the event. */ | |||
private Map _checkedFalseOn = new HashMap(); | |||
/** | |||
/** | |||
* Defaul ctor. | |||
* | |||
* | |||
*/ | |||
public EventToActionMapper() { | |||
} | |||
/** | |||
/** | |||
* Add an action. | |||
* | |||
* | |||
* @param action Action to add. | |||
*/ | |||
public void addAction(AntAction action) { | |||
putAction(action, action.getEnableOnEvents(), _enableOn); | |||
putAction(action, action.getDisableOnEvents(), _disableOn); | |||
putAction(action, action.getCheckedTrueOnEvents(), _checkedTrueOn); | |||
putAction(action, action.getCheckedFalseOnEvents(), _checkedFalseOn); | |||
} | |||
/** | |||
/** | |||
* For the given action store it in the event type mapping | |||
* for each of the given types. | |||
* | |||
* | |||
* @param action Action to store. | |||
* @param clazzes Array of types to store it under. | |||
* @param storage The place to store the association. | |||
@@ -109,11 +119,11 @@ class EventToActionMapper { | |||
values.add(action); | |||
} | |||
} | |||
/** | |||
* For the given event change the state of any actions that | |||
/** | |||
* For the given event change the state of any actions that | |||
* have been registered as needing a transition as a result of | |||
* the event. | |||
* | |||
* | |||
* @param event The event to apply. | |||
*/ | |||
public void applyEvent(EventObject event) { | |||
@@ -126,11 +136,17 @@ class EventToActionMapper { | |||
vals = (List) _disableOn.get(event.getClass()); | |||
changeState(vals, false); | |||
vals = (List) _checkedTrueOn.get(event.getClass()); | |||
changeChecked(vals, true); | |||
vals = (List) _checkedFalseOn.get(event.getClass()); | |||
changeChecked(vals, false); | |||
} | |||
/** | |||
/** | |||
* Set the enabled state of the given actions. | |||
* | |||
* | |||
* @param actions List of AntActions to set state for. | |||
* @param state The state to set them to. | |||
*/ | |||
@@ -142,4 +158,20 @@ class EventToActionMapper { | |||
action.setEnabled(state); | |||
} | |||
} | |||
/** | |||
* Set the CHECKED property of the given actions. | |||
* | |||
* @param actions List of AntActions to set checked properties for. | |||
* @param checked The checked value to set them to. | |||
*/ | |||
private void changeChecked(List actions, boolean checked) { | |||
if(actions == null) return; | |||
for(int i = 0, len = actions.size(); i < len; i++) { | |||
AntAction action = (AntAction) actions.get(i); | |||
action.putValue(AccessibleState.CHECKED.toString(), | |||
new Boolean(checked)); | |||
} | |||
} | |||
} |
@@ -0,0 +1,73 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999, 2000 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. 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. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS 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. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.gui.event; | |||
import org.apache.tools.ant.gui.core.*; | |||
/** | |||
* Event fired when the console pane is not visible | |||
* | |||
* @version $Revision$ | |||
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a> | |||
*/ | |||
public class ConsoleNotVisibleEvent extends AntEvent { | |||
/** | |||
* Standard ctor. | |||
* | |||
* @param context application context. | |||
*/ | |||
public ConsoleNotVisibleEvent(AppContext context) { | |||
super(context); | |||
} | |||
} |
@@ -0,0 +1,73 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999, 2000 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. 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. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS 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. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.gui.event; | |||
import org.apache.tools.ant.gui.core.*; | |||
/** | |||
* Event fired when the console pane is visible | |||
* | |||
* @version $Revision$ | |||
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a> | |||
*/ | |||
public class ConsoleVisibleEvent extends AntEvent { | |||
/** | |||
* Standard ctor. | |||
* | |||
* @param context application context. | |||
*/ | |||
public ConsoleVisibleEvent(AppContext context) { | |||
super(context); | |||
} | |||
} |
@@ -0,0 +1,84 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999, 2000 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. 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. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS 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. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.gui.event; | |||
import org.apache.tools.ant.gui.core.*; | |||
import org.apache.tools.ant.gui.command.*; | |||
/** | |||
* Request to show the console pane | |||
* | |||
* @version $Revision$ | |||
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a> | |||
*/ | |||
public class ShowConsoleEvent extends AntEvent { | |||
/** | |||
* Standard ctor. | |||
* | |||
* @param context application context. | |||
*/ | |||
public ShowConsoleEvent(AppContext context) { | |||
super(context); | |||
} | |||
/** | |||
* Create the appropriate response command to this event, which is to | |||
* show the console pane. | |||
* | |||
* @return ShowOrHideConsoleCmd command. | |||
*/ | |||
public Command createDefaultCmd() { | |||
return new ShowOrHideConsoleCmd(getContext(), true); | |||
} | |||
} |
@@ -63,14 +63,16 @@ import java.awt.BorderLayout; | |||
import java.awt.FlowLayout; | |||
import java.awt.Dimension; | |||
import java.awt.Color; | |||
import java.awt.event.ComponentAdapter; | |||
import java.awt.event.ComponentEvent; | |||
import java.util.EventObject; | |||
import java.util.Date; | |||
/** | |||
* Logging console display. | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
* | |||
* @version $Revision$ | |||
* @author Simeon Fitch | |||
*/ | |||
public class BuildConsole extends AntModule { | |||
/** Area where messages are printed. */ | |||
@@ -81,17 +83,17 @@ public class BuildConsole extends AntModule { | |||
private ConsoleStyleContext _styles = null; | |||
/** ClearLog Button. */ | |||
private JButton _clearLog = null; | |||
/** | |||
/** | |||
* Default ctor. | |||
*/ | |||
public BuildConsole() { | |||
} | |||
/** | |||
/** | |||
* Using the given AppContext, initialize the display. | |||
* | |||
* | |||
* @param context Application context. | |||
*/ | |||
public void contextualize(AppContext context) { | |||
@@ -114,7 +116,7 @@ public class BuildConsole extends AntModule { | |||
_logLevel = new JComboBox(LogLevelEnum.getValues()); | |||
_logLevel.setSelectedItem(LogLevelEnum.INFO); | |||
controls.add(_logLevel); | |||
// Padding. | |||
controls.add(Box.createHorizontalStrut(10)); | |||
_clearLog = new JButton( | |||
@@ -125,12 +127,30 @@ public class BuildConsole extends AntModule { | |||
add(BorderLayout.NORTH, controls); | |||
/** Anonymous class to respond to resize envents and | |||
* post <code>ConsoleNotVisibleEvent</code> or | |||
* <code>ConsoleVisibleEvent</code> events. | |||
*/ | |||
addComponentListener(new ComponentAdapter() { | |||
public void componentResized(ComponentEvent e) { | |||
AppContext c = BuildConsole.this.getContext(); | |||
if (BuildConsole.this.getHeight() == 0) { | |||
c.getEventBus().postEvent(new ConsoleNotVisibleEvent(c)); | |||
} else { | |||
c.getEventBus().postEvent(new ConsoleVisibleEvent(c)); | |||
} | |||
} | |||
public void componentHidden(ComponentEvent e) {} | |||
public void componentMoved(ComponentEvent e) {} | |||
public void componentShown(ComponentEvent e) {} | |||
}); | |||
} | |||
/** | |||
/** | |||
* Clear the contents of the console. | |||
* | |||
* | |||
*/ | |||
private void clearDisplay() { | |||
Document doc = _text.getDocument(); | |||
@@ -146,19 +166,19 @@ public class BuildConsole extends AntModule { | |||
private class Handler implements BusMember { | |||
private final Filter _filter = new Filter(); | |||
/** | |||
/** | |||
* Get the filter to that is used to determine if an event should | |||
* to to the member. | |||
* | |||
* | |||
* @return Filter to use. | |||
*/ | |||
public BusFilter getBusFilter() { | |||
return _filter; | |||
} | |||
/** | |||
/** | |||
* Called when an event is to be posed to the member. | |||
* | |||
* | |||
* @param event Event to post. | |||
* @return true if event should be propogated, false if | |||
* it should be cancelled. | |||
@@ -176,7 +196,7 @@ public class BuildConsole extends AntModule { | |||
case BuildEventType.BUILD_STARTED_VAL: | |||
case BuildEventType.BUILD_FINISHED_VAL: | |||
text = buildEvent.getType().toString() + | |||
text = buildEvent.getType().toString() + | |||
" (" + new Date().toString() + ")"; | |||
style = _styles.getHeadingStyle(); | |||
break; | |||
@@ -191,7 +211,7 @@ public class BuildConsole extends AntModule { | |||
case BuildEventType.MESSAGE_LOGGED_VAL: | |||
// Filter out events that are below our | |||
// selected filterint level. | |||
LogLevelEnum level = | |||
LogLevelEnum level = | |||
(LogLevelEnum) _logLevel.getSelectedItem(); | |||
int priority = buildEvent.getEvent().getPriority(); | |||
if(priority <= level.getValue()) { | |||
@@ -226,9 +246,9 @@ public class BuildConsole extends AntModule { | |||
/** Class providing filtering for project events. */ | |||
private static class Filter implements BusFilter { | |||
/** | |||
/** | |||
* Determines if the given event should be accepted. | |||
* | |||
* | |||
* @param event Event to test. | |||
* @return True if event should be given to BusMember, false otherwise. | |||
*/ | |||
@@ -255,9 +275,9 @@ public class BuildConsole extends AntModule { | |||
Color.blue | |||
}; | |||
/** | |||
/** | |||
* Default ctor. | |||
* | |||
* | |||
*/ | |||
public ConsoleStyleContext() { | |||
Style defaultStyle = getStyle(DEFAULT_STYLE); | |||
@@ -283,9 +303,9 @@ public class BuildConsole extends AntModule { | |||
StyleConstants.setUnderline(subheading, false); | |||
} | |||
/** | |||
/** | |||
* Get the style to use for the given logging level. | |||
* | |||
* | |||
* @param level Logging level. | |||
* @return Style to use for display. | |||
*/ | |||
@@ -294,36 +314,36 @@ public class BuildConsole extends AntModule { | |||
return retval == null ? getDefaultStyle() : retval; | |||
} | |||
/** | |||
/** | |||
* Get the default style. | |||
* | |||
* | |||
* @return Default style. | |||
*/ | |||
Style getDefaultStyle() { | |||
return getStyle(DEFAULT_STYLE); | |||
} | |||
/** | |||
/** | |||
* Get the style to use for headings. | |||
* | |||
* | |||
* @return Heading style. | |||
*/ | |||
Style getHeadingStyle() { | |||
return getStyle(HEADING_STYLE); | |||
} | |||
/** | |||
/** | |||
* Get the style to use for subheadings. | |||
* | |||
* | |||
* @return Subheading style. | |||
*/ | |||
Style getSubheadingStyle() { | |||
return getStyle(SUBHEADING_STYLE); | |||
} | |||
/** | |||
/** | |||
* Get a StyledDocument initialized with this. | |||
* | |||
* | |||
* @return SytledDocument. | |||
*/ | |||
StyledDocument getStyledDocument() { | |||
@@ -1,11 +1,11 @@ | |||
# Define the primary menubar items. | |||
menus=File, Build, Projects, Help | |||
menus=File, View, Build, Projects, Help | |||
# Declare the list of known actions. | |||
actions=\ | |||
new, open, save, saveas, close, exit, about, \ | |||
newTarget, newTask, newProperty \ | |||
startBuild, stopBuild | |||
startBuild, stopBuild, viewConsole | |||
# Configure the decalred actions. | |||
new.name=New Project... | |||
@@ -149,3 +149,18 @@ newProperty.disableOn=\ | |||
org.apache.tools.ant.gui.event.PropertySelectionEvent, \ | |||
org.apache.tools.ant.gui.event.ProjectClosedEvent, \ | |||
org.apache.tools.ant.gui.event.NullSelectionEvent | |||
viewConsole.name=console | |||
viewConsole.shortDescription=Displays or hides the console pane | |||
viewConsole.parentMenuName=View | |||
viewConsole.icon=console.gif | |||
viewConsole.separator=true | |||
viewConsole.accelerator=control C | |||
viewConsole.enabled=true | |||
viewConsole.toggle=true | |||
viewConsole.initalToggleValue=true | |||
viewConsole.command=org.apache.tools.ant.gui.command.ShowOrHideConsoleCmd | |||
viewConsole.checkedTrueOn=\ | |||
org.apache.tools.ant.gui.event.ConsoleVisibleEvent | |||
viewConsole.checkedFalseOn=\ | |||
org.apache.tools.ant.gui.event.ConsoleNotVisibleEvent |
@@ -0,0 +1,144 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999, 2000 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. 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. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS 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. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.gui.util; | |||
import java.awt.event.ActionEvent; | |||
import javax.swing.DefaultButtonModel; | |||
/** | |||
* Provides a button which appears "pressed" when it is in | |||
* a selected state. | |||
* <p> | |||
* Call <code>setSelected</code> to select the button. When the | |||
* button is selected, both the PRESSED and ARMED properties are | |||
* set which gives the button a pressed appearance. | |||
* | |||
* @version $Revision$ | |||
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a> | |||
*/ | |||
public class CheckableButtonModel extends DefaultButtonModel { | |||
boolean _pressed = false; | |||
boolean _armed = false; | |||
/** | |||
* Constructs a CheckableButtonModel | |||
* | |||
*/ | |||
public CheckableButtonModel() { | |||
} | |||
/** | |||
* Sets the button to pressed or unpressed. | |||
* | |||
* @param b true to set the button to "pressed" | |||
* @see #isPressed | |||
*/ | |||
public void setPressed(boolean b) { | |||
if((_pressed == b) || !isEnabled()) { | |||
return; | |||
} | |||
_pressed = b; | |||
if(!_pressed && _armed) { | |||
fireActionPerformed( | |||
new ActionEvent(this, ActionEvent.ACTION_PERFORMED, | |||
getActionCommand()) | |||
); | |||
} | |||
fireStateChanged(); | |||
stateMask |= PRESSED; | |||
} | |||
/** | |||
* Marks the button as "armed". If the mouse button is | |||
* released while it is over this item, the button's action event | |||
* fires. If the mouse button is released elsewhere, the | |||
* event does not fire and the button is disarmed. | |||
* | |||
* @param b true to arm the button so it can be selected | |||
*/ | |||
public void setArmed(boolean b) { | |||
if((_armed == b) || !isEnabled()) { | |||
return; | |||
} | |||
_armed = b; | |||
fireStateChanged(); | |||
stateMask |= ARMED; | |||
} | |||
/** | |||
* Returns true if the button is selected. | |||
* | |||
* @return true if the button is "selected" | |||
*/ | |||
public boolean isArmed() { | |||
return isSelected(); | |||
} | |||
/** | |||
* Returns true if the button is selected. | |||
* | |||
* @return true if the button is "selected" | |||
*/ | |||
public boolean isPressed() { | |||
return isSelected(); | |||
} | |||
} |