Browse Source

Added full support for multiple projects open at the same time. Each project

appears as an entry in the "Projects" menu.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268425 13f79535-47bb-0310-9956-ffa450edef68
master
metasim 24 years ago
parent
commit
53def3821e
7 changed files with 377 additions and 10 deletions
  1. +6
    -1
      src/antidote/org/apache/tools/ant/gui/Main.java
  2. +2
    -2
      src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java
  3. +93
    -0
      src/antidote/org/apache/tools/ant/gui/command/NewProjectCmd.java
  4. +171
    -0
      src/antidote/org/apache/tools/ant/gui/core/ProjectSelectionMenu.java
  5. +81
    -0
      src/antidote/org/apache/tools/ant/gui/event/NewProjectEvent.java
  6. +16
    -4
      src/antidote/org/apache/tools/ant/gui/resources/action.properties
  7. +8
    -3
      src/antidote/org/apache/tools/ant/gui/resources/antidote.properties

+ 6
- 1
src/antidote/org/apache/tools/ant/gui/Main.java View File

@@ -81,11 +81,16 @@ public class Main {
Antidote gui = new Antidote(context); Antidote gui = new Antidote(context);


f.setDefaultCloseOperation(3 /*JFrame.EXIT_ON_CLOSE*/); f.setDefaultCloseOperation(3 /*JFrame.EXIT_ON_CLOSE*/);
f.setJMenuBar(context.getActions().createMenuBar());
JMenuBar menu = context.getActions().createMenuBar();
f.setJMenuBar(menu);
f.getContentPane().add(BorderLayout.CENTER, gui); f.getContentPane().add(BorderLayout.CENTER, gui);
f.getContentPane().add(BorderLayout.NORTH, f.getContentPane().add(BorderLayout.NORTH,
context.getActions().createToolBar()); context.getActions().createToolBar());


// Add the project selection menu.
ProjectSelectionMenu ps = new ProjectSelectionMenu(context);
ps.insertInto(menu);

ImageIcon icon = ImageIcon icon =
context.getResources().loadImageIcon("icon-small.gif"); context.getResources().loadImageIcon("icon-small.gif");
if(icon != null) { if(icon != null) {


+ 2
- 2
src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java View File

@@ -54,7 +54,7 @@
package org.apache.tools.ant.gui.command; package org.apache.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext; import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.ErrorEvent; import org.apache.tools.ant.gui.event.ErrorEvent;
import org.apache.tools.ant.gui.event.ProjectSelectedEvent;
import org.apache.tools.ant.gui.event.NewProjectEvent;
import org.apache.tools.ant.gui.acs.ACSProjectElement; import org.apache.tools.ant.gui.acs.ACSProjectElement;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -104,7 +104,7 @@ public class LoadFileCmd extends AbstractCommand {
ACSProjectElement project = ACSProjectElement project =
getContext().getProjectManager().open(_file); getContext().getProjectManager().open(_file);
getContext().getEventBus().postEvent( getContext().getEventBus().postEvent(
new ProjectSelectedEvent(getContext(), project));
new NewProjectEvent(getContext(), project));
} }
catch(Exception ex) { catch(Exception ex) {
String message = getContext().getResources().getMessage( String message = getContext().getResources().getMessage(


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

@@ -0,0 +1,93 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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;

/**
* Command for creating a new project.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NewProjectCmd extends AbstractCommand {
/**
* Standard ctor.
*
* @param context Application context.
*/
public NewProjectCmd(AppContext context) {
super(context);
}

/**
* Display a dialog asking the user to select a file to open.
* If one is selected then an event is posted requesting the open
* operation be completed.
*
*/
public void run() {
/*
FileFilter filter = new XMLFileFilter(getContext().getResources());

JFileChooser chooser = new JFileChooser();
chooser.addChoosableFileFilter(filter);
int val = chooser.showOpenDialog(getContext().getParentFrame());
if(val == JFileChooser.APPROVE_OPTION) {
File selected = chooser.getSelectedFile();
getContext().getEventBus().postEvent(
new OpenRequestEvent(getContext(), selected));
}
*/
}
}

+ 171
- 0
src/antidote/org/apache/tools/ant/gui/core/ProjectSelectionMenu.java View File

@@ -0,0 +1,171 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.core;

import org.apache.tools.ant.gui.event.*;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
/**
* Specialization of JMenu providing selectability of the currently
* open projects.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ProjectSelectionMenu extends JMenu {
/** Application context. */
private AppContext _context = null;
/** Current set of menus. */
private Map _menus = new HashMap();

/**
* Standard ctor.
*
* @param context Application context.
*/
public ProjectSelectionMenu(AppContext context) {
super(context.getResources().getString(
ProjectSelectionMenu.class, "name"), true);
_context = context;
_context.getEventBus().addMember(
EventBus.MONITORING, new ProjectListener());
setMnemonic(getText().charAt(0));
}

/**
* Replace or add the JMenu called "Projects" with this.
*
* @param menuBar Menu bar to insert into.
*/
public void insertInto(JMenuBar menuBar) {
// Iterate of the menu items looking for the one with the same name
// as ours.
int count = menuBar.getComponentCount();
for(int i = 0; i < count; i++) {
JMenuItem menu = (JMenuItem) menuBar.getComponent(i);
if(menu.getText().equals(getText())) {
menuBar.remove(menu);
menuBar.add(this, i);
return;
}
}

// Getting here we didn't find a menu with the same name.
add(this);
}


/** Listener for updating the contents of the menu. */
private class ProjectListener implements BusMember {
/** Event filter. */
private final Filter _filter = new Filter();
/** Action handler. */
private final ActionHandler _handler = new ActionHandler();
/**
* 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.
*/
public boolean eventPosted(EventObject event) {
// Clear out our existing members
removeAll();
_menus.clear();

ACSProjectElement[] projects =
_context.getProjectManager().getOpen();
for(int i = 0; i < projects.length; i++) {
JMenuItem menu = new JMenuItem(projects[i].getName());
menu.addActionListener(_handler);
_menus.put(menu, projects[i]);
add(menu);
}
return true;
}
}

/** Filter for project related events. */
private static class Filter implements BusFilter {
public boolean accept(EventObject event) {
return event instanceof ProjectSelectedEvent ||
event instanceof ProjectClosedEvent;
}
}

/** Handler for selecting the project. */
private class ActionHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
ACSProjectElement project =
(ACSProjectElement) _menus.get(e.getSource());
_context.getEventBus().postEvent(
new ProjectSelectedEvent(_context, project));
}
}

}

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

@@ -0,0 +1,81 @@
/*
* 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.AppContext;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import org.apache.tools.ant.gui.acs.ACSElement;

/**
* Event providing notification that a new project has been
* created or opened and selected. NB: Still not convinced that
* subclassing ProjectSelectedEvent is the correct thing to
* do, but it saves some time right now. It basically
* assumes that any new project added to the project manager
* is then selected.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NewProjectEvent extends ProjectSelectedEvent {

/**
* Standard ctor.
*
* @param context application context.
*/
public NewProjectEvent(
AppContext context, ACSProjectElement project) {
super(context, project);
}
}

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

@@ -1,14 +1,20 @@
# Define the primary menubar items. # Define the primary menubar items.
menus=File, Build, Help
menus=File, Build, Projects, Help


# Declare the list of known actions. # Declare the list of known actions.
actions=\ actions=\
open, save, saveas, close, exit, about, \ open, save, saveas, close, exit, about, \
newTarget, newTask, newProperty \ newTarget, newTask, newProperty \
startBuild, stopBuild, \
notifyEmacs
startBuild, stopBuild


# Configure the decalred actions. # Configure the decalred actions.
new.name=New Project...
new.shortDescription=Create a new project
new.parentMenuName=File
new.icon=new-project.gif
new.accelerator=control N
new.enabled=true
new.command=org.apache.tools.ant.gui.command.NewProjectCmd


open.name=Open... open.name=Open...
open.shortDescription=Open an existing project open.shortDescription=Open an existing project
@@ -30,6 +36,7 @@ save.disableOn= \
org.apache.tools.ant.gui.event.BuildStartedEvent org.apache.tools.ant.gui.event.BuildStartedEvent
save.enableOn= \ save.enableOn= \
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \ org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent org.apache.tools.ant.gui.event.BuildFinishedEvent


saveas.name=Save As... saveas.name=Save As...
@@ -42,6 +49,7 @@ saveas.disableOn= \
org.apache.tools.ant.gui.event.BuildStartedEvent org.apache.tools.ant.gui.event.BuildStartedEvent
saveas.enableOn= \ saveas.enableOn= \
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \ org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent org.apache.tools.ant.gui.event.BuildFinishedEvent


close.name=Close close.name=Close
@@ -54,6 +62,7 @@ close.disableOn= \
org.apache.tools.ant.gui.event.BuildStartedEvent org.apache.tools.ant.gui.event.BuildStartedEvent
close.enableOn= \ close.enableOn= \
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \ org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent org.apache.tools.ant.gui.event.BuildFinishedEvent


exit.name=Exit exit.name=Exit
@@ -80,6 +89,7 @@ startBuild.command=org.apache.tools.ant.gui.command.BuildCmd
startBuild.enabled=false startBuild.enabled=false
startBuild.enableOn=\ startBuild.enableOn=\
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \ org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent org.apache.tools.ant.gui.event.BuildFinishedEvent
startBuild.disableOn=\ startBuild.disableOn=\
org.apache.tools.ant.gui.event.BuildStartedEvent, \ org.apache.tools.ant.gui.event.BuildStartedEvent, \
@@ -102,7 +112,8 @@ newTarget.icon=new-target.gif
newTarget.enabled=false newTarget.enabled=false
newTarget.separator=true newTarget.separator=true
newTarget.enableOn=\ newTarget.enableOn=\
org.apache.tools.ant.gui.event.ProjectSelectedEvent
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
org.apache.tools.ant.gui.event.NewProjectEvent
newTarget.disableOn=\ newTarget.disableOn=\
org.apache.tools.ant.gui.event.TargetSelectionEvent, \ org.apache.tools.ant.gui.event.TargetSelectionEvent, \
org.apache.tools.ant.gui.event.TaskSelectionEvent, \ org.apache.tools.ant.gui.event.TaskSelectionEvent, \
@@ -127,6 +138,7 @@ newProperty.icon=new-property.gif
newProperty.enabled=false newProperty.enabled=false
newProperty.enableOn=\ newProperty.enableOn=\
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \ org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.TargetSelectionEvent, \ org.apache.tools.ant.gui.event.TargetSelectionEvent, \
org.apache.tools.ant.gui.event.TaskSelectionEvent org.apache.tools.ant.gui.event.TaskSelectionEvent
newProperty.disableOn=\ newProperty.disableOn=\


+ 8
- 3
src/antidote/org/apache/tools/ant/gui/resources/antidote.properties View File

@@ -32,12 +32,17 @@ org.apache.tools.ant.gui.modules.TargetMonitor.name=Selected Target(s)
org.apache.tools.ant.gui.modules.TargetMonitor.defText=[none] org.apache.tools.ant.gui.modules.TargetMonitor.defText=[none]


org.apache.tools.ant.gui.modules.console.BuildConsole.name=Console org.apache.tools.ant.gui.modules.console.BuildConsole.name=Console
org.apache.tools.ant.gui.modules.console.BuildConsole.logLevel=Log message level:
org.apache.tools.ant.gui.modules.console.BuildConsole.logLevel=\
Log message level:


org.apache.tools.ant.gui.core.XMLFileFilter.description=XML Files org.apache.tools.ant.gui.core.XMLFileFilter.description=XML Files


org.apache.tools.ant.gui.command.LoadFileCmd.noFile=The file "{0}" was not found.
org.apache.tools.ant.gui.command.LoadFileCmd.loadError=The file "{0}" could not be loaded.
org.apache.tools.ant.gui.core.ProjectSelectionMenu.name=Projects

org.apache.tools.ant.gui.command.LoadFileCmd.noFile=\
The file "{0}" was not found.
org.apache.tools.ant.gui.command.LoadFileCmd.loadError=\
The file "{0}" could not be loaded.
org.apache.tools.ant.gui.command.DisplayErrorCmd.title=Antidote Error... org.apache.tools.ant.gui.command.DisplayErrorCmd.title=Antidote Error...
org.apache.tools.ant.gui.command.DisplayErrorCmd.expand=Details >> org.apache.tools.ant.gui.command.DisplayErrorCmd.expand=Details >>




Loading…
Cancel
Save