svn commit: r15106 - trunk/src/argouml-app/src/org/argouml: i18n ui

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: tfmorris
Date: 2008-06-29 11:50:34-0700
New Revision: 15106

Modified:
   trunk/src/argouml-app/src/org/argouml/i18n/label.properties
   trunk/src/argouml-app/src/org/argouml/i18n/statusmsg.properties
   trunk/src/argouml-app/src/org/argouml/ui/ArgoStatusBar.java
   trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java
   trunk/src/argouml-app/src/org/argouml/ui/StatusBar.java

Log:
Issue 5178 - Implement status events for project loads.  Extend status bar to listen to status events as well as help events.

Modified: trunk/src/argouml-app/src/org/argouml/i18n/label.properties
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/i18n/label.properties?view=diff&rev=15106&p1=trunk/src/argouml-app/src/org/argouml/i18n/label.properties&p2=trunk/src/argouml-app/src/org/argouml/i18n/label.properties&r1=15105&r2=15106
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/i18n/label.properties	(original)
+++ trunk/src/argouml-app/src/org/argouml/i18n/label.properties	2008-06-29 11:50:34-0700
@@ -260,7 +260,6 @@
 label.object-flow-state = ObjectFlowState
 label.off = Off
 label.offenders = Offenders:
-label.open-project-status-read = Read {0}.
 label.operations = Operations:
 label.operation = Operation:
 label.operation.navigate.tooltip = Go to selected Operation
@@ -328,8 +327,6 @@
 label.return-action = ReturnAction
 label.root = Root
 label.rules-library = Rules Library
-label.save-project-status-writing = Writing {0}...
-label.save-project-status-wrote = Wrote {0}
 label.sax-factory1 = SAX Parser Factory {0} specified using system property\n
 label.sax-factory2 = SAX-Parser {0} wird verwendet\n
 label.script = Script:

Modified: trunk/src/argouml-app/src/org/argouml/i18n/statusmsg.properties
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/i18n/statusmsg.properties?view=diff&rev=15106&p1=trunk/src/argouml-app/src/org/argouml/i18n/statusmsg.properties&p2=trunk/src/argouml-app/src/org/argouml/i18n/statusmsg.properties&r1=15105&r2=15106
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/i18n/statusmsg.properties	(original)
+++ trunk/src/argouml-app/src/org/argouml/i18n/statusmsg.properties	2008-06-29 11:50:34-0700
@@ -70,7 +70,16 @@
 statusmsg.bar.making-todopane = Making TodoPane: Setting Perspectives
 statusmsg.bar.model-subsystem = Initializing Model Subsystem
 statusmsg.bar.open-project-browser = Opening Project Browser
+# Previously label.open-project-status-read
+statusmsg.bar.open-project-status-read = Read {0}.
+statusmsg.bar.project-modified = Modified {0}.
 statusmsg.bar.readingproject = Reading \"{0}\"
+statusmsg.bar.save-graphics-status-writing = Writing {0} ...
+statusmsg.bar.save-graphics-status-wrote = Wrote {0}
+# Previously label.open-project-status-writing
+statusmsg.bar.save-project-status-writing = Writing {0} ...
+# Previously label.open-project-status-wrote
+statusmsg.bar.save-project-status-wrote = Wrote {0}
 statusmsg.help.create.circle = Drag to define a circle
 statusmsg.help.create.ink = Drag to draw a stream of ink
 statusmsg.help.create.line = Drag to define a line

Modified: trunk/src/argouml-app/src/org/argouml/ui/ArgoStatusBar.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/ArgoStatusBar.java?view=diff&rev=15106&p1=trunk/src/argouml-app/src/org/argouml/ui/ArgoStatusBar.java&p2=trunk/src/argouml-app/src/org/argouml/ui/ArgoStatusBar.java&r1=15105&r2=15106
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/ArgoStatusBar.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/ArgoStatusBar.java	2008-06-29 11:50:34-0700
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2007 The Regents of the University of California. All
+// Copyright (c) 2007-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -24,32 +24,83 @@
 
 package org.argouml.ui;
 
