You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2011/11/13 06:39:40 UTC

svn commit: r1201406 - in /incubator/airavata/trunk/modules/xbaya-gui/src/main: java/org/apache/airavata/xbaya/gui/ java/org/apache/airavata/xbaya/menues/ java/org/apache/airavata/xbaya/menues/run/ java/org/apache/airavata/xbaya/menues/xbaya/ resources...

Author: lahiru
Date: Sun Nov 13 05:39:39 2011
New Revision: 1201406

URL: http://svn.apache.org/viewvc?rev=1201406&view=rev
Log:
https://issues.apache.org/jira/browse/AIRAVATA-201

Added:
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/ToolbarButton.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/MenuIcons.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/   (with props)
    incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/new2.png   (with props)
    incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open1.png   (with props)
    incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open2.png   (with props)
    incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/pause1.png   (with props)
    incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/play3.png   (with props)
    incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/save1.png   (with props)
Modified:
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaGUI.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaMenu.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaToolBar.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/run/RunMenuItem.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/xbaya/XBayaMenuItem.java

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/ToolbarButton.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/ToolbarButton.java?rev=1201406&view=auto
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/ToolbarButton.java (added)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/ToolbarButton.java Sun Nov 13 05:39:39 2011
@@ -0,0 +1,107 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.xbaya.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.Icon;
+import javax.swing.JButton;
+
+public class ToolbarButton extends JButton implements ActionListener, MouseListener{
+	private ActionListener buttonClickListener;
+	private static final long serialVersionUID = -8266744670729158206L;
+	private boolean showCaption=false;
+	private String caption;
+	private int order;
+	
+	public ToolbarButton(Icon icon, String text, String description, int order) {
+		super(icon);
+		setOrder(order);
+		setToolTipText(description);
+		setCaption(text);
+		setBorderPainted(false);
+        setFocusable(false);
+//        setBorder(BorderFactory.create);
+        setRolloverEnabled(true);
+        addMouseListener(this);
+        addActionListener(this);
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		if (getButtonClickListener()!=null){
+			getButtonClickListener().actionPerformed(e);
+		}
+	}
+
+	public ActionListener getButtonClickListener() {
+		return buttonClickListener;
+	}
+
+	public void setButtonClickListener(ActionListener buttonClickListener) {
+		this.buttonClickListener = buttonClickListener;
+	}
+
+	public boolean isShowCaption() {
+		return showCaption;
+	}
+
+	public void setShowCaption(boolean showCaption) {
+		this.showCaption = showCaption;
+	}
+
+	public String getCaption() {
+		return caption;
+	}
+
+	public void setCaption(String caption) {
+		this.caption = caption;
+	}
+	
+	@Override
+	public void mouseEntered(MouseEvent e) {
+		setBorderPainted(true);			
+	}
+
+	@Override
+	public void mouseExited(MouseEvent e) {
+		setBorderPainted(false);
+	}
+	
+	@Override
+	public void mouseClicked(MouseEvent e) {}
+	@Override
+	public void mousePressed(MouseEvent e) {}
+	@Override
+	public void mouseReleased(MouseEvent e) {}
+
+	public int getOrder() {
+		return order;
+	}
+
+	public void setOrder(int order) {
+		this.order = order;
+	}
+}

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaGUI.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaGUI.java?rev=1201406&r1=1201405&r2=1201406&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaGUI.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaGUI.java Sun Nov 13 05:39:39 2011
@@ -34,10 +34,9 @@ import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 import java.lang.reflect.InvocationTargetException;
 import java.net.MalformedURLException;
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -218,6 +217,9 @@ public class XBayaGUI implements EventLi
      * @return The toolbar
      */
     public XBayaToolBar getToolbar() {
+    	if (toolbar==null){
+    		this.toolbar = new XBayaToolBar(this.engine);
+    	}
         return this.toolbar;
     }
 
@@ -247,15 +249,6 @@ public class XBayaGUI implements EventLi
 				removeGraphCanvasFromIndex(index);				
 			}
 		});
