You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by no...@apache.org on 2010/07/29 12:17:15 UTC

svn commit: r980388 - in /pivot/trunk: wtk-terra/src/org/apache/pivot/wtk/skin/terra/ wtk/src/org/apache/pivot/wtk/ wtk/src/org/apache/pivot/wtk/skin/

Author: noelgrandin
Date: Thu Jul 29 10:17:15 2010
New Revision: 980388

URL: http://svn.apache.org/viewvc?rev=980388&view=rev
Log:
PIVOT-477 Window and DesktopApplicationContext should support java.awt.Window.setIconImages() to display multi-resolution icons

Modified:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java Thu Jul 29 10:17:15 2010
@@ -25,6 +25,7 @@ import java.awt.RenderingHints;
 import java.awt.geom.Line2D;
 
 import org.apache.pivot.collections.Dictionary;
+import org.apache.pivot.collections.Sequence;
 import org.apache.pivot.wtk.Bounds;
 import org.apache.pivot.wtk.Button;
 import org.apache.pivot.wtk.ButtonPressListener;
@@ -329,7 +330,7 @@ public class TerraFrameSkin extends Wind
 
         frame.add(resizeHandle);
 
-        iconChanged(frame, null);
+        iconAdded(frame, null);
         titleChanged(frame, null);
         activeChanged(frame, null);
         maximizedChanged(frame);
@@ -807,10 +808,25 @@ public class TerraFrameSkin extends Wind
     }
 
     @Override
-    public void iconChanged(Window window, Image previousIcon) {
-        Image icon = window.getIcon();
-        iconImageView.setVisible(icon != null);
-        iconImageView.setImage(icon);
+    public void iconAdded(Window window, Image addedIcon) {
+        if (window.getIcons().getLength() > 0) {
+            iconImageView.setVisible(true);
+            iconImageView.setImage(window.getIcons().get(0));
+        } else {
+            iconImageView.setVisible(false);
+            iconImageView.setImage((Image)null);
+        }
+    }
+    
+    @Override
+    public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
+        if (window.getIcons().getLength() > 0) {
+            iconImageView.setVisible(true);
+            iconImageView.setImage(window.getIcons().get(0));
+        } else {
+            iconImageView.setVisible(false);
+            iconImageView.setImage((Image)null);
+        }
     }
 
     @Override

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java Thu Jul 29 10:17:15 2010
@@ -23,6 +23,7 @@ import java.awt.GraphicsEnvironment;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
 import java.io.File;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
@@ -77,7 +78,12 @@ public final class DesktopApplicationCon
             }
 
             @Override
-            public void iconChanged(Window window, Image previousIcon) {
+            public void iconAdded(Window window, Image addedIcon) {
+                updateFrameTitleBar();
+            }
+            
+            @Override
+            public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
                 updateFrameTitleBar();
             }
         };
@@ -148,10 +154,16 @@ public final class DesktopApplicationCon
                         } else {
                             ((TitledWindow)hostWindow).setTitle(DesktopDisplayHost.this.rootOwner.getTitle());
 
-                            Image icon = DesktopDisplayHost.this.rootOwner.getIcon();
-                            if (icon instanceof Picture) {
-                                Picture rootPicture = (Picture)icon;
-                                hostWindow.setIconImage(rootPicture.getBufferedImage());
+                            java.util.ArrayList<BufferedImage> pictures = new java.util.ArrayList<BufferedImage>();
+                            for (Image icon : DesktopDisplayHost.this.rootOwner.getIcons()) {
+                                if (icon instanceof Picture) {
+                                    pictures.add(((Picture) icon).getBufferedImage());
+                                }
+                            }
+                            if (pictures.size() == 1) {
+                                hostWindow.setIconImage(pictures.get(0));
+                            } else if (pictures.size() > 1) {
+                                hostWindow.setIconImages(pictures);
                             }
                         }
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java Thu Jul 29 10:17:15 2010
@@ -17,11 +17,13 @@
 package org.apache.pivot.wtk;
 
 import java.net.URL;
+import java.util.Iterator;
 
 import org.apache.pivot.beans.DefaultProperty;
 import org.apache.pivot.collections.ArrayList;
 import org.apache.pivot.collections.HashMap;
 import org.apache.pivot.collections.Sequence;
+import org.apache.pivot.util.ImmutableIterator;
 import org.apache.pivot.util.ListenerList;
 import org.apache.pivot.util.Vote;
 import org.apache.pivot.util.concurrent.TaskExecutionException;
@@ -226,6 +228,65 @@ public class Window extends Container {
         }
     }
 