+import java.text.MessageFormat;
+
+import javax.swing.SwingUtilities;
+
 import org.argouml.application.events.ArgoEventPump;
 import org.argouml.application.events.ArgoEventTypes;
+import org.argouml.application.events.ArgoHelpEvent;
+import org.argouml.application.events.ArgoHelpEventListener;
+import org.argouml.application.events.ArgoStatusEvent;
+import org.argouml.application.events.ArgoStatusEventListener;
+import org.argouml.i18n.Translator;
 import org.tigris.gef.ui.IStatusBar;
 
 /**
  * A StatusBar that registers itself with the ArgoEventPump to receive
- * help events.
- * <p>
- * Note: it does not register directly for Status events, but instead
- * relies on ProjectBrowser to get the status events (since it needs to
- * monitor them anyway for project save/load events.
+ * help and status events.
  * 
  * @author Tom Morris <[email protected]>
  */
-public class ArgoStatusBar extends StatusBar implements IStatusBar {
+public class ArgoStatusBar extends StatusBar implements IStatusBar,
+        ArgoStatusEventListener, ArgoHelpEventListener {
 
-    // Currently unused.  ProjectBrowser registers Help events directly.
-    
     /**
-     * Default constructor.  Registers itself to receive Help events
+     * Default constructor.  Registers itself to receive Help & Status events
      * from the ArgoUML event pump.
      */
     public ArgoStatusBar() {
         super();
-        ArgoEventPump.addListener(ArgoEventTypes.ANY_HELP_EVENT,
-                new HelpListener(this));
+        ArgoEventPump.addListener(ArgoEventTypes.ANY_HELP_EVENT, this);
+        ArgoEventPump.addListener(ArgoEventTypes.ANY_STATUS_EVENT, this);
+    }
+
+    public void projectLoaded(ArgoStatusEvent e) {
+        String status = MessageFormat.format(
+                Translator.localize("statusmsg.bar.open-project-status-read"),
+                new Object[] {e.getText()});
+        showStatusOnSwingThread(status);
+    }
+
+    public void projectModified(ArgoStatusEvent e) {
+        String status = MessageFormat.format(
+                Translator.localize("statusmsg.bar.project-modified"),
+                new Object[] {e.getText()});
+        showStatusOnSwingThread(status);
+    }
+
+    public void projectSaved(ArgoStatusEvent e) {
+        String status = MessageFormat.format(
+                Translator.localize("statusmsg.bar.save-project-status-wrote"),
+                new Object[] {e.getText()});
+        showStatusOnSwingThread(status);
+    }
+
+    public void statusCleared(ArgoStatusEvent e) {
+        showStatusOnSwingThread("");
+    }
+
+    public void statusText(ArgoStatusEvent e) {
+        showStatusOnSwingThread(e.getText());
+    }
+
+    public void helpChanged(ArgoHelpEvent e) {
+        showStatusOnSwingThread(e.getHelpText());
+    }
+
+    public void helpRemoved(ArgoHelpEvent e) {
+        showStatusOnSwingThread("");
+    }
+    
+    // We don't know what thread events will be delivered on, so make sure
+    // we run Swing methods on the Swing thread
+    private void showStatusOnSwingThread(final String status) {
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                showStatus(status);
+            }
+        });
     }
 
 }

Modified: trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java?view=diff&rev=15106&p1=trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java&p2=trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java&r1=15105&r2=15106
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java	2008-06-29 11:50:34-0700
@@ -69,6 +69,7 @@
 import org.argouml.application.api.Argo;
 import org.argouml.application.events.ArgoEventPump;
 import org.argouml.application.events.ArgoEventTypes;
+import org.argouml.application.events.ArgoStatusEvent;
 import org.argouml.application.helpers.ResourceLoaderWrapper;
 import org.argouml.cognitive.Designer;
 import org.argouml.configuration.Configuration;
@@ -197,7 +198,7 @@
      * Partially implemented. Needs work to display
      * import of source and saving of zargo.
      */
