1 package org.columba.core.gui.menu; 19 20 import java.awt.Component ; 21 import java.util.Enumeration ; 22 import java.util.Hashtable ; 23 24 import javax.swing.Action ; 25 import javax.swing.JMenu ; 26 import javax.swing.JMenuItem ; 27 import javax.swing.JSeparator ; 28 29 import org.columba.core.gui.base.CMenu; 30 31 32 public class ExtendableMenu extends CMenu { 33 34 private MenuModel model; 35 36 private Hashtable <String , ExtendableMenu> map = new Hashtable <String , ExtendableMenu>(); 37 38 private String id; 39 40 public ExtendableMenu(String id, String label) { 41 super(label, id); 42 43 this.id = id; 44 45 model = new MenuModel(id); 46 47 map.put(id, this); 48 } 49 50 public MenuModel getMenuModel() { 51 return model; 52 } 53 54 57 public JMenuItem add(Action action) { 58 model.add(action); 59 60 return super.add(action); 61 62 } 63 64 67 public JMenuItem add(JMenuItem menuItem) { 68 model.add(menuItem); 69 70 return super.add(menuItem); 71 } 72 73 76 public void addSeparator() { 77 int index = getComponentCount(); 78 79 if (index > 0 && (index - 1 < getComponentCount())) { 81 Component prev = getComponent(index - 1); 82 if (prev instanceof JSeparator ) 83 return; 84 } 85 86 model.addSeparator(); 87 88 super.addSeparator(); 89 } 90 91 94 public JMenuItem insert(Action action, int pos) { 95 model.insert(action, pos); 96 97 return super.insert(action, pos); 98 } 99 100 103 public JMenuItem insert(JMenuItem menuItem, int pos) { 104 model.insert(menuItem, pos); 105 106 return super.insert(menuItem, pos); 107 } 108 109 112 public void insertSeparator(int index) { 113 model.insertSeparator(index); 114 115 super.insertSeparator(index); 116 } 117 118 public void addPlaceholder(String placeholderId) { 119 model.appendPlaceholder(placeholderId); 120 } 121 122 public void insertPlaceholder(String placeholderId, int pos) { 123 model.insertPlaceholder(placeholderId, pos); 124 } 125 126 public void insert(Action action, String placeholderId) { 127 int index = model.insert(action, placeholderId); 128 if (index != -1) 129 super.insert(action, index); 130 } 131 132 public void insert(Component component, String placeholderId) { 133 int index = model.insert(component, placeholderId); 134 if (index != -1) 135 super.add(component, index); 136 } 137 138 public void insert(JMenuItem menuItem, String placeholderId) { 139 if (menuItem == null) 140 throw new IllegalArgumentException ("menuItem == null"); 141 if (placeholderId == null) 142 throw new IllegalArgumentException ("placeholderId == null"); 143 144 int index = model.insert(menuItem, placeholderId); 145 if (index != -1) 146 super.insert(menuItem, index); 147 } 148 149 public void insertSeparator(String placeholderId) { 150 int index = model.insertSeparator(placeholderId); 151 if (index > 0 && (index - 1 < getComponentCount())) { 153 Component prev = getComponent(index - 1); 154 if (prev instanceof JSeparator ) 155 return; 156 } 157 158 if (index != -1) 159 super.insertSeparator(index); 160 } 161 162 public void add(ExtendableMenu submenu) { 163 164 map.put(submenu.getId(), submenu); 165 166 model.addSubmenu(submenu.getMenuModel()); 167 168 super.add((JMenu ) submenu); 169 } 170 171 174 public String getId() { 175 return id; 176 } 177 178 public Enumeration <ExtendableMenu> getSubmenuEnumeration() { 179 return map.elements(); 180 } 181 182 185 public Component add(Component component, int index) { 186 model.insert(component, index); 187 188 return super.add(component, index); 189 } 190 191 194 public Component add(Component component) { 195 model.add(component); 196 197 return super.add(component); 198 } 199 200 public void insertPlaceholder(String placeholderId, 201 String insertionPlaceholder) { 202 model.insertPlaceholder(placeholderId, insertionPlaceholder); 203 } 204 } 205 | Popular Tags |