+    public class IconImageSequence implements Sequence<Image>, Iterable<Image> {
+        @Override
+        public int add(Image image) {
+            int index = iconImageList.add(image);
+
+            windowListeners.iconAdded(Window.this, image);
+
+            return index;
+        }
+
+        @Override
+        public void insert(Image image, int index) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public Image update(int index, Image image) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public int remove(Image image) {
+            int index = indexOf(image);
+
+            if (index >= 0) {
+               remove(index, 1);
+            }
+
+            return index;
+        }
+
+        @Override
+        public Sequence<Image> remove(int index, int count) {
+            Sequence<Image> removed = iconImageList.remove(index, count);
+            windowListeners.iconsRemoved(Window.this, index, removed);
+            return removed;
+        }
+
+        @Override
+        public Image get(int index) {
+            return iconImageList.get(index);
+        }
+
+        @Override
+        public int indexOf(Image image) {
+            return iconImageList.indexOf(image);
+        }
+
+        @Override
+        public int getLength() {
+            return iconImageList.getLength();
+        }
+        
+        @Override
+        public Iterator<Image> iterator() {
+            return new ImmutableIterator<Image>(iconImageList.iterator());
+        }
+    }
+    
     private static class WindowListenerList extends ListenerList<WindowListener>
         implements WindowListener {
         @Override
@@ -236,12 +297,19 @@ public class Window extends Container {
         }
 
         @Override
-        public void iconChanged(Window window, Image previousIcon) {
+        public void iconAdded(Window window, Image addedIcon) {
             for (WindowListener listener : this) {
-                listener.iconChanged(window, previousIcon);
+                listener.iconAdded(window, addedIcon);
             }
         }
-
+        
+        @Override
+        public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
+            for (WindowListener listener : this) {
+                listener.iconsRemoved(window, index, removed);
+            }
+        }
+        
         @Override
         public void contentChanged(Window window, Component previousContent) {
             for (WindowListener listener : this) {
@@ -368,7 +436,8 @@ public class Window extends Container {
     private HashMap<Keyboard.KeyStroke, Action> actionMap = new HashMap<Keyboard.KeyStroke, Action>();
 
     private String title = null;
-    private Image icon = null;
+    private ArrayList<Image> iconImageList = new ArrayList<Image>();
+    private IconImageSequence iconImageSequence = new IconImageSequence();
     private Component content = null;
     private Component focusDescendant = null;
 
@@ -702,30 +771,12 @@ public class Window extends Container {
     }
 
     /**
-     * Returns the window's icon.
-     *
-     * @return
-     * The window's icon, or <tt>null</tt> if the window has no icon.
+     * Returns the icons for this window.
      */
-    public Image getIcon() {
-        return icon;
+    public IconImageSequence getIcons() {
+        return iconImageSequence;
     }
-
-    /**
-     * Sets the window's icon.
-     *
-     * @param icon
-     * The window's icon, or <tt>null</tt> for no icon.
-     */
-    public void setIcon(Image icon) {
-        Image previousIcon = this.icon;
-
-        if (previousIcon != icon) {
-            this.icon = icon;
-            windowListeners.iconChanged(this, previousIcon);
-        }
-    }
-
+    
     /**
      * Sets the window's icon by URL.
      * <p>
@@ -753,7 +804,8 @@ public class Window extends Container {
             ApplicationContext.getResourceCache().put(iconURL, icon);
         }
 
-        setIcon(icon);
+        getIcons().remove(0, getIcons().getLength());
+        getIcons().add(icon);
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java Thu Jul 29 10:17:15 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.collections.Sequence;
 import org.apache.pivot.wtk.media.Image;
 
 /**
@@ -31,7 +32,11 @@ public interface WindowListener {
         }
 
         @Override
-        public void iconChanged(Window window, Image previousIcon) {
+        public void iconAdded(Window window, Image addedIcon) {
+        }
+        
+        @Override
+        public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
         }
 
         @Override
@@ -59,9 +64,18 @@ public interface WindowListener {
      * Called when a window's icon has changed.
      *
      * @param window
-     * @param previousIcon
+     * @param addedIcon
+     */
+    public void iconAdded(Window window, Image addedIcon);
+    
+    /**
+     * Called when a window's icon has changed.
+     *
+     * @param window
+     * @param index
+     * @param removed
      */
-    public void iconChanged(Window window, Image previousIcon);
+    public void iconsRemoved(Window window, int index, Sequence<Image> removed);
 
     /**
      * Called when a window's content component has changed.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java Thu Jul 29 10:17:15 2010
@@ -18,6 +18,7 @@ package org.apache.pivot.wtk.skin;
 
 import java.awt.Color;
 
+import org.apache.pivot.collections.Sequence;
 import org.apache.pivot.util.Vote;
 import org.apache.pivot.wtk.Bounds;
 import org.apache.pivot.wtk.Component;
@@ -127,10 +128,15 @@ public class WindowSkin extends Containe
     }
 
     @Override
-    public void iconChanged(Window window, Image previousIcon) {
+    public void iconAdded(Window window, Image addedIcon) {
         // No-op
     }
-
+    
+    @Override
+    public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
+        // No-op
+    }
+    
     @Override
     public void contentChanged(Window window, Component previousContent) {
         invalidateComponent();