1 package net.systemeD.potlatch2.mapfeatures.editors {
4 import mx.containers.*;
6 import flash.display.*;
11 public class ChoiceComboBox extends ComboBox {
13 protected var textInputReplacement:UIComponent;
15 override protected function createChildren():void {
16 super.createChildren();
18 if ( !textInputReplacement ) {
19 if ( itemRenderer != null ) {
20 //remove the default textInput
21 removeChild(textInput);
23 //create a new itemRenderer to use in place of the text input
24 textInputReplacement = itemRenderer.newInstance();
25 IDataRenderer(textInputReplacement).data = selectedItem;
26 textInputReplacement.mouseChildren = false;
27 textInputReplacement.mouseEnabled = false;
28 addChild(textInputReplacement);
33 override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
34 super.updateDisplayList(unscaledWidth, unscaledHeight);
36 if ( textInputReplacement ) {
37 IDataRenderer(textInputReplacement).data = selectedItem;
39 var arrowWidth:Number = getStyle("arrowButtonWidth");
\r
40 var itemHeight:Number = textInputReplacement.getExplicitOrMeasuredHeight();
\r
41 var itemWidth:Number = textInputReplacement.getExplicitOrMeasuredWidth();
\r
43 if (isNaN(arrowWidth))
\r
46 var bm:EdgeMetrics = borderMetrics;
48 textInputReplacement.setActualSize(unscaledWidth - arrowWidth, itemHeight);
\r
49 textInputReplacement.move(bm.left, bm.top);
53 override protected function measure():void {
56 if ( textInputReplacement ) {
57 IDataRenderer(textInputReplacement).data = selectedItem;
58 var prefSize:Object = calculatePreferredSizeFromData(collection.length);
60 var arrowWidth:Number = getStyle("arrowButtonWidth");
\r
61 var itemHeight:Number = textInputReplacement.getExplicitOrMeasuredHeight();
\r
62 var itemWidth:Number = textInputReplacement.getExplicitOrMeasuredWidth();
\r
64 if (isNaN(arrowWidth))
\r
67 var bm:EdgeMetrics = borderMetrics;
68 itemHeight += bm.top + bm.bottom;
\r
69 itemWidth += bm.left + bm.right + arrowWidth + 8;
70 prefSize.height += bm.top + bm.bottom;
71 prefSize.width += bm.left + bm.right + arrowWidth + 8;
\r
73 measuredMinHeight = measuredHeight = Math.max(prefSize.height, itemHeight);
\r
74 measuredMinWidth = measuredWidth = Math.max(prefSize.width, itemWidth);
\r
78 override protected function calculatePreferredSizeFromData(numItems:int):Object {
79 if ( collection == null ) return { width: 0, height: 0 };
81 var maxWidth:Number = 0;
82 var maxHeight:Number = 0;
84 var test:UIComponent = itemRenderer.newInstance();
86 for ( var i:int = 0; i < numItems; i++ ) {
87 IDataRenderer(test).data = collection[i];
88 test.validateDisplayList();
89 test.validateSize(true);
90 maxWidth = Math.max(maxWidth, test.getExplicitOrMeasuredWidth());
\r
91 maxHeight = Math.max(maxHeight, test.getExplicitOrMeasuredHeight());
\r
94 return {width: maxWidth, height: maxHeight};