KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > schema > abe > CompositorPanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 /*
21  * CompositorPanel.java
22  *
23  * Created on June 6, 2006, 4:06 PM
24  *
25  * To change this template, choose Tools | Template Manager
26  * and open the template in the editor.
27  */

28
29 package org.netbeans.modules.xml.schema.abe;
30
31 import java.awt.BorderLayout JavaDoc;
32 import java.awt.Color JavaDoc;
33 import java.awt.Component JavaDoc;
34 import java.awt.Font JavaDoc;
35 import java.awt.Graphics JavaDoc;
36 import java.awt.Graphics2D JavaDoc;
37 import java.awt.Point JavaDoc;
38 import java.awt.Rectangle JavaDoc;
39 import java.awt.event.ActionEvent JavaDoc;
40 import java.awt.event.ActionListener JavaDoc;
41 import java.awt.event.KeyEvent JavaDoc;
42 import java.awt.event.KeyListener JavaDoc;
43 import java.awt.event.MouseAdapter JavaDoc;
44 import java.awt.event.MouseEvent JavaDoc;
45 import java.beans.PropertyChangeEvent JavaDoc;
46 import java.beans.PropertyChangeListener JavaDoc;
47 import java.util.List JavaDoc;
48 import javax.swing.Box JavaDoc;
49 import javax.swing.JComboBox JavaDoc;
50 import javax.swing.JLabel JavaDoc;
51 import javax.swing.JPanel JavaDoc;
52 import javax.swing.SpringLayout JavaDoc;
53 import javax.swing.SwingUtilities JavaDoc;
54 import javax.swing.border.EmptyBorder JavaDoc;
55 import javax.swing.border.LineBorder JavaDoc;
56 import org.netbeans.modules.xml.axi.AXIComponent;
57 import org.netbeans.modules.xml.axi.AXIModel;
58 import org.netbeans.modules.xml.axi.Compositor;
59 import org.netbeans.modules.xml.axi.Compositor.CompositorType;
60 import org.netbeans.modules.xml.axi.ContentModel;
61 import org.netbeans.modules.xml.axi.Element;
62 import org.netbeans.modules.xml.schema.abe.nodes.ABEAbstractNode;
63 import org.netbeans.modules.xml.schema.abe.nodes.CompositorNode;
64 import org.netbeans.modules.xml.schema.abe.palette.DnDHelper;
65 import org.openide.nodes.Node;
66 import org.openide.util.NbBundle;
67
68 /**
69  *
70  * @author girix
71  */

