Browse Source

Committed Nick Davis' patch to add action toggleability.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268813 13f79535-47bb-0310-9956-ffa450edef68
master
metasim 24 years ago
parent
commit
2d4bfedfb6
12 changed files with 795 additions and 132 deletions
  1. +18
    -12
      src/antidote/org/apache/tools/ant/gui/command/BuildCmd.java
  2. +147
    -0
      src/antidote/org/apache/tools/ant/gui/command/ShowOrHideConsoleCmd.java
  3. +69
    -27
      src/antidote/org/apache/tools/ant/gui/core/ActionManager.java
  4. +72
    -45
      src/antidote/org/apache/tools/ant/gui/core/AntAction.java
  5. +47
    -15
      src/antidote/org/apache/tools/ant/gui/core/EventToActionMapper.java
  6. +73
    -0
      src/antidote/org/apache/tools/ant/gui/event/ConsoleNotVisibleEvent.java
  7. +73
    -0
      src/antidote/org/apache/tools/ant/gui/event/ConsoleVisibleEvent.java
  8. +84
    -0
      src/antidote/org/apache/tools/ant/gui/event/ShowConsoleEvent.java
  9. +51
    -31
      src/antidote/org/apache/tools/ant/gui/modules/console/BuildConsole.java
  10. +17
    -2
      src/antidote/org/apache/tools/ant/gui/resources/action.properties
  11. BIN
      src/antidote/org/apache/tools/ant/gui/resources/console.gif
  12. +144
    -0
      src/antidote/org/apache/tools/ant/gui/util/CheckableButtonModel.java

+ 18
- 12
src/antidote/org/apache/tools/ant/gui/command/BuildCmd.java View File

@@ -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();
}


+ 147
- 0
src/antidote/org/apache/tools/ant/gui/command/ShowOrHideConsoleCmd.java View File

@@ -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;
}
}

+ 69
- 27
src/antidote/org/apache/tools/ant/gui/core/ActionManager.java View File

@@ -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());
}
}
}
}

+ 72
- 45
src/antidote/org/apache/tools/ant/gui/core/AntAction.java View File

@@ -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) {


+ 47
- 15
src/antidote/org/apache/tools/ant/gui/core/EventToActionMapper.java View File

@@ -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));
}
}
}

+ 73
- 0
src/antidote/org/apache/tools/ant/gui/event/ConsoleNotVisibleEvent.java View File

@@ -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);
}
}

+ 73
- 0
src/antidote/org/apache/tools/ant/gui/event/ConsoleVisibleEvent.java View File

@@ -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);
}
}

+ 84
- 0
src/antidote/org/apache/tools/ant/gui/event/ShowConsoleEvent.java View File

@@ -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);
}
}

+ 51
- 31
src/antidote/org/apache/tools/ant/gui/modules/console/BuildConsole.java View File

@@ -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() {


+ 17
- 2
src/antidote/org/apache/tools/ant/gui/resources/action.properties View File

@@ -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

BIN
src/antidote/org/apache/tools/ant/gui/resources/console.gif View File

Before After
Width: 20  |  Height: 20  |  Size: 977 B

+ 144
- 0
src/antidote/org/apache/tools/ant/gui/util/CheckableButtonModel.java View File

@@ -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();
}
}

Loading…
Cancel
Save