diff --git a/src/antidote/org/apache/tools/ant/gui/Main.java b/src/antidote/org/apache/tools/ant/gui/Main.java
index aedb960ae..a847dc887 100644
--- a/src/antidote/org/apache/tools/ant/gui/Main.java
+++ b/src/antidote/org/apache/tools/ant/gui/Main.java
@@ -81,11 +81,16 @@ public class Main {
Antidote gui = new Antidote(context);
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.NORTH,
context.getActions().createToolBar());
+ // Add the project selection menu.
+ ProjectSelectionMenu ps = new ProjectSelectionMenu(context);
+ ps.insertInto(menu);
+
ImageIcon icon =
context.getResources().loadImageIcon("icon-small.gif");
if(icon != null) {
diff --git a/src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java b/src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java
index d199c534c..bf1289fde 100644
--- a/src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java
+++ b/src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java
@@ -54,7 +54,7 @@
package org.apache.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
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 java.io.File;
import java.io.IOException;
@@ -104,7 +104,7 @@ public class LoadFileCmd extends AbstractCommand {
ACSProjectElement project =
getContext().getProjectManager().open(_file);
getContext().getEventBus().postEvent(
- new ProjectSelectedEvent(getContext(), project));
+ new NewProjectEvent(getContext(), project));
}
catch(Exception ex) {
String message = getContext().getResources().getMessage(
diff --git a/src/antidote/org/apache/tools/ant/gui/command/NewProjectCmd.java b/src/antidote/org/apache/tools/ant/gui/command/NewProjectCmd.java
new file mode 100644
index 000000000..0bff54835
--- /dev/null
+++ b/src/antidote/org/apache/tools/ant/gui/command/NewProjectCmd.java
@@ -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
+ * .
+ */
+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));
+ }
+*/
+ }
+}
diff --git a/src/antidote/org/apache/tools/ant/gui/core/ProjectSelectionMenu.java b/src/antidote/org/apache/tools/ant/gui/core/ProjectSelectionMenu.java
new file mode 100644
index 000000000..4fe53c8ac
--- /dev/null
+++ b/src/antidote/org/apache/tools/ant/gui/core/ProjectSelectionMenu.java
@@ -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
+ * .
+ */
+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));
+ }
+ }
+
+}
diff --git a/src/antidote/org/apache/tools/ant/gui/event/NewProjectEvent.java b/src/antidote/org/apache/tools/ant/gui/event/NewProjectEvent.java
new file mode 100644
index 000000000..b5961a3c7
--- /dev/null
+++ b/src/antidote/org/apache/tools/ant/gui/event/NewProjectEvent.java
@@ -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
+ * .
+ */
+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);
+ }
+}
diff --git a/src/antidote/org/apache/tools/ant/gui/resources/action.properties b/src/antidote/org/apache/tools/ant/gui/resources/action.properties
index 8ea583a30..414a71905 100644
--- a/src/antidote/org/apache/tools/ant/gui/resources/action.properties
+++ b/src/antidote/org/apache/tools/ant/gui/resources/action.properties
@@ -1,14 +1,20 @@
# Define the primary menubar items.
-menus=File, Build, Help
+menus=File, Build, Projects, Help
# Declare the list of known actions.
actions=\
open, save, saveas, close, exit, about, \
newTarget, newTask, newProperty \
- startBuild, stopBuild, \
- notifyEmacs
+ startBuild, stopBuild
# 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.shortDescription=Open an existing project
@@ -30,6 +36,7 @@ save.disableOn= \
org.apache.tools.ant.gui.event.BuildStartedEvent
save.enableOn= \
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
+ org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent
saveas.name=Save As...
@@ -42,6 +49,7 @@ saveas.disableOn= \
org.apache.tools.ant.gui.event.BuildStartedEvent
saveas.enableOn= \
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
+ org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent
close.name=Close
@@ -54,6 +62,7 @@ close.disableOn= \
org.apache.tools.ant.gui.event.BuildStartedEvent
close.enableOn= \
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
+ org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent
exit.name=Exit
@@ -80,6 +89,7 @@ startBuild.command=org.apache.tools.ant.gui.command.BuildCmd
startBuild.enabled=false
startBuild.enableOn=\
org.apache.tools.ant.gui.event.ProjectSelectedEvent, \
+ org.apache.tools.ant.gui.event.NewProjectEvent, \
org.apache.tools.ant.gui.event.BuildFinishedEvent
startBuild.disableOn=\
org.apache.tools.ant.gui.event.BuildStartedEvent, \
@@ -102,7 +112,8 @@ newTarget.icon=new-target.gif
newTarget.enabled=false
newTarget.separator=true
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=\
org.apache.tools.ant.gui.event.TargetSelectionEvent, \
org.apache.tools.ant.gui.event.TaskSelectionEvent, \
@@ -127,6 +138,7 @@ newProperty.icon=new-property.gif
newProperty.enabled=false
newProperty.enableOn=\
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.TaskSelectionEvent
newProperty.disableOn=\
diff --git a/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties b/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties
index d87461d12..61e84576c 100644
--- a/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties
+++ b/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties
@@ -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.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.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.expand=Details >>