-        graphTabbedPane.addPropertyChangeListener(new PropertyChangeListener() {
-
-			@Override
-			public void propertyChange(PropertyChangeEvent event) {
-				System.out.print(event.getPropertyName());
-				System.out.println("=>"+engine.getGUI().getGraphCanvases().size());
-			}
-        	
-        });
         graphTabbedPane.addContainerListener(new ContainerListener(){
 
 			@Override
@@ -314,6 +307,13 @@ public class XBayaGUI implements EventLi
                 case WORKFLOW_CHANGED:
                 	updateTabTitle(graphCanvas,graphCanvas.getWorkflow());
                 	setFrameName(workflow.getName());
+                	for (ChangeListener listener:tabChangeListeners){
+                		try{
+                			listener.stateChanged(null);
+                		}catch(Exception e){
+                			e.printStackTrace();
+                		}
+                	}
                 }
             }
             private void updateTabTitle(
@@ -361,7 +361,19 @@ public class XBayaGUI implements EventLi
             setFocus(graphCanvas);
         }
     }
-
+    
+    private List<ChangeListener> tabChangeListeners=new ArrayList<ChangeListener>();
+    
+    public void addWorkflowTabChangeListener(ChangeListener listener){
+		graphTabbedPane.addChangeListener(listener);
+		tabChangeListeners.add(listener);
+		
+    }
+    
+    public void removeWorkflowTabChangeListener(ChangeListener listener){
+		graphTabbedPane.removeChangeListener(listener);
+		tabChangeListeners.remove(listener);
+    }
     /**
      * Closes the selected graph canvas.
      * 
@@ -470,7 +482,7 @@ public class XBayaGUI implements EventLi
     private void init() {
         createFrame();
 
-        this.menu = new XBayaMenu(this.engine);
+        this.menu = new XBayaMenu(this.engine, getToolbar());
         this.frame.setJMenuBar(this.menu.getSwingComponent());
 
         initPane();
@@ -490,8 +502,7 @@ public class XBayaGUI implements EventLi
         // Error window
         this.errorWindow = new ErrorWindow(contentPane);
 
-        this.toolbar = new XBayaToolBar(this.engine);
-        contentPane.add(this.toolbar.getSwingComponent(), BorderLayout.PAGE_START);
+        contentPane.add(getToolbar().getSwingComponent(), BorderLayout.PAGE_START);
 
         this.portViewer = new PortViewer();
         this.componentViewer = new ComponentViewer();
@@ -778,11 +789,11 @@ public class XBayaGUI implements EventLi
     }
 
     public void addDynamicExecutionToolsToToolbar() {
-        this.toolbar.addDynamicExecutionTools();
+        getToolbar().addDynamicExecutionTools();
     }
 
     public void removeDynamicExecutionToolsFromToolbar() {
-        this.toolbar.removeDynamicExecutionTools();
+        getToolbar().removeDynamicExecutionTools();
     }
 
     /**

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaMenu.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaMenu.java?rev=1201406&r1=1201405&r2=1201406&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaMenu.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaMenu.java Sun Nov 13 05:39:39 2011
@@ -86,33 +86,50 @@ public class XBayaMenu implements XBayaC
 
 	private ToolsMenuItem toolsMenuItem;
 
+	private XBayaGUI gui;
+
+	private XBayaToolBar toolBar;
+	
     /**
      * Constructs an XwfMenu.
      * 
      * @param engine
      */
