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!

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to