< prev index next >

src/java.desktop/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java

Print this page




 851                            mnemIndex,  textRect.x - 1, textRect.y +
 852                            fm.getAscent() - 1);
 853             }
 854         } else {
 855             // *** paint the text normally
 856             if (model.isArmed()|| (menuItem instanceof JMenu && model.isSelected())) {
 857                 g.setColor(selectionForeground); // Uses protected field.
 858             }
 859             SwingUtilities2.drawStringUnderlineCharAt(menuItem, g,text,
 860                            mnemIndex, textRect.x, textRect.y + fm.getAscent());
 861         }
 862     }
 863 
 864     /**
 865      * Returns a menu element path.
 866      *
 867      * @return a menu element path
 868      */
 869     public MenuElement[] getPath() {
 870         MenuSelectionManager m = MenuSelectionManager.defaultManager();
 871         MenuElement oldPath[] = m.getSelectedPath();
 872         MenuElement newPath[];
 873         int i = oldPath.length;
 874         if (i == 0)
 875             return new MenuElement[0];
 876         Component parent = menuItem.getParent();
 877         if (oldPath[i-1].getComponent() == parent) {
 878             // The parent popup menu is the last so far
 879             newPath = new MenuElement[i+1];
 880             System.arraycopy(oldPath, 0, newPath, 0, i);
 881             newPath[i] = menuItem;
 882         } else {
 883             // A sibling menuitem is the current selection
 884             //
 885             //  This probably needs to handle 'exit submenu into
 886             // a menu item.  Search backwards along the current
 887             // selection until you find the parent popup menu,
 888             // then copy up to that and add yourself...
 889             int j;
 890             for (j = oldPath.length-1; j >= 0; j--) {
 891                 if (oldPath[j].getComponent() == parent)
 892                     break;
 893             }
 894             newPath = new MenuElement[j+2];
 895             System.arraycopy(oldPath, 0, newPath, 0, j+1);
 896             newPath[j+1] = menuItem;
 897             /*
 898             System.out.println("Sibling condition -- ");
 899             System.out.println("Old array : ");
 900             printMenuElementArray(oldPath, false);
 901             System.out.println("New array : ");
 902             printMenuElementArray(newPath, false);
 903             */
 904         }
 905         return newPath;
 906     }
 907 
 908     void printMenuElementArray(MenuElement path[], boolean dumpStack) {
 909         System.out.println("Path is(");
 910         int i, j;
 911         for(i=0,j=path.length; i<j ;i++){
 912             for (int k=0; k<=i; k++)
 913                 System.out.print("  ");
 914             MenuElement me = path[i];
 915             if(me instanceof JMenuItem)
 916                 System.out.println(((JMenuItem)me).getText() + ", ");
 917             else if (me == null)
 918                 System.out.println("NULL , ");
 919             else
 920                 System.out.println("" + me + ", ");
 921         }
 922         System.out.println(")");
 923 
 924         if (dumpStack == true)
 925             Thread.dumpStack();
 926     }
 927     /** Mouse input handler */
 928     protected class MouseInputHandler implements MouseInputListener {


1072             int modifiers = e.getModifiers();
1073             // 4188027: drag enter/exit added in JDK 1.1.7A, JDK1.2
1074             if ((modifiers & (InputEvent.BUTTON1_MASK |
1075                               InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) !=0 ) {
1076                 MenuSelectionManager.defaultManager().processMouseEvent(e);
1077             } else {
1078             manager.setSelectedPath(getPath());
1079              }
1080         }
1081         @SuppressWarnings("deprecation")
1082         public void mouseExited(MouseEvent e) {
1083             MenuSelectionManager manager = MenuSelectionManager.defaultManager();
1084 
1085             int modifiers = e.getModifiers();
1086             // 4188027: drag enter/exit added in JDK 1.1.7A, JDK1.2
1087             if ((modifiers & (InputEvent.BUTTON1_MASK |
1088                               InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) !=0 ) {
1089                 MenuSelectionManager.defaultManager().processMouseEvent(e);
1090             } else {
1091 
1092                 MenuElement path[] = manager.getSelectedPath();
1093                 if (path.length > 1 && path[path.length-1] == menuItem) {
1094                     MenuElement newPath[] = new MenuElement[path.length-1];
1095                     int i,c;
1096                     for(i=0,c=path.length-1;i<c;i++)
1097                         newPath[i] = path[i];
1098                     manager.setSelectedPath(newPath);
1099                 }
1100                 }
1101         }
1102 
1103         public void mouseDragged(MouseEvent e) {
1104             MenuSelectionManager.defaultManager().processMouseEvent(e);
1105         }
1106         public void mouseMoved(MouseEvent e) {
1107         }
1108 
1109         //
1110         // MenuDragListener
1111         //
1112         public void menuDragMouseEntered(MenuDragMouseEvent e) {
1113             MenuSelectionManager manager = e.getMenuSelectionManager();
1114             MenuElement path[] = e.getPath();
1115             manager.setSelectedPath(path);
1116         }
1117         public void menuDragMouseDragged(MenuDragMouseEvent e) {
1118             MenuSelectionManager manager = e.getMenuSelectionManager();
1119             MenuElement path[] = e.getPath();
1120             manager.setSelectedPath(path);
1121         }
1122         public void menuDragMouseExited(MenuDragMouseEvent e) {}
1123         public void menuDragMouseReleased(MenuDragMouseEvent e) {
1124             if (!menuItem.isEnabled()) {
1125                 return;
1126             }
1127             MenuSelectionManager manager = e.getMenuSelectionManager();
1128             MenuElement path[] = e.getPath();
1129             Point p = e.getPoint();
1130             if (p.x >= 0 && p.x < menuItem.getWidth() &&
1131                     p.y >= 0 && p.y < menuItem.getHeight()) {
1132                 doClick(manager);
1133             } else {
1134                 manager.clearSelectedPath();
1135             }
1136         }
1137 
1138 
1139         //
1140         // PropertyChangeListener
1141         //
1142         public void propertyChange(PropertyChangeEvent e) {
1143             String name = e.getPropertyName();
1144 
1145             if (name == "labelFor" || name == "displayedMnemonic" ||
1146                 name == "accelerator") {
1147                 updateAcceleratorBinding();
1148             } else if (name == "text" || "font" == name || "foreground" == name


 851                            mnemIndex,  textRect.x - 1, textRect.y +
 852                            fm.getAscent() - 1);
 853             }
 854         } else {
 855             // *** paint the text normally
 856             if (model.isArmed()|| (menuItem instanceof JMenu && model.isSelected())) {
 857                 g.setColor(selectionForeground); // Uses protected field.
 858             }
 859             SwingUtilities2.drawStringUnderlineCharAt(menuItem, g,text,
 860                            mnemIndex, textRect.x, textRect.y + fm.getAscent());
 861         }
 862     }
 863 
 864     /**
 865      * Returns a menu element path.
 866      *
 867      * @return a menu element path
 868      */
 869     public MenuElement[] getPath() {
 870         MenuSelectionManager m = MenuSelectionManager.defaultManager();
 871         MenuElement[] oldPath = m.getSelectedPath();
 872         MenuElement[] newPath;
 873         int i = oldPath.length;
 874         if (i == 0)
 875             return new MenuElement[0];
 876         Component parent = menuItem.getParent();
 877         if (oldPath[i-1].getComponent() == parent) {
 878             // The parent popup menu is the last so far
 879             newPath = new MenuElement[i+1];
 880             System.arraycopy(oldPath, 0, newPath, 0, i);
 881             newPath[i] = menuItem;
 882         } else {
 883             // A sibling menuitem is the current selection
 884             //
 885             //  This probably needs to handle 'exit submenu into
 886             // a menu item.  Search backwards along the current
 887             // selection until you find the parent popup menu,
 888             // then copy up to that and add yourself...
 889             int j;
 890             for (j = oldPath.length-1; j >= 0; j--) {
 891                 if (oldPath[j].getComponent() == parent)
 892                     break;
 893             }
 894             newPath = new MenuElement[j+2];
 895             System.arraycopy(oldPath, 0, newPath, 0, j+1);
 896             newPath[j+1] = menuItem;
 897             /*
 898             System.out.println("Sibling condition -- ");
 899             System.out.println("Old array : ");
 900             printMenuElementArray(oldPath, false);
 901             System.out.println("New array : ");
 902             printMenuElementArray(newPath, false);
 903             */
 904         }
 905         return newPath;
 906     }
 907 
 908     void printMenuElementArray(MenuElement[] path, boolean dumpStack) {
 909         System.out.println("Path is(");
 910         int i, j;
 911         for(i=0,j=path.length; i<j ;i++){
 912             for (int k=0; k<=i; k++)
 913                 System.out.print("  ");
 914             MenuElement me = path[i];
 915             if(me instanceof JMenuItem)
 916                 System.out.println(((JMenuItem)me).getText() + ", ");
 917             else if (me == null)
 918                 System.out.println("NULL , ");
 919             else
 920                 System.out.println("" + me + ", ");
 921         }
 922         System.out.println(")");
 923 
 924         if (dumpStack == true)
 925             Thread.dumpStack();
 926     }
 927     /** Mouse input handler */
 928     protected class MouseInputHandler implements MouseInputListener {


1072             int modifiers = e.getModifiers();
1073             // 4188027: drag enter/exit added in JDK 1.1.7A, JDK1.2
1074             if ((modifiers & (InputEvent.BUTTON1_MASK |
1075                               InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) !=0 ) {
1076                 MenuSelectionManager.defaultManager().processMouseEvent(e);
1077             } else {
1078             manager.setSelectedPath(getPath());
1079              }
1080         }
1081         @SuppressWarnings("deprecation")
1082         public void mouseExited(MouseEvent e) {
1083             MenuSelectionManager manager = MenuSelectionManager.defaultManager();
1084 
1085             int modifiers = e.getModifiers();
1086             // 4188027: drag enter/exit added in JDK 1.1.7A, JDK1.2
1087             if ((modifiers & (InputEvent.BUTTON1_MASK |
1088                               InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) !=0 ) {
1089                 MenuSelectionManager.defaultManager().processMouseEvent(e);
1090             } else {
1091 
1092                 MenuElement[] path = manager.getSelectedPath();
1093                 if (path.length > 1 && path[path.length-1] == menuItem) {
1094                     MenuElement[] newPath = new MenuElement[path.length-1];
1095                     int i,c;
1096                     for(i=0,c=path.length-1;i<c;i++)
1097                         newPath[i] = path[i];
1098                     manager.setSelectedPath(newPath);
1099                 }
1100                 }
1101         }
1102 
1103         public void mouseDragged(MouseEvent e) {
1104             MenuSelectionManager.defaultManager().processMouseEvent(e);
1105         }
1106         public void mouseMoved(MouseEvent e) {
1107         }
1108 
1109         //
1110         // MenuDragListener
1111         //
1112         public void menuDragMouseEntered(MenuDragMouseEvent e) {
1113             MenuSelectionManager manager = e.getMenuSelectionManager();
1114             MenuElement[] path = e.getPath();
1115             manager.setSelectedPath(path);
1116         }
1117         public void menuDragMouseDragged(MenuDragMouseEvent e) {
1118             MenuSelectionManager manager = e.getMenuSelectionManager();
1119             MenuElement[] path = e.getPath();
1120             manager.setSelectedPath(path);
1121         }
1122         public void menuDragMouseExited(MenuDragMouseEvent e) {}
1123         public void menuDragMouseReleased(MenuDragMouseEvent e) {
1124             if (!menuItem.isEnabled()) {
1125                 return;
1126             }
1127             MenuSelectionManager manager = e.getMenuSelectionManager();
1128             MenuElement[] path = e.getPath();
1129             Point p = e.getPoint();
1130             if (p.x >= 0 && p.x < menuItem.getWidth() &&
1131                     p.y >= 0 && p.y < menuItem.getHeight()) {
1132                 doClick(manager);
1133             } else {
1134                 manager.clearSelectedPath();
1135             }
1136         }
1137 
1138 
1139         //
1140         // PropertyChangeListener
1141         //
1142         public void propertyChange(PropertyChangeEvent e) {
1143             String name = e.getPropertyName();
1144 
1145             if (name == "labelFor" || name == "displayedMnemonic" ||
1146                 name == "accelerator") {
1147                 updateAcceleratorBinding();
1148             } else if (name == "text" || "font" == name || "foreground" == name
< prev index next >