-    public XBayaMenu(XBayaEngine engine) {
-        this.engine = engine;
-
-        this.fileMenu = new FileMenu(this.engine);
-        
-        xBayaMenuItem = new XBayaMenuItem(engine);
-        editMenuItem = new EditMenuItem(engine);
-        viewMenuItem = new ViewMenuItem(engine);
-        runMenuItem = new RunMenuItem(engine);
-        registryMenuItem = new RegistryMenuItem(engine);
-        toolsMenuItem = new ToolsMenuItem(engine);
-        
-        this.workflowMenu = new WorkflowMenu(this.engine);
-        this.experimentMenu = new ExperimentMenu(this.engine);
-        this.amazonEC2Menu = new AmazonEC2Menu(this.engine);
-        this.componentMenu = new ComponentMenu(this.engine);
-        this.monitorMenu = new MonitorMenu(this.engine);
-        // this.myProxyMenu = new MyProxyMenu(this.engine);
-        this.registerApplications = new RegisterApplicationsMenu(this.engine);
-
-        createMenuBar();
+    public XBayaMenu(XBayaEngine engine, XBayaToolBar toolBar) {
+        this.setEngine(engine);
+        setToolBar(toolBar);
+        initMenu();
+//        SwingUtilities.invokeLater(new Runnable() {
+//            public void run() {
+//                try {
+//                    initMenu();
+//                } catch (Exception exception) {
+//                    exception.printStackTrace();
+//                }
+//            }
+//        });
     }
+    
+	private void initMenu() {
+		fileMenu = new FileMenu(getEngine());
+		
+		xBayaMenuItem = new XBayaMenuItem(getEngine(),getToolBar());
+		editMenuItem = new EditMenuItem(getEngine());
+		viewMenuItem = new ViewMenuItem(getEngine());
+		runMenuItem = new RunMenuItem(getEngine(), getToolBar());
+		registryMenuItem = new RegistryMenuItem(getEngine());
+		toolsMenuItem = new ToolsMenuItem(getEngine());
+		
+		workflowMenu = new WorkflowMenu(getEngine());
+		experimentMenu = new ExperimentMenu(getEngine());
+		amazonEC2Menu = new AmazonEC2Menu(getEngine());
+		componentMenu = new ComponentMenu(getEngine());
+		monitorMenu = new MonitorMenu(getEngine());
+		// this.myProxyMenu = new MyProxyMenu(this.engine);
+		registerApplications = new RegisterApplicationsMenu(getEngine());
+
+		createMenuBar();
+	}
 
     /**
      * Returns the menu bar.
@@ -164,7 +181,7 @@ public class XBayaMenu implements XBayaC
 
             public void actionPerformed(ActionEvent event) {
                 if (this.window == null) {
-                    this.window = new AboutWindow(XBayaMenu.this.engine);
+                    this.window = new AboutWindow(XBayaMenu.this.getEngine());
                 }
                 this.window.show();
             }
@@ -174,4 +191,20 @@ public class XBayaMenu implements XBayaC
         return helpMenu;
     }
 
+	public XBayaEngine getEngine() {
+		return engine;
+	}
+
+	public void setEngine(XBayaEngine engine) {
+		this.engine = engine;
+	}
+
+	public XBayaToolBar getToolBar() {
+		return toolBar;
+	}
+
+	public void setToolBar(XBayaToolBar toolBar) {
+		this.toolBar = toolBar;
+	}
+
 }
\ No newline at end of file

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaToolBar.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaToolBar.java?rev=1201406&r1=1201405&r2=1201406&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaToolBar.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gui/XBayaToolBar.java Sun Nov 13 05:39:39 2011
@@ -22,9 +22,16 @@
 package org.apache.airavata.xbaya.gui;
 
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
+import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JComponent;
@@ -48,6 +55,8 @@ public class XBayaToolBar implements XBa
     private JButton step;
 
     private JButton stop;
+    
+    private Map<String,List<ToolbarButton>> toolbarButtons = new HashMap<String,List<ToolbarButton>>();
 
     /**
      * IMAGES_STOP_JPEG
@@ -225,12 +234,50 @@ public class XBayaToolBar implements XBa
         };
         this.stop.setAction(stopAction);
 
-        this.toolbar.add(addNodeButton);
-        this.toolbar.add(removeNodeButton);
-        this.toolbar.addSeparator();
-        this.toolbar.add(connectEdgeButton);
+//        this.toolbar.add(addNodeButton);
+//        this.toolbar.add(removeNodeButton);
+//        this.toolbar.addSeparator();
+//        this.toolbar.add(connectEdgeButton);
+        
+//        addToolbarButton("test", SwingUtil.createImageIcon("test.png"), "my description", stopAction);
     }
 
+    public ToolbarButton addToolbarButton(String group, String caption, Icon icon, String description, ActionListener onClick, int order){
+    	ToolbarButton toolbarButton = new ToolbarButton(icon, caption, description, order);
+    	toolbarButton.setButtonClickListener(onClick);
+    	getToolBarButtonList(group).add(toolbarButton);
+    	rearrangeToolbarButtons();
+    	return toolbarButton;
+    }
+    
+    private void sortButtons(List<ToolbarButton> buttons){
+    	ToolbarButton[] buttonList=buttons.toArray(new ToolbarButton[]{});
+    	ToolbarButton temp;
+    	for (int i=0;i<buttonList.length-1;i++) {
+			for(int j=i+1;j<buttonList.length;j++){
+				if (buttonList[i].getOrder()!=-1){
+					if (buttonList[i].getOrder()>buttonList[j].getOrder()){
+						temp=buttonList[i];
+						buttonList[i]=buttonList[j];
+						buttonList[j]=temp;
+					}
+				}
+			}
+		}
+    	buttons.clear();
+    	buttons.addAll(Arrays.asList(buttonList));
+    }
+    private void rearrangeToolbarButtons(){
+    	toolbar.removeAll();
+    	for (String groupId : toolbarButtons.keySet()) {
+    		sortButtons(toolbarButtons.get(groupId));
+			for (ToolbarButton button : toolbarButtons.get(groupId)) {
+				toolbar.add(button);
+			}
+			toolbar.addSeparator();
+		}
+    }
+    
     public void addDynamicExecutionTools() {
         this.toolbar.add(this.play);
         this.toolbar.add(this.step);
@@ -272,4 +319,10 @@ public class XBayaToolBar implements XBa
         return this.stopAction;
     }
 
+    private List<ToolbarButton> getToolBarButtonList(String group){
+    	if (!toolbarButtons.containsKey(group)){
+    		toolbarButtons.put(group, new ArrayList<ToolbarButton>());
+    	}
+    	return toolbarButtons.get(group);
+    }
 }
\ No newline at end of file

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/MenuIcons.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/MenuIcons.java?rev=1201406&view=auto
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/MenuIcons.java (added)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/MenuIcons.java Sun Nov 13 05:39:39 2011
@@ -0,0 +1,36 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.xbaya.menues;
+
+import javax.swing.ImageIcon;
+
+import org.apache.airavata.common.utils.SwingUtil;
+
+public class MenuIcons {
+	public static final ImageIcon OPEN_ICON = SwingUtil.createImageIcon("menu/open1.png");
+    public static final ImageIcon SAVE_ICON = SwingUtil.createImageIcon("menu/save1.png");
+    public static final ImageIcon NEW_ICON = SwingUtil.createImageIcon("menu/new2.png");
+    
+    public static final ImageIcon RUN_ICON = SwingUtil.createImageIcon("menu/play3.png");
+    public static final ImageIcon MONITOR_PAUSE_ICON = SwingUtil.createImageIcon("menu/pause1.png");
+    public static final ImageIcon MONITOR_RESUME_ICON = null;
+}

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/run/RunMenuItem.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/run/RunMenuItem.java?rev=1201406&r1=1201405&r2=1201406&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/run/RunMenuItem.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/run/RunMenuItem.java Sun Nov 13 05:39:39 2011
@@ -36,7 +36,9 @@ import org.apache.airavata.xbaya.experim
 import org.apache.airavata.xbaya.graph.dynamic.gui.DynamicWorkflowRunnerWindow;
 import org.apache.airavata.xbaya.gridchem.gui.GridChemRunnerWindow;
 import org.apache.airavata.xbaya.gui.ErrorMessages;
+import org.apache.airavata.xbaya.gui.XBayaToolBar;
 import org.apache.airavata.xbaya.jython.gui.JythonRunnerWindow;
+import org.apache.airavata.xbaya.menues.MenuIcons;
 import org.apache.airavata.xbaya.monitor.Monitor;
 import org.apache.airavata.xbaya.monitor.MonitorConfiguration;
 import org.apache.airavata.xbaya.monitor.gui.MonitorConfigurationWindow;
@@ -70,13 +72,18 @@ public class RunMenuItem  implements Eve
 
     private static final Logger logger = LoggerFactory.getLogger(RunMenuItem.class);
 
+	private static final String EXECUTE_ACTIONS = "run_actions";
+
+    private XBayaToolBar toolBar;
+    
     /**
      * Constructs a WorkflowMenu.
      * 
      * @param engine
      */
-    public RunMenuItem(XBayaEngine engine) {
+    public RunMenuItem(XBayaEngine engine, XBayaToolBar toolBar) {
         this.engine = engine;
+        setToolBar(toolBar);
         createWorkflowMenu();
         Monitor monitor = this.engine.getMonitor();
         monitor.addEventListener(this);
@@ -141,9 +148,9 @@ public class RunMenuItem  implements Eve
     }
 
     private JMenuItem createResumeMonitoring() {
-        JMenuItem item = new JMenuItem("Resume monitoring");
+        JMenuItem item = new JMenuItem("Resume monitoring",MenuIcons.MONITOR_RESUME_ICON);
         item.setMnemonic(KeyEvent.VK_S);
-        item.addActionListener(new AbstractAction() {
+        AbstractAction action = new AbstractAction() {
             private MonitorStarter starter;
 
             public void actionPerformed(ActionEvent event) {
@@ -152,16 +159,18 @@ public class RunMenuItem  implements Eve
                 }
                 this.starter.start();
             }
-        });
+        };
+		item.addActionListener(action);
         boolean valid = this.engine.getMonitor().getConfiguration().isValid();
         item.setVisible(valid);
+        getToolBar().addToolbarButton(EXECUTE_ACTIONS,item.getText(), MenuIcons.MONITOR_RESUME_ICON, "Resume monitoring", action,3);
         return item;
     }
 
     private JMenuItem createPauseMonitoring() {
-        JMenuItem item = new JMenuItem("Pause monitoring");
+        JMenuItem item = new JMenuItem("Pause monitoring", MenuIcons.MONITOR_PAUSE_ICON);
         item.setMnemonic(KeyEvent.VK_T);
-        item.addActionListener(new AbstractAction() {
+        AbstractAction action = new AbstractAction() {
             public void actionPerformed(ActionEvent event) {
                 try {
                     engine.getMonitor().asynchronousStop();
@@ -171,8 +180,10 @@ public class RunMenuItem  implements Eve
                     engine.getErrorWindow().error(ErrorMessages.UNEXPECTED_ERROR, e);
                 }
             }
-        });
+        };
+		item.addActionListener(action);
         item.setVisible(false);
+        getToolBar().addToolbarButton(EXECUTE_ACTIONS,item.getText(), MenuIcons.MONITOR_PAUSE_ICON, "Pause monitoring", action,2);
         return item;
     }
 
@@ -214,7 +225,7 @@ public class RunMenuItem  implements Eve
     private JMenuItem createLaunchDynamicWorkflowItem() {
         JMenuItem menuItem = new JMenuItem("Run workflow...");
         menuItem.setMnemonic(KeyEvent.VK_D);
-        menuItem.addActionListener(new AbstractAction() {
+        AbstractAction action = new AbstractAction() {
             private DynamicWorkflowRunnerWindow window;
 
             public void actionPerformed(ActionEvent event) {
@@ -223,7 +234,9 @@ public class RunMenuItem  implements Eve
                 }
                 this.window.show();
             }
-        });
+        };
+		menuItem.addActionListener(action);
+        getToolBar().addToolbarButton(EXECUTE_ACTIONS,menuItem.getText(), MenuIcons.RUN_ICON, "Run workflow", action,1);
         return menuItem;
     }
     
