source: ComponentRegistry/trunk/ComponentBrowserGui/src/main/flex/clarin/cmdi/componentregistry/editor/ComponentEdit.as @ 2535

Last change on this file since 2535 was 2535, checked in by olhsha, 11 years ago

refactoring by composition: replacing duplicated peieces of code (functions) in Component.as andCMDComponentXMLEditor.as with a commonly used methods of the new class ComponentEditorBasic?.as

File size: 11.0 KB
Line 
1package clarin.cmdi.componentregistry.editor {
2        import clarin.cmdi.componentregistry.common.ItemDescription;
3        import clarin.cmdi.componentregistry.common.LabelConstants;
4        import clarin.cmdi.componentregistry.common.StyleConstants;
5        import clarin.cmdi.componentregistry.common.components.AddComponentLabelButton;
6        import clarin.cmdi.componentregistry.common.components.AddElementLabelButton;
7        import clarin.cmdi.componentregistry.common.components.DownIconButton;
8        import clarin.cmdi.componentregistry.common.components.ExpandingComponentLabel;
9        import clarin.cmdi.componentregistry.common.components.RemoveLabelButton;
10        import clarin.cmdi.componentregistry.common.components.UpIconButton;
11        import clarin.cmdi.componentregistry.editor.model.CMDComponent;
12        import clarin.cmdi.componentregistry.editor.model.CMDComponentElement;
13       
14        import flash.display.DisplayObject;
15        import flash.events.Event;
16        import flash.events.MouseEvent;
17       
18        import mx.collections.ArrayCollection;
19        import mx.containers.Form;
20        import mx.containers.FormItem;
21        import mx.containers.HBox;
22        import mx.controls.Button;
23        import mx.controls.HRule;
24        import mx.controls.Label;
25        import mx.core.Container;
26        import mx.core.UIComponent;
27        import mx.events.DragEvent;
28        import mx.managers.DragManager;
29       
30        [Event(name="removeComponent", type="flash.events.Event")]
31        public class ComponentEdit extends ItemEdit {
32                //public static const REMOVE_COMPONENT_EVENT:String = "removeComponent";
33                //private static const DRAG_ITEMS:String = "items";
34               
35                private var _parent:UIComponent;
36                private var _component:CMDComponent;
37                private var _parentComponent:CMDComponent;
38               
39                /*[Bindable]
40                private var addComponentLabel:Label;*/
41               
42                /*private var addElementLabel:Label;*/
43               
44                private var _editComponentBasics:ComponentEditorBasic;
45               
46                public function ComponentEdit(component:CMDComponent, parent:UIComponent, parentComponent:CMDComponent) {
47                        super();
48                        _component = component;
49                        _editComponentBasics  = new ComponentEditorBasic(this, _component);
50                        _parentComponent = parentComponent;
51                        _parent = parent;
52                        styleName = StyleConstants.XMLBROWSER;
53                        if (!component.componentId) { // new empty component, otherwise it would be an already existed component which cannot be edited.
54                                _editComponentBasics.addDragEventListenersAndProcessors();
55                                /* addEventListener(DragEvent.DRAG_ENTER, dragEnterHandler);
56                                addEventListener(DragEvent.DRAG_OVER, dragOverHandler);
57                                addEventListener(DragEvent.DRAG_DROP, dragDropHandler);*/
58                        }
59                }
60               
61                public function get component():CMDComponent {
62                        return _component;
63                }
64               
65                public function get parentComponent():CMDComponent {
66                        return _parentComponent;
67                }
68               
69                /* private function dragEnterHandler(event:DragEvent):void {
70               
71                DragManager.acceptDragDrop(event.currentTarget as UIComponent);
72                        UIComponent(event.currentTarget).drawFocus(true);
73                }*/
74               
75               
76                /*private function dragOverHandler(event:DragEvent):void {
77                        if (event.dragSource.hasFormat(DRAG_ITEMS)) {
78                                DragManager.showFeedback(DragManager.COPY);
79                        } else {
80                                DragManager.showFeedback(DragManager.NONE);
81                        }
82                }*/
83               
84                /*private function dragDropHandler(event:DragEvent):void {
85                        if (event.dragSource.hasFormat(DRAG_ITEMS)) {
86                                var items:Array = event.dragSource.dataForFormat(DRAG_ITEMS) as Array;
87                                for each (var item:ItemDescription in items) {
88                                        var comp:CMDComponent = new CMDComponent();
89                                        comp.componentId = item.id;
90                                        _component.cmdComponents.addItem(comp);
91                                        addComponent(comp);
92                                }
93                        }
94                }*/
95               
96                private function fireRemoveComponent(mouseEvent:MouseEvent):void {
97                        drawFocus(false);
98                        var event:Event = new Event(ComponentEditorBasic.REMOVE_COMPONENT_EVENT);
99                        dispatchEvent(event);
100                }
101               
102                protected override function createChildren():void {
103                        super.createChildren();
104                        addRuler();
105                        createComponentEditBar();
106                       
107                        addChild(getHideableForm());                   
108                       
109                        var summary:ComponentSummary = new ComponentSummary();
110                        summary.component = _component;
111                        summary.visible = false;
112                       
113                        setSummaryContainer(summary);           
114                        addChild(summary);
115                       
116                        var componentLink:FormItem = createComponentLink(_component);
117                        if (componentLink != null) {
118                                addCardinalityInput();
119                                addToHideableForm(componentLink);
120                        } else {
121                                addNameInput();
122                                addConceptLink();
123                                addCardinalityInput();
124                                handleCMDAttributeList();
125                                _editComponentBasics.handleElements(_component.cmdElements);
126                                _editComponentBasics.addElementAddButton();
127                                _editComponentBasics.handleComponents(_component.cmdComponents); //recursion
128                                _editComponentBasics.addComponentAddButton();
129                        }
130                }
131               
132                /*private function addComponentAddButton():void {
133                        addComponentLabel = new AddComponentLabelButton();
134                        addComponentLabel.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {
135                                var comp:CMDComponent = CMDComponent.createEmptyComponent();
136                                _component.cmdComponents.addItem(comp);
137                                _editComponentBasics.addComponent(comp);
138                        });
139                        addComponentLabel.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent):void {
140                                drawFocus(true);
141                        });
142                        addComponentLabel.addEventListener(MouseEvent.MOUSE_OUT, function(event:MouseEvent):void {
143                                drawFocus(false);
144                        });
145                        addChild(addComponentLabel);
146                }*/
147               
148                /*private function addElementAddButton():void {
149                        addElementLabel = new AddElementLabelButton();
150                        addElementLabel.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {
151                                var element:CMDComponentElement = CMDComponentElement.createEmptyElement();
152                                _component.cmdElements.addItem(element);
153                                addElement(element);
154                               
155                        });
156                        addElementLabel.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent):void {
157                                drawFocus(true);
158                        });
159                        addElementLabel.addEventListener(MouseEvent.MOUSE_OUT, function(event:MouseEvent):void {
160                                drawFocus(false);
161                        });
162                        addChild(addElementLabel);
163                }*/
164               
165                private function addConceptLink():void {
166                        addToHideableForm(new ConceptLinkInput(LabelConstants.CONCEPTLINK, _component.conceptLink, function(val:String):void {
167                                _component.conceptLink = val;
168                        }));
169                }
170               
171                private function addRuler():void {
172                        var ruler:HRule = new HRule();
173                        ruler.percentWidth = 80;
174                        addChild(ruler);
175                }
176               
177                private function addNameInput():void {
178                        var nameInput:FormItemInputLine = new NameInputLine(_component.name, function(val:String):void {
179                                _component.name = val; 
180                        }, new ChildNameValidator(_parentComponent, component));
181                        addToHideableForm(nameInput);
182                }
183               
184                private function addCardinalityInput():void {
185                        addToHideableForm(new CardinalityInput(LabelConstants.CARDINALITY_MIN, _component.cardinalityMin, CardinalityInput.BOUNDED, function(val:String):void {
186                                _component.cardinalityMin = val;
187                        }));
188                        addToHideableForm(new CardinalityInput(LabelConstants.CARDINALITY_MAX, _component.cardinalityMax, CardinalityInput.UNBOUNDED,function(val:String):void {
189                                _component.cardinalityMax = val;
190                        }));
191                }
192               
193                private function createHidableForm():Form {
194                        var form:Form = new Form();
195                        form.styleName = StyleConstants.XMLBROWSER;
196                        form.setStyle("paddingTop","0");
197                        form.setStyle("paddingBottom","0");
198                        form.verticalScrollPolicy = "off";
199                        form.horizontalScrollPolicy = "off";
200                        return form;
201                }
202               
203                private function createComponentEditBar():void {
204                        var editBar:HBox = new HBox();
205                       
206                        editBar.addChild(getShowToggleBox());
207                       
208                        editBar.addChild(createHeading());
209                        var removeButton:Label = new RemoveLabelButton();
210                        addFocusListeners(removeButton).addEventListener(MouseEvent.CLICK, fireRemoveComponent);
211                        editBar.addChild(removeButton);
212                       
213                        var downButton:Button = new DownIconButton();
214                        addFocusListeners(downButton).addEventListener(MouseEvent.CLICK, moveDownComponent);
215                        editBar.addChild(downButton);
216                       
217                        var upButton:Button = new UpIconButton();
218                        addFocusListeners(upButton).addEventListener(MouseEvent.CLICK, moveUpComponent);
219                        editBar.addChild(upButton);
220                        addChild(editBar);
221                }
222               
223                private function moveDownComponent(event:Event):void {
224                        var comp:CMDComponent = component;
225                        if (parentComponent.moveDownComponent(comp)) {
226                                var index:int = _parent.getChildIndex(this);
227                                if (index != _parent.numChildren - 1) {
228                                        _parent.removeChild(this);
229                                        _parent.addChildAt(this, index + 1);
230                                }
231                        }
232                }
233               
234                private function moveUpComponent(event:Event):void {
235                        var comp:CMDComponent = component;
236                        if (parentComponent.moveUpComponent(comp)) {
237                                var index:int = _parent.getChildIndex(this);
238                                if (index != 0) {
239                                        _parent.removeChild(this);
240                                        _parent.addChildAt(this, index - 1);
241                                }
242                        }
243                }
244               
245                private function addFocusListeners(comp:UIComponent):UIComponent {
246                        comp.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent):void {
247                                drawFocus(true);
248                        });
249                        comp.addEventListener(MouseEvent.MOUSE_OUT, function(event:MouseEvent):void {
250                                drawFocus(false);
251                        });
252                        return comp;
253                }
254               
255                private function createComponentLink(component:CMDComponent):FormItem {
256                        if (component.componentId != "" && component.componentId != null) {
257                                var result:FormItem = new FormItem();
258                                result.styleName = StyleConstants.XMLBROWSER_FIELD;
259                                result.label = LabelConstants.COMPONENT_ID;
260                                result.addChild(new ExpandingComponentLabel(component.componentId, false));
261                                return result;
262                        }
263                        return null;
264                }
265               
266                private function handleCMDAttributeList():void {
267                        addToHideableForm(new AttributeListEdit(_component, this));
268                }
269               
270                /*private function handleComponents(components:ArrayCollection):void {
271                        for each (var component:CMDComponent in components) {
272                                _editComponentBasics.addComponent(component);
273                        }
274                }*/
275               
276                /*public function addComponent(component:CMDComponent):void {
277                        var comp:Container = new ComponentEdit(component, this, _component);
278                        comp.addEventListener(ComponentEdit.REMOVE_COMPONENT_EVENT, removeComponent);
279                        comp.setStyle("paddingLeft", "50");
280                        if (!addComponentLabel) {
281                                addChild(comp);
282                        } else {
283                                addChildAt(comp, getChildIndex(addComponentLabel));
284                        }
285                }*/
286               
287                /*private function removeComponent(event:Event):void {
288                        var comp:CMDComponent = ComponentEdit(event.currentTarget).component;
289                        _component.removeComponent(comp);
290                        removeChild(event.currentTarget as DisplayObject);
291                }*/
292               
293                /*private function handleElements(elements:ArrayCollection):void {
294                        for each (var element:CMDComponentElement in elements) {
295                                addElement(element);
296                        }
297                }
298               
299                public function addElement(element:CMDComponentElement):void {
300                        trace("ComponentEdit's addElement is called");
301                        var elem:Container = new ElementEdit(element, this, _component);
302                        elem.setStyle("paddingLeft", "50");
303                        elem.addEventListener(ElementEdit.REMOVE_ELEMENT_EVENT, removeElement);
304                        if (!addElementLabel) {
305                                addChild(elem);
306                        } else {
307                                addChildAt(elem, getChildIndex(addElementLabel));
308                        }
309                }
310               
311                private function removeElement(event:Event):void {
312                        var elem:CMDComponentElement = ElementEdit(event.currentTarget).element;
313                        _component.removeElement(elem);
314                        removeChild(event.currentTarget as DisplayObject);
315                }
316                */
317               
318                private function createHeading():FormItem {
319                        var heading:FormItem = new FormItem();
320                        heading.label = LabelConstants.COMPONENT;
321                        heading.styleName = StyleConstants.XMLBROWSER_HEADER;
322                        return heading;
323                }
324        }
325}
Note: See TracBrowser for help on using the repository browser.