1 19 20 28 29 package org.netbeans.modules.xml.schema.abe; 30 31 import java.awt.BorderLayout ; 32 import java.awt.Color ; 33 import java.awt.Font ; 34 import java.awt.dnd.DropTargetDragEvent ; 35 import java.awt.dnd.DropTargetDropEvent ; 36 import java.awt.dnd.DropTargetEvent ; 37 import java.awt.event.ActionEvent ; 38 import java.awt.event.ActionListener ; 39 import java.awt.event.KeyAdapter ; 40 import java.awt.event.KeyEvent ; 41 import java.awt.event.MouseAdapter ; 42 import java.awt.event.MouseEvent ; 43 import java.beans.PropertyChangeEvent ; 44 import java.beans.PropertyChangeListener ; 45 import java.net.URI ; 46 import java.net.URISyntaxException ; 47 import javax.swing.Box ; 48 import javax.swing.JPanel ; 49 import javax.swing.JSeparator ; 50 import javax.swing.JTextField ; 51 import javax.swing.border.EmptyBorder ; 52 import javax.swing.border.LineBorder ; 53 import org.netbeans.modules.xml.axi.AXIComponent; 54 import org.netbeans.modules.xml.axi.AXIDocument; 55 import org.netbeans.modules.xml.axi.AXIModel; 56 import org.netbeans.modules.xml.axi.ContentModel; 57 import org.netbeans.modules.xml.axi.Element; 58 import org.netbeans.modules.xml.schema.abe.nodes.ABEAbstractNode; 59 import org.netbeans.modules.xml.schema.abe.nodes.NamespaceNode; 60 import org.netbeans.modules.xml.schema.abe.palette.DnDHelper; 61 import org.openide.util.NbBundle; 62 63 67 public class NamespacePanel extends GradientShadePanel{ 68 protected static final long serialVersionUID = 7526472295622776147L; 69 private InplaceEditableLabel namespaceLabel; 70 71 public NamespacePanel(InstanceUIContext context) { 72 super(context); 73 super.selectedTopGradientColor = Color.WHITE; 74 super.selectedBottomGradientColor = Color.WHITE; 75 initialize(); 76 initKeyListener(); 77 } 78 79 80 private void initKeyListener(){ 81 addKeyListener(new KeyAdapter () { 82 public void keyPressed(KeyEvent e) { 83 if(context.getFocusTraversalManager().isFocusChangeEvent(e)) 84 context.getFocusTraversalManager().handleEvent(e, NamespacePanel.this); 85 } 86 87 }); 88 } 89 90 private void initialize(){ 91 setLayout(new BorderLayout ()); 92 setOpaque(false); 93 setBorder(new EmptyBorder (1,1,1,1)); 94 96 String namespace = getNamespace(); 97 namespaceLabel = new InplaceEditableLabel(namespace); 98 namespaceLabel.setForeground(InstanceDesignConstants.NAMESPACE_COLOR); 101 namespaceLabel.setWidthMagnificationFactor(1); 102 initNamespaceEditListener(); 103 initNamespaceChangeListener(); 104 add(Box.createHorizontalStrut(TitleWrapperPanel.TITLE_BEGIN_FUDGE), BorderLayout.WEST); 105 add(Box.createVerticalStrut(5), BorderLayout.NORTH); 106 add(namespaceLabel, BorderLayout.CENTER); 107 JPanel botP = new JPanel (new BorderLayout ()); 108 botP.setOpaque(false); 109 botP.add(Box.createVerticalStrut(5), BorderLayout.NORTH); 110 JSeparator hline = new JSeparator (); 111 hline.setForeground(new Color (250, 232, 213)); 112 botP.add(hline, BorderLayout.CENTER); 113 add(botP, BorderLayout.SOUTH); 114 115 119 121 addPropertyChangeListener(new PropertyChangeListener () { 122 public void propertyChange(PropertyChangeEvent evt) { 123 if(evt.getPropertyName().equals(ABEBaseDropPanel.PROP_SELECTED)){ 124 Font font = namespaceLabel.getFont(); 125 if(((Boolean )evt.getNewValue()).booleanValue()){ 126 setBorder(new LineBorder (InstanceDesignConstants.XP_ORANGE, 2)); 127 namespaceLabel.setFont(new Font (font.getName(), Font.BOLD, font.getSize())); 128 }else{ 129 setBorder(new EmptyBorder (1,1,1,1)); 130 namespaceLabel.setFont(new Font (font.getName(), Font.PLAIN, font.getSize())); 131 } 132 } 133 } 134 }); 135 136 addMouseListener(new MouseAdapter () { 137 public void mouseClicked(MouseEvent e) { 138 mouseClickedActionHandler(e, false); 139 } 140 public void mouseEntered(MouseEvent e) { 141 mouseClickedActionHandler(e, true); 142 } 143 public void mouseReleased(MouseEvent e) { 144 mouseClickedActionHandler(e, true); 145 } 146 }); 147 } 148 149 public void mouseClickedActionHandler(MouseEvent e, boolean handelPopupOnly){ 150 if(e.getClickCount() == 1){ 151 if(e.isPopupTrigger()){ 152 context.getMultiComponentActionManager().showPopupMenu(e, NamespacePanel.this); 153 return; 154 } 155 if(handelPopupOnly) 156 return; 157 if(e.isControlDown()) 159 context.getComponentSelectionManager().addToSelectedComponents(NamespacePanel.this); 160 else 161 context.getComponentSelectionManager().setSelectedComponent(NamespacePanel.this); 162 } 163 } 164 165 public String getNamespace(){ 166 String namespace = context.getAXIModel().getRoot().getTargetNamespace(); 167 if(namespace == null) 168 return NbBundle.getMessage( 169 NamespacePanel.class, "LBL_NO_NAMESPACE"); 170 else 171 return namespace; 172 } 173 174 public void setNamespaceInModel(String nsStr){ 175 AXIModel model = context.getAXIModel(); 176 model.startTransaction(); 177 try{ 178 model.getRoot().setTargetNamespace(nsStr); 179 }finally{ 180 model.endTransaction(); 181 } 182 } 183 184 protected void initNamespaceEditListener(){ 185 namespaceLabel.addPropertyChangeListener(new PropertyChangeListener () { 186 public void propertyChange(PropertyChangeEvent evt) { 187 if(evt.getPropertyName().equals(namespaceLabel.PROPERTY_MODE_CHANGE)){ 188 if(evt.getNewValue() == InplaceEditableLabel.Mode.EDIT){ 189 final JTextField field = new JTextField (getNamespace()); 192 field.select(0, field.getText().length()); 193 field.addActionListener(new ActionListener (){ 194 public void actionPerformed(ActionEvent e) { 195 String newName = field.getText(); 196 try { 197 new URI (newName); 198 } catch (URISyntaxException ex) { 199 org.openide.ErrorManager.getDefault().notify(ex); 200 return; 201 } 202 setNamespaceInModel(newName); 203 namespaceLabel.setText(getNamespace()); 204 } 205 }); 206 namespaceLabel.setInlineEditorComponent(field); 207 } 208 } 209 } 210 }); 211 } 212 213 214 215 216 public void addElement(){ 217 AXIDocument adoc = context.getAXIModel().getRoot(); 218 AXIModel model = context.getAXIModel(); 219 model.startTransaction(); 220 try{ 221 Element nelm = model.getComponentFactory().createElement(); 222 String str = UIUtilities.getUniqueName( 223 InstanceDesignConstants.NEW_ELEMENT_NAME, adoc); 224 nelm.setName(str); 225 adoc.addElement(nelm); 226 }finally{ 227 context.setUserInducedEventMode(true, this); 228 model.endTransaction(); 229 } 230 } 231 232 public void addComplexType(){ 233 AXIDocument adoc = context.getAXIModel().getRoot(); 234 AXIModel model = context.getAXIModel(); 235 model.startTransaction(); 236 try{ 237 ContentModel nelm = model.getComponentFactory().createComplexType(); 238 String str = UIUtilities.getUniqueName( 239 InstanceDesignConstants.NEW_COMPLEXTYPE_NAME, adoc); 240 nelm.setName(str); 241 adoc.addContentModel(nelm); 242 }finally{ 243 context.setUserInducedEventMode(true, this); 244 model.endTransaction(); 245 } 246 } 247 248 public void drop(DropTargetDropEvent event) { 249 super.drop(event); 250 DnDHelper.PaletteItem pi = DnDHelper.getDraggedPaletteItem(event); 251 if( (pi != pi.ELEMENT) && (pi != pi.COMPLEXTYPE) ) 252 event.rejectDrop(); 253 else{ 254 context.setUserInducedEventMode(true, this); 255 try{ 256 if(pi == pi.ELEMENT){ 257 addElement(); 258 } else if(pi == pi.COMPLEXTYPE){ 259 addComplexType(); 260 } 261 }finally{ 262 context.setUserInducedEventMode(false); 263 } 264 } 265 } 266 267 public void dragExit(DropTargetEvent event) { 268 super.dragExit(event); 269 } 270 271 public void dragOver(DropTargetDragEvent event) { 272 super.dragOver(event); 273 DnDHelper.PaletteItem pi = DnDHelper.getDraggedPaletteItem(event); 274 if( (pi != pi.ELEMENT) && (pi != pi.COMPLEXTYPE) ) 275 event.rejectDrag(); 276 } 277 278 public void dragEnter(DropTargetDragEvent event) { 279 super.dragEnter(event); 280 DnDHelper.PaletteItem pi = DnDHelper.getDraggedPaletteItem(event); 281 if( (pi != pi.ELEMENT) && (pi != pi.COMPLEXTYPE) ) 282 event.rejectDrag(); 283 } 284 285 NamespaceNode nsNode; 286 public ABEAbstractNode getNBNode() { 287 if(nsNode == null){ 288 nsNode = new NamespaceNode(context.getAXIModel().getRoot(), context); 289 } 290 return nsNode; 291 } 292 293 public AXIComponent getAXIComponent(){ 294 return context.getAXIModel().getRoot(); 295 } 296 297 private void initNamespaceChangeListener() { 298 context.getAXIModel().getRoot().addPropertyChangeListener(new ModelEventMediator(this, context.getAXIModel().getRoot()){ 299 public void _propertyChange(PropertyChangeEvent evt) { 300 if(evt.getPropertyName().equals(AXIDocument.PROP_TARGET_NAMESPACE)){ 301 namespaceLabel.setText(getNamespace()); 302 } 303 } 304 }); 305 } 306 307 public void accept(UIVisitor visitor) { 308 visitor.visit(this); 309 } 310 311 312 } 313 | Popular Tags |