-    private StatusBar statusBar = new StatusBar();
+    private StatusBar statusBar = new ArgoStatusBar();
 
     /**
      * TODO: this needs work so that users can set the font
@@ -304,8 +305,6 @@
             // Rationale: reset the undo manager to start a new chain.
             addKeyboardFocusListener();
         }
-        ArgoEventPump.addListener(ArgoEventTypes.ANY_HELP_EVENT, 
-                new HelpListener(getStatusBar()));
     }
 
     private void addKeyboardFocusListener() {
@@ -976,15 +975,28 @@
     public void setVisible(boolean b) {
         super.setVisible(b);
         if (b) {
-            Globals.setStatusBar(this);
+            Globals.setStatusBar(getStatusBar());
         }
     }
 
-    /*
-     * @see org.tigris.gef.ui.IStatusBar#showStatus(java.lang.String)
+    /**
+     * Show a string in the status bar.
+     * 
+     * @param s the new status string
+     * 
+     * @deprecated for 0.26 by tfmorris. Use {@link ArgoEventPump#fireEvent} to
+     *             send a status event instead.  When this method is removed
+     *             also remove the implements clause for GEF's IStatusBar from
+     *             this (ProjectBrowser) class.
      */
+    @Deprecated
     public void showStatus(String s) {
-        statusBar.showStatus(s);
+        updateStatus(s);
+    }
+    
+    private void updateStatus(String status) {
+        ArgoEventPump.fireEvent(new ArgoStatusEvent(ArgoEventTypes.STATUS_TEXT,
+                this, status));
     }
 
     /**
@@ -1130,6 +1142,9 @@
                 // update all panes
                 TargetManager.getInstance().setTarget(p.getInitialTarget());
             }
+            // TODO: Do we want to use the Project here instead of just its name?
+            ArgoEventPump.fireEvent(new ArgoStatusEvent(
+                    ArgoEventTypes.STATUS_PROJECT_LOADED, this, p.getName()));
         }
     }
 
@@ -1361,9 +1376,9 @@
 
             String sStatus =
                 MessageFormat.format(Translator.localize(
-                    "label.save-project-status-writing"),
+                    "statusmsg.bar.save-project-status-writing"),
                          new Object[] {file});
-            this.showStatus (sStatus);
+            updateStatus (sStatus);
 
             persister = pm.getSavePersister();
             pm.setSavePersister(null);
@@ -1400,11 +1415,9 @@
             persister.save(project, file);
             project.postSave();
 
-            sStatus =
-                MessageFormat.format(Translator.localize(
-                    "label.save-project-status-wrote"),
-                         new Object[] {project.getURI()});
-            showStatus(sStatus);
+            ArgoEventPump.fireEvent(new ArgoStatusEvent(
+                    ArgoEventTypes.STATUS_PROJECT_SAVED, this, project.getURI()
+                            .toString()));
             LOG.debug ("setting most recent project file to "
                    + file.getCanonicalPath());
 
@@ -1630,10 +1643,9 @@
                 Configuration.setString(Argo.KEY_MOST_RECENT_PROJECT_FILE,
                         file.getCanonicalPath());
                 
-                // TODO: Fire ArgoStatusEvent here
-                ProjectBrowser.getInstance().showStatus(
+                updateStatus(
                         Translator.localize(
-                                "label.open-project-status-read",
+                                "statusmsg.bar.open-project-status-read",
                                 new Object[] {file.getName(), }));
             } catch (VersionException ex) {
                 project = oldProject;

Modified: trunk/src/argouml-app/src/org/argouml/ui/StatusBar.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/StatusBar.java?view=diff&rev=15106&p1=trunk/src/argouml-app/src/org/argouml/ui/StatusBar.java&p2=trunk/src/argouml-app/src/org/argouml/ui/StatusBar.java&r1=15105&r2=15106
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/StatusBar.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/StatusBar.java	2008-06-29 11:50:34-0700
@@ -111,12 +111,12 @@
 	    progress.setValue(i);
 	    repaint();
 	    try { wait(10); }
-	    catch (Exception ex) { }
+	    catch (InterruptedException ex) { }
 	}
 	showStatus(statusText + "... done.");
 	repaint();
 	try { wait(1000); }
-	catch (Exception ex) { }
+	catch (InterruptedException ex) { }
 	progress.setValue(0);
 	showStatus("");
 	repaint();
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.