svn commit: r14479 - trunk/src/argouml-app/src/org/argouml: Images ui

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: tfmorris
Date: 2008-04-26 14:58:55-0700
New Revision: 14479

Added:
   trunk/src/argouml-app/src/org/argouml/Images/ArgoIcon16x16.png   (contents, props changed)
   trunk/src/argouml-app/src/org/argouml/Images/ArgoIcon32x32.png   (contents, props changed)
Modified:
   trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java

Log:
Issue 4989 - multi-resolution icon patch from dthompson

Added: trunk/src/argouml-app/src/org/argouml/Images/ArgoIcon16x16.png
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/Images/ArgoIcon16x16.png?view=auto&rev=14479
==============================================================================
Binary file. No diff available.

Added: trunk/src/argouml-app/src/org/argouml/Images/ArgoIcon32x32.png
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/Images/ArgoIcon32x32.png?view=auto&rev=14479
==============================================================================
Binary file. No diff available.

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=14479&p1=trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java&p2=trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java&r1=14478&r2=14479
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/ProjectBrowser.java	2008-04-26 14:58:55-0700
@@ -28,6 +28,7 @@
 import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.Font;
+import java.awt.Image;
 import java.awt.KeyboardFocusManager;
 import java.awt.Window;
 import java.awt.event.ComponentAdapter;
@@ -40,6 +41,8 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.net.URI;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -291,17 +294,13 @@
             // allows me to ask "Do you want to save first?"
             setDefaultCloseOperation(ProjectBrowser.DO_NOTHING_ON_CLOSE);
             addWindowListener(new WindowCloser());
-            ImageIcon argoImage =
-                ResourceLoaderWrapper.lookupIconResource("ArgoIcon");
-            this.setIconImage(argoImage.getImage());
-        //
+            
+            setApplicationIcon();
 
-        // adds this as listener to projectmanager so it gets updated when the
-        // project changes
+            // Add listener for project changes
             ProjectManager.getManager().addPropertyChangeListener(this);
 
-            // adds this as listener to TargetManager so gets notified
-            // when the active diagram changes
+            // add listener to get notified when active diagram changes
             TargetManager.getInstance().addTargetListener(this);
 
             // Add a listener to focus changes.
@@ -343,6 +342,45 @@
                 new HelpListener(getStatusBar()));
     }
 
+    private void setApplicationIcon() {
+        ImageIcon argoImage16x16 =
+            ResourceLoaderWrapper.lookupIconResource("ArgoIcon16x16");
+        ImageIcon argoImage32x32 =
+            ResourceLoaderWrapper.lookupIconResource("ArgoIcon32x32");
+        List<Image> argoImages = new ArrayList<Image>(2);
+        argoImages.add(argoImage16x16.getImage());
+        argoImages.add(argoImage32x32.getImage());
+        
+        // JREs pre 1.6.0 cannot handle multiple images using 
+        // setIconImages(), so use reflection to conditionally make the 
+        // call to this.setIconImages().
+        // TODO: We can remove all of this reflection code when we go to 
+        // Java 1.6 as a minimum JRE version, see issue 4989.
+        Method m = null;
+        try {
+            // java.awt.Window.setIconImages is new in Java 6, so may not exist
+            // check for it using reflection on current instance
+            m = getClass().getMethod("setIconImages", List.class);
+            m.invoke(this, argoImages);
+        }
+        catch (NoSuchMethodException x) {
+            m = null;
+        } catch (InvocationTargetException e) {
+            m = null;
+        } catch (IllegalArgumentException e) {
+            m = null;
+        } catch (IllegalAccessException e) {
+            m = null;
+        }
+        
+        // If we couldn't run setIconImages() for whatever reason 
+        // (probably JRE < 1.6.0), do it the old way 
+        // using javax.swing.JFrame.setIconImage, and accept the blurry icon 
+        if (null == m) {
+            setIconImage(argoImage16x16.getImage());
+        }
+    }
+
     /**
      * Singleton retrieval method for the projectbrowser.
      * Do not use this before makeInstance is called!
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.