You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/09/11 20:09:19 UTC

svn commit: r813966 - in /incubator/pivot/trunk: tutorials/src/org/apache/pivot/tutorials/menus/ wtk/src/org/apache/pivot/wtk/ wtk/src/org/apache/pivot/wtk/skin/terra/

Author: gbrown
Date: Fri Sep 11 18:09:18 2009
New Revision: 813966

URL: http://svn.apache.org/viewvc?rev=813966&view=rev
Log:
Complete context menu tutorial; ensure that context menus remain within display bounds.

Added:
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/battery.png   (with props)
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/edit-paste.png   (with props)
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/emblem-favorite.png   (with props)
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/face-smile.png   (with props)
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/weather-clear.png   (with props)
Modified:
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/ContextMenus.java
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/context_menus.wtkx
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuHandler.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java

Modified: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/ContextMenus.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/ContextMenus.java?rev=813966&r1=813965&r2=813966&view=diff
==============================================================================
--- incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/ContextMenus.java (original)
+++ incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/ContextMenus.java Fri Sep 11 18:09:18 2009
@@ -17,20 +17,49 @@
 package org.apache.pivot.tutorials.menus;
 
 import org.apache.pivot.collections.Map;
+import org.apache.pivot.wtk.Action;
 import org.apache.pivot.wtk.Application;
+import org.apache.pivot.wtk.Component;
+import org.apache.pivot.wtk.DesktopApplicationContext;
 import org.apache.pivot.wtk.Display;
+import org.apache.pivot.wtk.Menu;
+import org.apache.pivot.wtk.MenuHandler;
+import org.apache.pivot.wtk.Prompt;
 import org.apache.pivot.wtk.Window;
 import org.apache.pivot.wtkx.WTKXSerializer;
 
 public class ContextMenus implements Application {
     private Window window = null;
+    private MenuHandler menuHandler = new MenuHandler.Adapter() {
+        @Override
+        public boolean configureContextMenu(Component component, Menu menu, int x, int y) {
+            final Component descendant = window.getDescendantAt(x, y);
+
+            Menu.Section menuSection = new Menu.Section();
+            menu.getSections().add(menuSection);
+
+            Menu.Item whatIsThisMenuItem = new Menu.Item("What is this?");
+            whatIsThisMenuItem.setAction(new Action() {
+                @Override
+                public void perform() {
+                    String description = (String)descendant.getUserData().get("description");
+                    String message = "This is a " + description + ".";
+
+                    Prompt.prompt(message, window);
+                }
+            });
+
+            menuSection.add(whatIsThisMenuItem);
+
+            return false;
+        }
+    };
 
     @Override
     public void startup(Display display, Map<String, String> properties) throws Exception {
         WTKXSerializer wtkxSerializer = new WTKXSerializer();
         window = (Window)wtkxSerializer.readObject(this, "context_menus.wtkx");
-
-        // TODO
+        window.setMenuHandler(menuHandler);
 
         window.open(display);
     }
@@ -51,4 +80,8 @@
     @Override
     public void resume() {
     }
+
+    public static void main(String[] args) {
+        DesktopApplicationContext.main(ContextMenus.class, args);
+    }
 }

Added: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/battery.png
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/battery.png?rev=813966&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/battery.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/context_menus.wtkx
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/context_menus.wtkx?rev=813966&r1=813965&r2=813966&view=diff
==============================================================================
Binary files - no diff available.

Added: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/edit-paste.png
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/edit-paste.png?rev=813966&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/edit-paste.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/emblem-favorite.png
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/emblem-favorite.png?rev=813966&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/emblem-favorite.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/face-smile.png
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/face-smile.png?rev=813966&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/face-smile.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/weather-clear.png
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/weather-clear.png?rev=813966&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/weather-clear.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuHandler.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuHandler.java?rev=813966&r1=813965&r2=813966&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuHandler.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuHandler.java Fri Sep 11 18:09:18 2009
@@ -39,7 +39,7 @@
     }
 
     /**
-     * Called to allow an implementation to configure a menu bar.
+     * Called when a component to which this handler is attached gains the focus.
      *
      * @param component
      * @param menuBar
@@ -47,7 +47,7 @@
     public void configureMenuBar(Component component, MenuBar menuBar);
 
     /**
-     * Called to allow an implementation to perform cleanup on a menu bar.
+     * Called when a component to which this handler is attached loses the focus.
      *
      * @param component
      * @param menuBar
@@ -55,7 +55,7 @@
     public void cleanupMenuBar(Component component, MenuBar menuBar);
 
     /**
-     * Called to allow an implementation to configure a context menu.
+     * Called when the user right-clicks on a component to which this handler is attached.
      *
      * @param component
      * @param menu
@@ -64,7 +64,7 @@
      *
      * @return
      * <tt>true</tt> to stop propagation of context menu configuration;
-     * <tt>false</tt> to allow it to continue
+     * <tt>false</tt> to allow it to continue.
      */
     public boolean configureContextMenu(Component component, Menu menu, int x, int y);
 }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java?rev=813966&r1=813965&r2=813966&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java Fri Sep 11 18:09:18 2009
@@ -98,8 +98,6 @@
     }
 
     public void open(Display display, int x, int y) {
-        // TODO Determine x, y and width, height based on display bounds
-
         autoClose = true;
 
         setLocation(x, y);
@@ -115,8 +113,6 @@
     }
 
     public void open(Window owner, int x, int y) {
-        // TODO Determine x, y and width, height based on display bounds
-
         autoClose = true;
 
         setLocation(x, y);

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java?rev=813966&r1=813965&r2=813966&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java Fri Sep 11 18:09:18 2009
@@ -19,10 +19,12 @@
 import java.awt.Color;
 
 import org.apache.pivot.util.Vote;
+import org.apache.pivot.wtk.ApplicationContext;
 import org.apache.pivot.wtk.Border;
 import org.apache.pivot.wtk.Component;
 import org.apache.pivot.wtk.Container;
 import org.apache.pivot.wtk.ContainerMouseListener;
+import org.apache.pivot.wtk.Dimensions;
 import org.apache.pivot.wtk.Display;
 import org.apache.pivot.wtk.Keyboard;
 import org.apache.pivot.wtk.Menu;
@@ -32,6 +34,7 @@
 import org.apache.pivot.wtk.MenuPopupStateListener;
 import org.apache.pivot.wtk.Mouse;
 import org.apache.pivot.wtk.Panorama;
+import org.apache.pivot.wtk.Point;
 import org.apache.pivot.wtk.Theme;
 import org.apache.pivot.wtk.Window;
 import org.apache.pivot.wtk.effects.DropShadowDecorator;
@@ -44,6 +47,29 @@
  */
 public class TerraMenuPopupSkin extends WindowSkin implements MenuPopupListener,
     MenuPopupStateListener {
+    private class RepositionCallback implements Runnable {
+        @Override
+        public void run() {
+            MenuPopup menuPopup = (MenuPopup)getComponent();
+            Display display = menuPopup.getDisplay();
+
+            Point location = menuPopup.getLocation();
+            Dimensions size = menuPopup.getSize();
+
+            int x = location.x;
+            if (x + size.width > display.getWidth()) {
+                x -= size.width;
+            }
+
+            int y = location.y;
+            if (y + size.height > display.getHeight()) {
+                y-= size.height;
+            }
+
+            menuPopup.setLocation(x, y);
+        }
+    }
+
     private Panorama panorama;
     private Border border;
 
@@ -204,6 +230,8 @@
 
             menu.requestFocus();
         }
+
+        ApplicationContext.queueCallback(new RepositionCallback());
     }
 
     @Override