@@ -295,4 +308,12 @@ public class RunMenuItem  implements Eve
             resetMonitoringItem.setVisible(false);
         }
     }
+
+	public XBayaToolBar getToolBar() {
+		return toolBar;
+	}
+
+	public void setToolBar(XBayaToolBar toolBar) {
+		this.toolBar = toolBar;
+	}
 }
\ No newline at end of file

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/xbaya/XBayaMenuItem.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/xbaya/XBayaMenuItem.java?rev=1201406&r1=1201405&r2=1201406&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/xbaya/XBayaMenuItem.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/menues/xbaya/XBayaMenuItem.java Sun Nov 13 05:39:39 2011
@@ -28,6 +28,9 @@ import javax.swing.AbstractAction;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
 
@@ -36,10 +39,12 @@ import org.apache.airavata.xbaya.XBayaEx
 import org.apache.airavata.xbaya.appwrapper.ApplicationDescriptionDialog;
 import org.apache.airavata.xbaya.appwrapper.HostDescriptionDialog;
 import org.apache.airavata.xbaya.appwrapper.ServiceDescriptionDialog;
-import org.apache.airavata.xbaya.component.gui.ComponentMenu;
 import org.apache.airavata.xbaya.component.gui.URLRegistryWindow;
 import org.apache.airavata.xbaya.experiment.gui.RegistryLoaderWindow;
 import org.apache.airavata.xbaya.graph.gui.GraphCanvas;