72 public class CompositorPanel extends ElementsContainerPanel{
73     private static final long serialVersionUID = 7526472295622776147L;
74     
75     CompositorType compositorType;
76     ExpandCollapseButton expandButton;
77     
78     InplaceEditableLabel compositorTypeLabel;
79     JPanel JavaDoc compositorTypePanel;
80     JLabel JavaDoc contentModelInfoLabel;
81     private ABEAbstractNode compositorNode;
82     
83     private JLabel JavaDoc itemCountLabel;
84     private static final int BORDER_THICKNESS = 2;
85     private static final EmptyBorder JavaDoc emptyBorder = new EmptyBorder JavaDoc(BORDER_THICKNESS, BORDER_THICKNESS,
86             BORDER_THICKNESS, BORDER_THICKNESS);
87     
88     public CompositorPanel(InstanceUIContext context, Compositor compositor,
89             Component JavaDoc parentPanel) {
90         super(context, compositor, parentPanel, true);
91         setBorder(emptyBorder);
92         //draw annotation
93
setDrawAnnotation(false);
94         initMouseListener();
95         initKeyListener();
96         makeNBNode();
97         addSelectionListener();
98         
99         compositor.addPropertyChangeListener(new PropertyChangeListener JavaDoc() {
100             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
101                 SwingUtilities.invokeLater(new Runnable JavaDoc() {
102                     public void run() {
103                         verifyChildrenWithModel();
104                     }
105                 });
106             }
107         });
108     }
109     
110     
111     protected void initMouseListener(){
112         addMouseListener(new MouseAdapter JavaDoc() {
113             public void mouseReleased(MouseEvent JavaDoc e) {
114                 mouseClickedActionHandler(e, true);
115             }
116             public void mouseClicked(MouseEvent JavaDoc e){
117                 mouseClickedActionHandler(e, false);
118             }
119             
120             public void mousePressed(MouseEvent JavaDoc e) {
121                 mouseClickedActionHandler(e, true);
122             }
123         });
124     }
125     
126     
127     protected void mouseClickedActionHandler(MouseEvent JavaDoc e, boolean handelPopupOnly){
128         if(e.getClickCount() == 1){
129             if(e.isPopupTrigger()){
130                 context.getMultiComponentActionManager().showPopupMenu(e, this);
131                 return;
132             }
133             if(handelPopupOnly)
134                 return;
135             //the tag is selected
136
if(e.isControlDown())
137                 context.getComponentSelectionManager().addToSelectedComponents(this);
138             else
139                 context.getComponentSelectionManager().setSelectedComponent(this);
140         }
141     }
142     
143     protected void initKeyListener(){
144         addKeyListener(new KeyListener JavaDoc() {
145             public void keyPressed(KeyEvent JavaDoc e) {
146                 if( e.getKeyCode() == e.VK_F2 ){
147                     compositorTypeLabel.showEditor();
148                 }
149                 if(context.getFocusTraversalManager().isFocusChangeEvent(e))
150                     context.getFocusTraversalManager().handleEvent(e, CompositorPanel.this);
151             }
152             public void keyReleased(KeyEvent JavaDoc e) {
153             }
154             public void keyTyped(KeyEvent JavaDoc e) {
155                 if(e.getKeyChar() == e.VK_SPACE){
156                     compositorTypeLabel.showEditor();
157                     
158                 }
159             }
160         });
161     }
162     
163     
164     SpringLayout JavaDoc compositorTypePanelLayout;
165     public void addHeaderPanel(){
166         AutoSizingPanel rbp = new AutoSizingPanel(context);
167         rbp.setHorizontalScaling(true);
168         rbp.setOpaque(false);
169         compositorTypePanel = rbp;
170         //compositorTypePanel.setOpaque(true);
171
compositorTypePanelLayout = new SpringLayout JavaDoc();
172         compositorTypePanel.setLayout(compositorTypePanelLayout);
173         compositorTypeLabel = new InplaceEditableLabel(getCompositorTypeString());
174         compositorTypeLabel.setForeground(InstanceDesignConstants.COMPOSITOR_TYPE_LABEL_COLOR);
175         
176         if(getAXIParent().isReadOnly()){
177             //compositorTypeLabel.setIcon(UIUtilities.getImageIcon("import-include-redefine.png"));
178
compositorTypeLabel.setToolTipText(NbBundle.getMessage(CompositorPanel.class,
179                     "TTP_COMPOSITOR_READONLY", getCompositorType().getName()));
180         }
181         
182         //add indentation
183
if( !(parentPanel instanceof ElementPanel)) {
184             //if the parent panel is a compositor then dont indent
185
setPanelIndendation(0);
186         }
187         
188         Component JavaDoc hgap = Box.createHorizontalStrut(getPanelIndendation());
189         compositorTypePanel.add(hgap);
190         compositorTypePanelLayout.putConstraint(SpringLayout.WEST, hgap, 0,
191                 SpringLayout.WEST, compositorTypePanel);
192         compositorTypePanelLayout.putConstraint(SpringLayout.NORTH, hgap, 0,
193                 SpringLayout.NORTH, compositorTypePanel);
194         
195         compositorTypePanel.add(compositorTypeLabel);
196         compositorTypePanelLayout.putConstraint(SpringLayout.WEST, compositorTypeLabel, 0,
197                 SpringLayout.EAST, hgap);
198         compositorTypePanelLayout.putConstraint(SpringLayout.NORTH, compositorTypeLabel, 0,
199                 SpringLayout.NORTH, compositorTypePanel);
200         
201         
202         
203         hgap = Box.createHorizontalStrut(10);
204         compositorTypePanel.add(hgap);
205         compositorTypePanelLayout.putConstraint(SpringLayout.WEST, hgap, 0,
206                 SpringLayout.EAST, compositorTypeLabel);
207         compositorTypePanelLayout.putConstraint(SpringLayout.NORTH, hgap, 0,
208                 SpringLayout.NORTH, compositorTypePanel);
209         
210         CompositorPropertiesPanel cpp = new CompositorPropertiesPanel(getCompositor(), context);
211         compositorTypePanel.add(cpp);
212         compositorTypePanelLayout.putConstraint(SpringLayout.WEST, cpp, 0,
213                 SpringLayout.EAST, hgap);
214         compositorTypePanelLayout.putConstraint(SpringLayout.NORTH, cpp, 0,
215                 SpringLayout.NORTH, compositorTypePanel);
216         
217         //add an artificial mouse listener for transmiting the mouse events to the parent
218
cpp.addMouseListener(new MouseAdapter JavaDoc(){
219             public void mouseClicked(MouseEvent JavaDoc e) {
220                 CompositorPanel.this.dispatchEvent(e);
221             }
222             
223             public void mouseReleased(MouseEvent JavaDoc e) {
224                 CompositorPanel.this.dispatchEvent(e);
225             }
226             
227             public void mousePressed(MouseEvent JavaDoc e) {
228                 CompositorPanel.this.dispatchEvent(e);
229             }
230             
231         });
232         
233         compositorTypePanel.addMouseListener(new MouseAdapter JavaDoc(){
234             public void mouseClicked(MouseEvent JavaDoc e) {
235                 CompositorPanel.this.dispatchEvent(e);
236             }
237             
238             public void mouseReleased(MouseEvent JavaDoc e) {
239                 CompositorPanel.this.dispatchEvent(e);
240             }
241             
242             public void mousePressed(MouseEvent JavaDoc e) {
243                 CompositorPanel.this.dispatchEvent(e);
244             }
245             
246         });
247         
248         
249         hgap = Box.createHorizontalStrut(10);
250         compositorTypePanel.add(hgap);
251         compositorTypePanelLayout.putConstraint(SpringLayout.WEST, hgap, 0,
252                 SpringLayout.EAST, cpp);
253         compositorTypePanelLayout.putConstraint(SpringLayout.NORTH, hgap, 0,
254                 SpringLayout.NORTH, compositorTypePanel);
255         
256         //init item count label
257
itemCountLabel = new JLabel JavaDoc();
258         itemCountLabel.setForeground(Color.GRAY.brighter());
259         refreshItemCount();
260         compositorTypePanel.add(itemCountLabel);
261         compositorTypePanelLayout.putConstraint(SpringLayout.WEST, itemCountLabel, 0,
262                 SpringLayout.EAST, hgap);
263         compositorTypePanelLayout.putConstraint(SpringLayout.NORTH, itemCountLabel, 0,
264                 SpringLayout.NORTH, compositorTypePanel);
265         
266         
267         
268         add(compositorTypePanel, BorderLayout.NORTH);
269         
270         //add an artificial mouse listener for transmiting the mouse events to the parent
271
compositorTypeLabel.addMouseListener(new MouseAdapter JavaDoc(){
272             public void mouseClicked(MouseEvent JavaDoc e) {
273                 CompositorPanel.this.dispatchEvent(e);
274             }
275             
276             public void mouseReleased(MouseEvent JavaDoc e) {
277                 CompositorPanel.this.dispatchEvent(e);
278             }
279             
280             public void mousePressed(MouseEvent JavaDoc e) {
281                 CompositorPanel.this.dispatchEvent(e);
282             }
283             
284         });
285         
286         initCompositorTypeEditListener();
287     }
288     
289     
290     protected void initCompositorTypeEditListener(){
291         compositorTypeLabel.addPropertyChangeListener(new PropertyChangeListener JavaDoc() {
292             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
293                 if(evt.getPropertyName().equals(InplaceEditableLabel.PROPERTY_MODE_CHANGE)){
294                     if(evt.getNewValue() == InplaceEditableLabel.Mode.EDIT){
295                         //user selected edit give the editor JComponent
296
//show a combo box field
297
CompositorType options[] = filterAllIfNeeded(getCompositor());
298                         final JComboBox JavaDoc field = new JComboBox JavaDoc(options);
299                         field.setSelectedItem(getCompositorType());
300                         field.addActionListener(new ActionListener JavaDoc(){
301                             public void actionPerformed(ActionEvent JavaDoc e) {
302                                 CompositorType newType = (CompositorType) field.getSelectedItem();
303                                 //do validation
304
compositorTypeLabel.hideEditor();
305                                 setCompositorTypeInModel(newType);
306                                 
307                                 if(getParentContainerPanel() instanceof ElementPanel){
308                                     //since model removes and adds all the element and compositors, open the element by default
309
((ElementPanel)getParentContainerPanel()).expandChild();
310                                 }
311                             }
312                         });
313                         if(getAXIParent().isReadOnly()){
314                             String JavaDoc str = NbBundle.getMessage(CompositorPanel.class,
315                                     "MSG_READONLY_COMPOSITORTYPE_EDIT", getCompositorType().getName());
316                             compositorTypeLabel.setEditInfoText(str, context);
317                         }else{
318                             compositorTypeLabel.setInlineEditorComponent(field);
319                         }
320                     }
321                 }
322             }
323         });
324     }
325     
326     
327     void initButton(){
328         expandButton.addActionListener(new ActionListener JavaDoc() {
329             public void actionPerformed(ActionEvent JavaDoc e) {
330                 handleExpandOrCollapse();
331             }
332         });
333     }
334     
335     void handleExpandOrCollapse(){
336         if(!expandButton.isExpanded()){
337             //expand
338
expandChild();
339         }else{
340             //collapse
341
collapseChild();
342         }
343     }
344     
345     void expandChild(){
346         if(childrenPanel != null){
347             //children already added just show
348
childrenPanel.setVisible(true);
349             revalidate();
350             repaint();
351         }else{
352             //children, if present, are expanded and added by default.
353
}
354     }
355     
356     void collapseChild(){
357         if(childrenPanel != null){
358             //children already added just hide
359
childrenPanel.setVisible(false);
360             revalidate();
361             repaint();
362         }
363     }
364     
365     void refreshItemCount(){
366         //add some space in the end to keep the label away from the border paint area.
367
int size = getAXIChildren().size();
368         String JavaDoc item = NbBundle.getMessage(ContainerPanel.class, "LBL_ITEM_STRING");
369         String JavaDoc items = NbBundle.getMessage(ContainerPanel.class, "LBL_ITEMS_STRING");
370         String JavaDoc itemStr = size == 1 ? item : items;
371         itemCountLabel.setText("["+size+ " "+itemStr+"] ");
372     }
373     
374     public void _paintComponent(Graphics JavaDoc g){
375         Graphics2D JavaDoc g2d = (Graphics2D JavaDoc) g;
376         super.setAnnotationString(getCompositorType().toString());
377         Rectangle JavaDoc rect = this.getBounds();
378         int x = rect.x + this.getWidth() + 2;
379         int y = rect.y - 10;
380         Point JavaDoc pt = new Point JavaDoc(x, y);
381         super.setStartDrawPoint(pt);
382         super.paintComponent(g2d);
383     }
384     
385     
386     public CompositorType getCompositorType(){
387         AXIComponent parent = getAXIParent();
388         if( parent instanceof Compositor)
389             return ((Compositor)parent).getType();
390         
391         return null;
392     }
393     
394     public String JavaDoc getCompositorTypeString(){
395         StringBuffer JavaDoc str = new StringBuffer JavaDoc(getCompositorType().getName());
396         while(str.length() < 8)
397             str.append(" ");
398         return str.toString();
399     }
400     
401     public void setCompositorTypeInModel(CompositorType ctype){
402         ((Compositor) getAXIParent()).setType(ctype);
403     }
404     
405     private Compositor getCompositor() {
406         return (Compositor) getAXIParent();
407     }
408     
409     public List JavaDoc<? extends AXIComponent> getAXIChildren() {
410         return getAXIParent().getChildren();
411     }
412     
413     
414     public void removeElement(Element element) {
415         super.removeElement(element);
416         refreshItemCount();
417     }
418     
419     public void addElement(Element element) {
420         super.addElement(element);
421         refreshItemCount();
422     }
423     
424     
425     public void addCompositor(Compositor newCompositor){
426         //look in to the children list find out where the child was added
427
//create a new CompositorPanel and add @ that index. Adjust the layout accordingly
428
int index = getAXIChildren().indexOf(newCompositor);
429         
430         if(isAlreadyAdded(newCompositor) != null)
431             return;
432         
433         CompositorPanel cp = new CompositorPanel(context, newCompositor, this);
434         addChildAt(cp, index);
435         refreshItemCount();
436     }
437     
438     public void removeChildCompositor(Compositor compositor){
439         //look in to the children list find out where the child was present
440
//remove the CompositorPanel @ that index. Adjust the layout accordingly
441
Component JavaDoc rmComp = null;
442         for(Component JavaDoc component: getChildrenList()){
443             if(component instanceof CompositorPanel){
444                 if( ((CompositorPanel)component).getCompositor() == compositor){
445                     rmComp = component;
446                     break;
447                 }
448                 
449             }
450         }
451         if(rmComp != null){
452             removeComponent(rmComp);
453         }
454         refreshItemCount();
455     }
456     
457     
458     private void addNewCompositorAt(TweenerPanel tweener, DnDHelper.PaletteItem compType){
459         int index = getChildrenList().indexOf(tweener);
460         if(index == -1){
461             //must not happen
462
return;
463         }
464         index = index/2;
465         AXIModel model = getAXIParent().getModel();
466         
467         Compositor comp = null;
468         switch(compType){
469             case SEQUENCE:
470                 comp = model.getComponentFactory().createSequence();
471                 break;
472             case CHOICE:
473                 comp = model.getComponentFactory().createChoice();
474                 break;
475             case ALL:
476                 comp = model.getComponentFactory().createAll();
477                 break;
478         }
479         
480         if(comp == null)
481             return;
482         
483         model.startTransaction();
484         try{
485             getAXIParent().addChildAtIndex(comp, index);
486         }finally{
487             model.endTransaction();
488         }
489     }
490     
491     protected void setupAXIComponentListener(){
492         super.setupAXIComponentListener();
493         getAXIParent().addPropertyChangeListener(new ModelEventMediator(this, getAXIParent()) {
494             public void _propertyChange(PropertyChangeEvent JavaDoc evt) {
495                 if(evt.getPropertyName().equals(Compositor.PROP_COMPOSITOR)){
496                     //a compositor event
497
if((evt.getOldValue() == null) && (evt.getNewValue() != null)){
498                         //new element added
499
addCompositor((Compositor) evt.getNewValue());
500                     }else if((evt.getNewValue() == null) && (evt.getOldValue() != null)){
501                         //old element removed
502
removeChildCompositor((Compositor) evt.getOldValue());
503                     }
504                 }else if(evt.getPropertyName().equals(Compositor.PROP_TYPE)){
505                     //handle compositor change event
506
compositorTypeLabel.setText(getCompositorTypeString());
507                 }
508                 refreshItemCount();
509             }
510         });
511         
512     }
513     
514     
515     public void visit(Compositor compositor) {
516         super.visit(compositor);
517         visitorResult = null;
518         CompositorPanel compPanel = new CompositorPanel(context,
519                 compositor, CompositorPanel.this);
520         visitorResult = compPanel;
521     }
522     
523     
524     public void tweenerDrop(TweenerPanel tweener, DnDHelper.PaletteItem paletteItem) {
525         super.tweenerDrop(tweener, paletteItem);
526         if(DnDHelper.isCompositor(paletteItem) && (paletteItem != paletteItem.ALL) &&
527                 ((Compositor)getAXIComponent()).getType() != CompositorType.ALL ){
528             //add only seq/choice
529
addNewCompositorAt(tweener, paletteItem);
530         }
531     }
532     
533     public void tweenerDragEntered(TweenerPanel tweener, DnDHelper.PaletteItem paletteItem) {
534         super.tweenerDragEntered(tweener, paletteItem);
535         if(!tweenerDragAccept(tweener, paletteItem))
536             return;
537         //this.setDrawBorder(true);
538
LineBorder JavaDoc lineBorder = new LineBorder JavaDoc(InstanceDesignConstants.DARK_BLUE, BORDER_THICKNESS, true);
539         this.setBorder(lineBorder);
540         this.repaint();
541         
542         //set the info message for tweener panel to display
543

544         ContentModel cm = getCompositor().getContentModel();
545         if(cm != null){
546             String JavaDoc type = UIUtilities.getContentModelTypeString(cm.getType());
547             String JavaDoc locDrpStrType = NbBundle.getMessage(UIUtilities.class, "MSG_DROP_INFO_TYPE");
548             tweener.setDropInfoText(locDrpStrType+" "+type+" "+cm.getName());
549         }else{
550             String JavaDoc locDrpStrLocal = NbBundle.getMessage(UIUtilities.class, "MSG_DROP_INFO_LOCAL");
551             tweener.setDropInfoText(locDrpStrLocal+getCompositor().getType().getName());
552         }
553     }
554     
555     public boolean tweenerDragAccept(TweenerPanel tweener, DnDHelper.PaletteItem paletteItem) {
556         if(getAXIParent().isReadOnly()){
557             String JavaDoc str = NbBundle.getMessage(CompositorPanel.class,
558                     "MSG_READONLY_COMPOSITOR_DROP", getAXIParent().getContentModel().getName());
559             UIUtilities.showErrorMessageFor(str, context, tweener);
560             return false;
561         }
562         
563         if( (getCompositorType() == CompositorType.ALL) &&
564                 (paletteItem != DnDHelper.PaletteItem.ELEMENT)){
565             String JavaDoc str = NbBundle.getMessage(CompositorPanel.class,
566                     "MSG_ALL_COMPOSITOR_DROP_REJECT");
567             UIUtilities.showErrorMessageFor(str, context, tweener);
568             return false;
569         }
570         //accept only element and compositor
571
if( (paletteItem == DnDHelper.PaletteItem.ELEMENT) ||
572                 ( (DnDHelper.isCompositor(paletteItem)) && (paletteItem != paletteItem.ALL))){
573             return true;
574         }
575         String JavaDoc str = NbBundle.getMessage(CompositorPanel.class,
576                 "MSG_COMPOSITOR_DROP_REJECT");
577         UIUtilities.showErrorMessageFor(str, context, tweener);
578         return false;
579     }
580     
581     public void tweenerDragExited(TweenerPanel tweener) {
582         super.tweenerDragExited(tweener);
583         UIUtilities.hideGlassMessage();
584         this.setBorder(emptyBorder);
585         this.repaint();
586     }
587     
588     protected void makeNBNode() {
589         compositorNode = new CompositorNode((Compositor) getAXIParent(), context);
590         if(getAXIParent().isReadOnly())
591             ((ABEAbstractNode)compositorNode).setReadOnly(true);
592     }
593     
594     public ABEAbstractNode getNBNode() {
595         return compositorNode;
596     }
597     
598     public AXIComponent getAXIComponent() {
599         return getAXIParent();
600     }
601     
602     public void removeCompositor() {
603         if(getAXIComponent() instanceof Compositor){
604             AXIComponent axiComponent = getAXIComponent();
605             if(axiComponent.getModel() != null){
606                 context.getAXIModel().startTransaction();
607                 try{
608                     axiComponent.getParent().removeChild(getAXIComponent());
609                 }finally{
610                     context.getAXIModel().endTransaction();
611                 }
612             }
613         }
614     }
615     
616     private void addSelectionListener() {
617         addPropertyChangeListener(new PropertyChangeListener JavaDoc(){
618             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
619                 if(evt.getPropertyName().equals(PROP_SELECTED)){
620                     if(((Boolean JavaDoc)evt.getNewValue()).booleanValue()){
621                         //set the tag name color to orange
622
compositorTypeLabel.setForeground(
623                                 InstanceDesignConstants.COMPOSITOR_TYPE_LABEL_SELECTED_COLOR);
624                         Font JavaDoc font = compositorTypeLabel.getFont();
625                         font = new Font JavaDoc(font.getName(), Font.BOLD, font.getSize());
626                         compositorTypeLabel.setFont(font);
627                         drawBoldString(true);
628                         setBorder(new LineBorder JavaDoc(InstanceDesignConstants.XP_ORANGE, BORDER_THICKNESS, true));
629                     }else{
630                         //set the tage name color to normal color
631
compositorTypeLabel.setForeground(
632                                 InstanceDesignConstants.COMPOSITOR_TYPE_LABEL_COLOR);
633                         Font JavaDoc font = compositorTypeLabel.getFont();
634                         font = new Font JavaDoc(font.getName(), Font.PLAIN, font.getSize());
635                         compositorTypeLabel.setFont(font);
636                         drawBoldString(false);
637                         setBorder(emptyBorder);
638                     }
639                     
640                 }
641             }
642         });
643     }
644     
645     public void showExpandButton(boolean show){
646         expandButton.setVisible(show);
647     }
648     
649     public void accept(UIVisitor visitor) {
650         visitor.visit(this);
651     }
652     
653     
654     public static CompositorType[] filterAllIfNeeded(Compositor compositor){
655         if(compositor.getParent() instanceof Compositor){
656             //parent is also a compositor. This cant be all
657
return new CompositorType[] {CompositorType.SEQUENCE, CompositorType.CHOICE};
658         }
659         for(AXIComponent child: compositor.getChildren()){
660             if(child instanceof Compositor){
661                 //children contains a compositor so this cant be all
662
return new CompositorType[] {CompositorType.SEQUENCE, CompositorType.CHOICE};
663             }
664         }
665         return CompositorType.values();
666         
667     }
668 }
669
Popular Tags