1 19 20 package org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget; 21 22 import java.awt.Color ; 23 import java.awt.Dimension ; 24 import java.awt.EventQueue ; 25 import java.awt.Image ; 26 import java.awt.Point ; 27 import java.awt.Rectangle ; 28 import java.util.List ; 29 import java.util.ListIterator ; 30 import javax.swing.Action ; 31 import javax.swing.BorderFactory ; 32 import javax.swing.border.EmptyBorder ; 33 import org.netbeans.api.visual.action.ActionFactory; 34 import org.netbeans.api.visual.action.TextFieldInplaceEditor; 35 import org.netbeans.api.visual.action.WidgetAction.WidgetDropTargetDragEvent; 36 import org.netbeans.api.visual.action.WidgetAction.WidgetDropTargetDropEvent; 37 import org.netbeans.api.visual.border.Border; 38 import org.netbeans.api.visual.layout.LayoutFactory; 39 import org.netbeans.api.visual.layout.LayoutFactory.SerialAlignment; 40 import org.netbeans.api.visual.model.ObjectState; 41 import org.netbeans.api.visual.widget.Scene; 42 import org.netbeans.api.visual.widget.Widget; 43 import org.netbeans.modules.xml.wsdl.model.extensions.bpel.PartnerLinkType; 44 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.border.GradientFillBorder; 45 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.layout.LeftRightLayout; 46 import org.netbeans.modules.xml.xam.Model; 47 import org.netbeans.modules.xml.xam.ui.XAMUtils; 48 import org.openide.actions.NewAction; 49 import org.openide.util.Lookup; 50 import org.openide.util.Utilities; 51 52 55 public class PartnerLinkTypeWidget extends AbstractWidget<PartnerLinkType> 56 implements ExpandableWidget, DnDHandler { 57 58 private static final boolean EXPANDED_DEFAULT = true; 59 private final PartnerLinkType mPartnerLinkType; 60 private Widget mLabelWidget; 61 62 private PartnerLinkTypeContentWidget mContentWidget; 63 64 private Widget mHeaderWidget; 65 private ExpanderWidget expander; 66 67 private static final Image IMAGE = Utilities.loadImage("org/netbeans/modules/xml/wsdl/ui/view/treeeditor/extension/bpel/resources/partnerlinktype.png"); 68 69 private static final Border HEADER_BORDER = new GradientFillBorder(0, 0, 4, 8, 70 null, WidgetConstants.PARTNERLINKTYPE_GRADIENT_TOP_COLOR, WidgetConstants.PARTNERLINKTYPE_GRADIENT_BOTTOM_COLOR); 71 72 public PartnerLinkTypeWidget(Scene scene, PartnerLinkType partnerLinkType, Lookup lookup) { 73 super(scene, partnerLinkType, lookup); 74 assert partnerLinkType != null : "partnerLinkTypeWidget cannot be created"; 76 mPartnerLinkType = partnerLinkType; 77 init(); 78 } 79 80 private void init() { 81 setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLUE.darker())); 82 setLayout(LayoutFactory.createVerticalLayout()); 83 Widget actionsWidget = createActionsWidget(); 84 mHeaderWidget = new HeaderWidget(getScene(), expander); 85 mHeaderWidget.setLayout(new LeftRightLayout(32)); 86 addChild(mHeaderWidget); 87 88 mLabelWidget = createLabelWidget(); 89 mHeaderWidget.setBorder(HEADER_BORDER); 90 mHeaderWidget.addChild(mLabelWidget); 91 92 93 mHeaderWidget.addChild(actionsWidget); 94 mHeaderWidget.setOpaque(true); 95 96 mHeaderWidget.setMinimumSize(new Dimension (0, 30)); 97 98 mContentWidget = new PartnerLinkTypeContentWidget(getScene(), mPartnerLinkType); 99 if (ExpanderWidget.isExpanded(this, EXPANDED_DEFAULT)) { 100 addChild(mContentWidget); 101 } 102 103 getActions().addAction(((PartnerScene) getScene()).getDnDAction()); 104 } 105 106 private Widget createLabelWidget() { 107 Widget labelWidget = new ImageLabelWidget(getScene(), IMAGE, mPartnerLinkType.getName()); 108 labelWidget.setBorder(new EmptyBorder (4, 4, 1, 1)); 109 labelWidget.getActions().addAction(ActionFactory.createInplaceEditorAction( 110 new TextFieldInplaceEditor() { 111 112 public void setText(Widget widget, String text) { 113 Model model = mPartnerLinkType.getModel(); 114 try { 115 if (model.startTransaction()) { 116 mPartnerLinkType.setName(text); 117 } 118 } finally { 119 model.endTransaction(); 120 } 121 } 122 123 public boolean isEnabled(Widget widget) { 124 if (getWSDLComponent() != null) { 125 return XAMUtils.isWritable(getWSDLComponent().getModel()); 126 } 127 return false; 128 } 129 130 public String getText(Widget widget) { 131 return mPartnerLinkType.getName(); 132 } 133 134 }, null)); 135 return labelWidget; 136 } 137 138 @Override 139 public void updateContent() { 140 if (mHeaderWidget.getChildren().contains(mLabelWidget)) { 141 mHeaderWidget.removeChild(mLabelWidget); 142 } 143 mLabelWidget = createLabelWidget(); 144 mHeaderWidget.addChild(0, mLabelWidget); 145 146 mContentWidget.updateContent(); 147 } 148 149 public void expandWidget(ExpanderWidget expander) { 150 if (mContentWidget.getParentWidget() == null) { 151 addChild(mContentWidget); 152 getScene().revalidate(); 153 EventQueue.invokeLater(new Runnable () { 154 public void run() { 155 Widget parent = getCollaborationWidget(); 161 Rectangle bounds = parent.getBounds(); 162 parent.setMinimumSize(new Dimension (bounds.width, 0)); 163 } 164 }); 165 } 166 } 167 168 public void collapseWidget(ExpanderWidget expander) { 169 if (mContentWidget.getParentWidget() != null) { 170 removeChild(mContentWidget); 171 getScene().revalidate(); 172 } 173 } 174 175 public void collapseWidget() { 176 expander.setExpanded(false); 177 } 178 179 private Widget createActionsWidget() { 180 Widget actionsHolderWidget = new Widget(getScene()); 181 actionsHolderWidget.setLayout(LayoutFactory.createHorizontalLayout(SerialAlignment.JUSTIFY, 8)); 182 192 193 expander = new ExpanderWidget(getScene(), this, 194 ExpanderWidget.isExpanded(this, EXPANDED_DEFAULT)); 195 actionsHolderWidget.addChild(expander); 196 197 return actionsHolderWidget; 198 } 199 200 201 @Override 202 protected void notifyStateChanged(ObjectState previousState, ObjectState state) { 203 super.notifyStateChanged(previousState, state); 204 205 if (state.isSelected()) { 206 CollaborationsWidget collaborationsWidget = getCollaborationWidget(); 207 if (collaborationsWidget != null) { 208 collaborationsWidget.childPartnerLinkTypeSelected(this); 209 } 210 } else { 211 CollaborationsWidget collaborationsWidget = getCollaborationWidget(); 212 if (collaborationsWidget != null) { 213 collaborationsWidget.childPartnerLinkTypeUnSelected(this); 214 } 215 } 216 } 217 218 private CollaborationsWidget getCollaborationWidget() { 219 for (Widget w = this; w != null; w = w.getParentWidget()) { 220 if (w instanceof CollaborationsWidget) return (CollaborationsWidget) w; 221 } 222 return null; 223 } 224 225 public void dragExit() { 226 227 } 228 229 public boolean dragOver(Point scenePoint, WidgetDropTargetDragEvent event) { 230 return false; 231 } 232 233 public boolean drop(Point scenePoint, WidgetDropTargetDropEvent event) { 234 return false; 235 } 236 237 public void expandForDragAndDrop() { 238 expander.setExpanded(true); 239 } 240 241 public boolean isCollapsed() { 242 return mContentWidget.getParentWidget() == null; 243 } 244 245 public Object hashKey() { 246 PartnerLinkType comp = getWSDLComponent(); 247 return comp != null ? comp.getName() : this; 248 } 249 250 @Override 251 protected void updateActions(List <Action > actions) { 252 super.updateActions(actions); 253 ListIterator <Action > liter = actions.listIterator(); 254 while (liter.hasNext()) { 255 Action action = liter.next(); 256 if (action instanceof NewAction) { 257 liter.remove(); 258 } 259 } 260 } 261 } 262 | Popular Tags |