Ray scratches his own belly.

- Match more closely the usage of labelField in our superclass.
- renamed to getSelectedData and setSelectedData.
- use Util.equals() when hunting for a matching data.
  Because we are not living in adobe's stone age and we
  want Equalable objects to work.


git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@743 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
Ray Greenwell
2008-12-13 00:50:12 +00:00
parent 7b367ad67b
commit 6eaaf4da01
+11 -13
View File
@@ -27,6 +27,7 @@ import mx.controls.ComboBox;
import mx.events.ListEvent;
import com.threerings.util.CommandEvent;
import com.threerings.util.Util;
/**
* A combo box that dispatches a command (or calls a function) when it is toggled. NOTE: Unlike the
@@ -39,7 +40,7 @@ public class CommandComboBox extends ComboBox
* The field of the selectedItem object used as the argument to the
* command or function. If null, the entire selectedItem is passed as the argument.
*/
public var dataField :String;
public var dataField :String = "data";
/**
* Create a command combobox.
@@ -47,11 +48,10 @@ public class CommandComboBox extends ComboBox
* @param cmdOrFn either a String, which will be the CommandEvent command to dispatch,
* or a function, which will be called when changed.
*/
public function CommandComboBox (cmdOrFn :* = null, dataField :String = "data")
public function CommandComboBox (cmdOrFn :* = null)
{
CommandButton.validateCmd(cmdOrFn);
_cmdOrFn = cmdOrFn;
this.dataField = dataField;
addEventListener(ListEvent.CHANGE, handleChange);
}
@@ -73,21 +73,19 @@ public class CommandComboBox extends ComboBox
}
/**
* Handy function to lookup an option based on dataField and set it as the selected item.
* This probably only works for Array dataProviders.
* Set the selectedItem based on the data field.
*/
public function setSelectedValue (value :Object) :void
public function setSelectedData (data :Object) :void
{
for (var ii :int = 0; ii < dataProvider.length; ++ii) {
var v :Object = (this.dataField != null) ?
dataProvider[ii][this.dataField] : dataProvider[ii];
if (v == value) {
if (Util.equals(data,
(dataField != null) ? dataProvider[ii][dataField] : dataProvider[ii])) {
this.selectedIndex = ii;
return;
}
}
// Assign to the prompt
// not found, clear the selection
this.selectedIndex = -1;
}
@@ -95,15 +93,15 @@ public class CommandComboBox extends ComboBox
* The value that will be passed to the command or function based on dataField and the
* current selected item.
*/
public function getSelectedValue () :Object
public function getSelectedData () :Object
{
return (this.dataField != null) ? this.selectedItem[this.dataField] : this.selectedItem;
return (dataField != null) ? this.selectedItem[dataField] : this.selectedItem;
}
protected function handleChange (event :ListEvent) :void
{
if (this.selectedIndex != -1) {
CommandEvent.dispatch(this, _cmdOrFn, getSelectedValue());
CommandEvent.dispatch(this, _cmdOrFn, getSelectedData());
}
}