source: Collectif_Otra/global.reflet-web.net/lib/reflet_swf_dependances/onebyonedesign/ui/OBO_ComboBox.as @ 2816

Last change on this file since 2816 was 2816, checked in by kent1, 10 years ago

La librairie OBO

  • Property svn:executable set to *
File size: 6.2 KB
Line 
1package com.onebyonedesign.ui {
2       
3        import com.onebyonedesign.ui.graphics.ComboOption;
4        import flash.display.Sprite;
5        import com.onebyonedesign.ui.events.ComboBoxEvent;
6        import com.onebyonedesign.ui.graphics.ComboBoxGraphic;
7        import flash.display.MovieClip;
8        import flash.geom.Point;
9        import flash.text.TextField;
10        import flash.text.TextFieldAutoSize;
11        import flash.text.TextFormat;
12        import flash.text.AntiAliasType;
13        import flash.display.Sprite;
14        import flash.events.MouseEvent;
15        import flash.events.Event;
16       
17        /**
18        * UI widget combo box.
19        * @author Devon O.
20        */
21        public class OBO_ComboBox extends Sprite {
22               
23                private var _title:String;
24                private var _initialText:String;
25                private var _dp:Array;
26                private var _boxWidth:int;
27                private var _boxHeight:int;
28                private var _displayFont:String;
29                private var _displayFontSize:int;
30                private var _optionFontSize:int;
31               
32                private var _titleText:TextField;
33                private var _comboBox:ComboBoxGraphic;
34                private var _selectedText:TextField;
35               
36                private var _choiceHolder:Sprite = new Sprite();
37                private var _choices:Array = new Array();
38               
39                /**
40                 * The OBO_ComboBox is UI widget for creating drop down combo boxes. The constructor should be passed an array of objects. Each object should contain a "label" property (which will be displayed in the combo box), and an associated "data" property (which will be returned by the ComboBoxEvent class).
41                 * The OBO_ComboBox can also be used to create ComboBoxes displaying fonts. The Fonts should be embedded and an instance of each passed as the "data" property of each object in the dataprovider Array.
42                 * @example The following example creates a combo box which displays two different types of fonts to choose from:
43                 * <listing version="3.0">
44                 * private function initComboBox():void {
45                 *              // BauhausFont and AvianFont are Font classes contained in .fla library.
46                 *              var bf:Font = new BauhausFont();
47                 *              var af:Font = new AvianFont();
48                 *              var data:Array = [ { label:bf.fontName, data:bf }, { label:af.fontName, data:af } ];
49                 *              _comboBox = new OBO_ComboBox("Fonts:", "- select font -", data, 120, 18, "_sans", 11, 22);
50                 *              _comboBox.x = 50;
51                 *              _comboBox.y = 50;
52                 *              _comboBox.addEventListener(ComboBoxEvent.FONT_SELECTED, onComboSelect);
53                 *              addChild(_comboBox);
54                 *      }
55                 *     
56                 *      private function onComboSelect(cbe:ComboBoxEvent):void {
57                 *              trace (cbe.data);       // will trace AvianFont or BauhausFont instance
58                 *      }
59                 * </listing>
60                 * @param       title                                   The title which should be displayed for the combo box.
61                 * @param       initialDisplayText              The initial text seen in the box.
62                 * @param       dataProvider                    An array of objects. Each object should contain a "label" property (String) and a "data" property (*).
63                 * @param       width                                   Width of ComboBox box.
64                 * @param       height                                  Height of ComboBox box.
65                 * @param       displayFont                             The name of the font to be used in the title and display text.
66                 * @param       displayFontSize                 The size of the font used in title and display text.
67                 * @param       optionFontSize                  The size of the font used in option display.
68                 */
69                public function OBO_ComboBox(title:String, initialDisplayText:String, dataProvider:Array, width:int = 120, height:int = 18, displayFont:String = "_sans", displayFontSize:int = 11, optionFontSize:int = 11):void {
70                        _title = title;
71                        _initialText = initialDisplayText;
72                        _dp = dataProvider;
73                        _boxWidth = width;
74                        _boxHeight = height;
75                        _displayFont = displayFont;
76                        _displayFontSize = displayFontSize;
77                        _optionFontSize = optionFontSize;
78                       
79                        init();
80                }
81               
82                private function init():void {
83                        createTitle();
84                        createBox();
85                        createChoices();
86                }
87               
88                private function createTitle():void {
89                        _titleText = new TextField();
90                        _titleText.autoSize = TextFieldAutoSize.LEFT;
91                        _titleText.selectable = false;
92                        _titleText.defaultTextFormat = new TextFormat(_displayFont, _displayFontSize);
93                        _titleText.antiAliasType = AntiAliasType.ADVANCED;
94                        _titleText.text = _title;
95                        addChild(_titleText);   
96                }
97               
98                private function createBox():void {
99                        _comboBox = new ComboBoxGraphic(_boxWidth, _boxHeight);
100                        _comboBox.x = int(_titleText.width + 10);
101                        addChild(_comboBox);
102                       
103                        _selectedText = new TextField();
104                        _selectedText.width = _boxWidth - _boxHeight;
105                        _selectedText.height = _boxHeight - 2;
106                        _selectedText.selectable = false;
107                        _selectedText.mouseEnabled = false;
108                        _selectedText.defaultTextFormat = new TextFormat(_displayFont, _displayFontSize);
109                        _selectedText.antiAliasType = AntiAliasType.ADVANCED;
110                        _selectedText.background = true;
111                        _selectedText.text = _initialText;
112                        _selectedText.x = _comboBox.x + 1;
113                        _selectedText.y = _comboBox.y + 1;
114                        addChild(_selectedText);
115                       
116                        _comboBox.addEventListener(MouseEvent.CLICK, onClick);
117                }
118               
119                private function createChoices():void {
120                        _dp.forEach(addChoice);
121                }
122               
123                private function onOut(me:MouseEvent):void {
124                        removeChoices();
125                        _choices = new Array();
126                }
127               
128               
129                private function onClick(me:MouseEvent):void {
130                        addChoices();
131                }
132               
133                private function onSelect(me:MouseEvent):void {
134                        _selectedText.text = me.target.label;
135                        dispatchEvent(new ComboBoxEvent(ComboBoxEvent.OPTION_SELECTED, me.target.data));
136                        removeChoices();
137                }
138               
139                private function addChoices():void {
140                        parent.setChildIndex(this, parent.numChildren - 1);
141                        _choiceHolder.x = _comboBox.x;
142                        _choiceHolder.y = _comboBox.height;
143                        var gPoint:Point = localToGlobal(new Point(_choiceHolder.x, _choiceHolder.y));
144                        if ( (gPoint.y + _choiceHolder.height) >= stage.stageHeight)
145                                _choiceHolder.y = _comboBox.y - _choiceHolder.height;
146                        _choiceHolder.addEventListener(MouseEvent.ROLL_OUT, onOut);
147                        addChild(_choiceHolder);
148                }
149               
150                private function addChoice(info:Object, i:int, a:Array):void {
151                        var c:ComboOption = new ComboOption(info.label, info.data, _comboBox.width, _optionFontSize);
152                        _choices.push(c);
153                        c.useHandCursor = false;
154                        if (i > 0) 
155                                c.y = _choices[i - 1].y + _choices[i - 1].height;
156                        c.addEventListener(MouseEvent.CLICK, onSelect);
157                        _choiceHolder.addChild(c);
158                }
159               
160               
161                private function removeChoices():void {
162                        if (contains(_choiceHolder)) removeChild(_choiceHolder);
163                }
164        }
165}
Note: See TracBrowser for help on using the repository browser.