+import org.apache.airavata.xbaya.gui.ToolbarButton;
+import org.apache.airavata.xbaya.gui.XBayaToolBar;
+import org.apache.airavata.xbaya.menues.MenuIcons;
 import org.apache.airavata.xbaya.ode.ODEDeploymentDescriptor;
 import org.apache.airavata.xbaya.registry.RegistryAccesser;
 import org.apache.airavata.xbaya.util.XBayaUtil;
@@ -110,14 +115,21 @@ public class XBayaMenuItem {
 
 	private RegistryAccesser registryAccesser;
 
+	private XBayaToolBar toolBar;
+
+	private ToolbarButton saveToolBarButton;
+	
+	private static final String FILE_ACTIONS="file";
+	
     /**
      * Constructs a FileMenu.
      * 
      * @param engine
      * 
      */
-    public XBayaMenuItem(XBayaEngine engine) {
+    public XBayaMenuItem(XBayaEngine engine, XBayaToolBar toolBar) {
         this.engine = engine;
+        this.toolBar=toolBar;
         this.registryAccesser = new RegistryAccesser(engine);
 
         this.graphFiler = new WorkflowFiler(engine);
@@ -218,7 +230,7 @@ public class XBayaMenuItem {
 			public void menuSelected(MenuEvent e) {
 				GraphCanvas graphCanvas = engine.getGUI().getGraphCanvas();
 				saveAsWorkflowItem.setEnabled(graphCanvas!=null && graphCanvas.getWorkflowFile()!=null);
-				saveWorkflowItem.setEnabled(graphCanvas!=null && (graphCanvas.getWorkflowFile()==null || graphCanvas.isWorkflowChanged()));
+				saveWorkflowItem.setEnabled(isSaveShouldBeActive());
 				saveAllWorkflowItem.setEnabled(engine.getGUI().getGraphCanvases().size()>0);
 			}
 			@Override
@@ -337,13 +349,16 @@ public class XBayaMenuItem {
     }
 
     private JMenuItem createNewWorkflowTabMenuItem() {
-        JMenuItem menuItem = new JMenuItem("Workflow");
+        
+		JMenuItem menuItem = new JMenuItem("Workflow", MenuIcons.NEW_ICON);
         menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
-        menuItem.addActionListener(new AbstractAction() {
+        AbstractAction action = new AbstractAction() {
             public void actionPerformed(ActionEvent e) {
                 engine.getGUI().newGraphCanvas(true, true);
             }
-        });
+        };
+		menuItem.addActionListener(action);
+		getToolBar().addToolbarButton(FILE_ACTIONS,menuItem.getText(), MenuIcons.NEW_ICON, "Create new workflow", action,1);
         return menuItem;
     }
 
@@ -385,25 +400,45 @@ public class XBayaMenuItem {
     }
     
     private void createOpenWorkflowMenuItem() {
-        this.openWorkflowItem = new JMenuItem("Open...");
+		this.openWorkflowItem = new JMenuItem("Open...", MenuIcons.OPEN_ICON);
         this.openWorkflowItem.setMnemonic(KeyEvent.VK_O);
         openWorkflowItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
-        this.openWorkflowItem.addActionListener(new AbstractAction() {
+        AbstractAction action = new AbstractAction() {
             public void actionPerformed(ActionEvent event) {
                 XBayaMenuItem.this.graphFiler.openWorkflow();
             }
-        });
+        };
+		this.openWorkflowItem.addActionListener(action);
+		getToolBar().addToolbarButton(FILE_ACTIONS,openWorkflowItem.getText(), MenuIcons.OPEN_ICON, "Open workflow", action,2);
     }
 
     private void createSaveWorkflowItem() {
-        saveWorkflowItem = new JMenuItem("Save");
+		saveWorkflowItem = new JMenuItem("Save", MenuIcons.SAVE_ICON);
         saveWorkflowItem.setMnemonic(KeyEvent.VK_S);
         saveWorkflowItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
-        saveWorkflowItem.addActionListener(new AbstractAction() {
+        AbstractAction action = new AbstractAction() {
             public void actionPerformed(ActionEvent e) {
                 XBayaMenuItem.this.graphFiler.saveWorkflow();
+                saveToolBarButton.setEnabled(isSaveShouldBeActive());
+            }
+        };
+		saveWorkflowItem.addActionListener(action);
+        saveToolBarButton = getToolBar().addToolbarButton(FILE_ACTIONS,saveWorkflowItem.getText(), MenuIcons.SAVE_ICON, "Save workflow", action,3);
+        saveToolBarButton.setEnabled(false);
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+            	while(engine.getGUI()==null){
+            		Thread.yield();
+            	}
+                engine.getGUI().addWorkflowTabChangeListener(new ChangeListener(){
+					@Override
+					public void stateChanged(ChangeEvent event) {
+						saveToolBarButton.setEnabled(isSaveShouldBeActive());						
+					}
+                });
             }
         });
+        
     }
     
     private void createSaveAsWorkflowItem() {
@@ -475,16 +510,6 @@ public class XBayaMenuItem {
         });
     }
 
-    // private void createExportScuflScriptItem(){
-    // this.exportScuflItem = new JMenuItem("Export Taverna Scufl");
-    // this.exportScuflItem.setMnemonic(KeyEvent.VK_T);
-    // this.exportScuflItem.addActionListener(new AbstractAction() {
-    // public void actionPerformed(ActionEvent e) {
-    // FileMenu.this.scuflFiler.exportScuflScript();
-    // }
-    // });
-    // }
-
     private void createExportODEScriptsItem() {
         this.exportODEScriptsItem = new JMenuItem("ODE Scripts...");
         this.exportODEScriptsItem.addActionListener(new AbstractAction() {
@@ -512,4 +537,17 @@ public class XBayaMenuItem {
         });
         return menuItem;
     }
+
+	public XBayaToolBar getToolBar() {
+		return toolBar;
+	}
+
+	public void setToolBar(XBayaToolBar toolBar) {
+		this.toolBar = toolBar;
+	}
+
+	private boolean isSaveShouldBeActive() {
+		GraphCanvas graphCanvas = engine.getGUI().getGraphCanvas();
+		return graphCanvas !=null && (graphCanvas.getWorkflowFile()==null || graphCanvas.isWorkflowChanged());
+	}
 }
\ No newline at end of file

Propchange: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/
------------------------------------------------------------------------------
    bugtraq:number = true

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/new2.png
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/new2.png?rev=1201406&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/new2.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open1.png
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open1.png?rev=1201406&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open1.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open2.png
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open2.png?rev=1201406&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/open2.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/pause1.png
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/pause1.png?rev=1201406&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/pause1.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/play3.png
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/play3.png?rev=1201406&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/play3.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/save1.png
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/save1.png?rev=1201406&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/airavata/trunk/modules/xbaya-gui/src/main/resources/images/menu/save1.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream