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

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

rolling back to the non-refactored version of the ComponentEdit?.as and CMDComponentXMLEditor.as. They do not hav that nill -pointer exception bug 278. Tomorrow accurate step-for step refactoring.

File size: 11.2 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                                handleElements(_component.cmdElements);
132                                addElementAddButton();
133                                handleComponents(_component.cmdComponents); //recursion
134                                addComponentAddButton();
135                        }
136                }
137               
138                private function addComponentAddButton():void {
139                        addComponentLabel = new AddComponentLabelButton();
140                        addComponentLabel.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {
141                                var comp:CMDComponent = CMDComponent.createEmptyComponent();
142                                _component.cmdComponents.addItem(comp);
143                                //_editComponentBasics.addComponent(comp);
144                                addComponent(comp);
145                        });
146                        addComponentLabel.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent):void {
147                                drawFocus(true);
148                        });
149                        addComponentLabel.addEventListener(MouseEvent.MOUSE_OUT, function(event:MouseEvent):void {
150                                drawFocus(false);
151                        });
152                        addChild(addComponentLabel);
153                }
154               
155                private function addElementAddButton():void {
156                        addElementLabel = new AddElementLabelButton();
157                        addElementLabel.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {
158                                var element:CMDComponentElement = CMDComponentElement.createEmptyElement();
159                                _component.cmdElements.addItem(element);
160                                addElement(element);
161                               
162                        });
163                        addElementLabel.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent):void {
164                                drawFocus(true);
165                        });
166                        addElementLabel.addEventListener(MouseEvent.MOUSE_OUT, function(event:MouseEvent):void {
167                                drawFocus(false);
168                        });
169                        addChild(addElementLabel);
170                }
171               
172                private function addConceptLink():void {
173                        addToHideableForm(new ConceptLinkInput(LabelConstants.CONCEPTLINK, _component.conceptLink, function(val:String):void {
174                                _component.conceptLink = val;
175                        }));
176                }
177               
178                private function addRuler():void {
179                        var ruler:HRule = new HRule();
180                        ruler.percentWidth = 80;
181                        addChild(ruler);
182                }
183               
184                private function addNameInput():void {
185                        var nameInput:FormItemInputLine = new NameInputLine(_component.name, function(val:String):void {
186                                _component.name = val; 
187                        }, new ChildNameValidator(_parentComponent, component));
188                        addToHideableForm(nameInput);
189                }
190               
191                private function addCardinalityInput():void {
192                        addToHideableForm(new CardinalityInput(LabelConstants.CARDINALITY_MIN, _component.cardinalityMin, CardinalityInput.BOUNDED, function(val:String):void {
193                                _component.cardinalityMin = val;
194                        }));
195                        addToHideableForm(new CardinalityInput(LabelConstants.CARDINALITY_MAX, _component.cardinalityMax, CardinalityInput.UNBOUNDED,function(val:String):void {
196                                _component.cardinalityMax = val;
197                        }));
198                }
199               
200                private function createHidableForm():Form {
201                        var form:Form = new Form();
202                        form.styleName = StyleConstants.XMLBROWSER;
203                        form.setStyle("paddingTop","0");
204                        form.setStyle("paddingBottom","0");
205                        form.verticalScrollPolicy = "off";
206                        form.horizontalScrollPolicy = "off";
207                        return form;
208                }
209               
210                private function createComponentEditBar():void {
211                        var editBar:HBox = new HBox();
212                       
213                        editBar.addChild(getShowToggleBox());
214                       
215                        editBar.addChild(createHeading());
216                        var removeButton:Label = new RemoveLabelButton();
217                        addFocusListeners(removeButton).addEventListener(MouseEvent.CLICK, fireRemoveComponent);
218                        editBar.addChild(removeButton);
219                       
220                        var downButton:Button = new DownIconButton();
221                        addFocusListeners(downButton).addEventListener(MouseEvent.CLICK, moveDownComponent);
222                        editBar.addChild(downButton);
223                       
224                        var upButton:Button = new UpIconButton();
225                        addFocusListeners(upButton).addEventListener(MouseEvent.CLICK, moveUpComponent);
226                        editBar.addChild(upButton);
227                        addChild(editBar);
228                }
229               
230                private function moveDownComponent(event:Event):void {
231                        var comp:CMDComponent = component;
232                        if (parentComponent.moveDownComponent(comp)) {
233                                var index:int = _parent.getChildIndex(this);
234                                if (index != _parent.numChildren - 1) {
235                                        _parent.removeChild(this);
236                                        _parent.addChildAt(this, index + 1);
237                                }
238                        }
239                }
240               
241                private function moveUpComponent(event:Event):void {
242                        var comp:CMDComponent = component;
243                        if (parentComponent.moveUpComponent(comp)) {
244                                var index:int = _parent.getChildIndex(this);
245                                if (index != 0) {
246                                        _parent.removeChild(this);
247                                        _parent.addChildAt(this, index - 1);
248                                }
249                        }
250                }
251               
252                private function addFocusListeners(comp:UIComponent):UIComponent {
253                        comp.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent):void {
254                                drawFocus(true);
255                        });
256                        comp.addEventListener(MouseEvent.MOUSE_OUT, function(event:MouseEvent):void {
257                                drawFocus(false);
258                        });
259                        return comp;
260                }
261               
262                private function createComponentLink(component:CMDComponent):FormItem {
263                        if (component.componentId != "" && component.componentId != null) {
264                                var result:FormItem = new FormItem();
265                                result.styleName = StyleConstants.XMLBROWSER_FIELD;
266                                result.label = LabelConstants.COMPONENT_ID;
267                                result.addChild(new ExpandingComponentLabel(component.componentId, false));
268                                return result;
269                        }
270                        return null;
271                }
272               
273                private function handleCMDAttributeList():void {
274                        addToHideableForm(new AttributeListEdit(_component, this));
275                }
276               
277                private function handleComponents(components:ArrayCollection):void {
278                        for each (var component:CMDComponent in components) {
279                                //_editComponentBasics.addComponent(component);
280                                addComponent(component);
281                        }
282                }
283               
284                public function addComponent(component:CMDComponent):void {
285                        var comp:Container = new ComponentEdit(component, this, _component);
286                        comp.addEventListener(ComponentEdit.REMOVE_COMPONENT_EVENT, removeComponent);
287                        comp.setStyle("paddingLeft", "50");
288                        if (!addComponentLabel) {
289                                addChild(comp);
290                        } else {
291                                addChildAt(comp, getChildIndex(addComponentLabel));
292                        }
293                }
294               
295                private function removeComponent(event:Event):void {
296                        var comp:CMDComponent = ComponentEdit(event.currentTarget).component;
297                        _component.removeComponent(comp);
298                        removeChild(event.currentTarget as DisplayObject);
299                }
300               
301                private function handleElements(elements:ArrayCollection):void {
302                        for each (var element:CMDComponentElement in elements) {
303                                addElement(element);
304                        }
305                }
306               
307                public function addElement(element:CMDComponentElement):void {
308                        trace("ComponentEdit's addElement is called");
309                        var elem:Container = new ElementEdit(element, this, _component);
310                        elem.setStyle("paddingLeft", "50");
311                        elem.addEventListener(ElementEdit.REMOVE_ELEMENT_EVENT, removeElement);
312                        if (!addElementLabel) {
313                                addChild(elem);
314                        } else {
315                                addChildAt(elem, getChildIndex(addElementLabel));
316                        }
317                }
318               
319                private function removeElement(event:Event):void {
320                        var elem:CMDComponentElement = ElementEdit(event.currentTarget).element;
321                        _component.removeElement(elem);
322                        removeChild(event.currentTarget as DisplayObject);
323                }
324               
325               
326                private function createHeading():FormItem {
327                        var heading:FormItem = new FormItem();
328                        heading.label = LabelConstants.COMPONENT;
329                        heading.styleName = StyleConstants.XMLBROWSER_HEADER;
330                        return heading;
331                }
332        }
333}
Note: See TracBrowser for help on using the repository browser.