Skip to content

Commit

Permalink
Data Containers: itemTo* methods should be getters/setters instead of…
Browse files Browse the repository at this point in the history
… dynamic

Fixes setting them not updating the displayed text and things
  • Loading branch information
joshtynjala committed Jan 27, 2025
1 parent 4eafcb5 commit ff16e94
Show file tree
Hide file tree
Showing 7 changed files with 330 additions and 30 deletions.
48 changes: 44 additions & 4 deletions src/feathers/controls/ButtonBar.hx
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,14 @@ class ButtonBar extends FeathersControl {

private static final RESET_BUTTON_STATE = new ButtonBarItemState();

private static function defaultItemToText(data:Dynamic):String {
return Std.string(data);
}

private static function defaultItemToEnabled(data:Dynamic):Bool {
return true;
}

private static function defaultUpdateButton(button:Button, state:ButtonBarItemState):Void {
button.text = state.text;
}
Expand Down Expand Up @@ -317,6 +325,8 @@ class ButtonBar extends FeathersControl {

private var _ignoreSelectionChange = false;

private var _itemToText:(Dynamic) -> String = defaultItemToText;

/**
Converts an item to text to display within button bar. By default, the
`toString()` method is called to convert an item to text. This method
Expand All @@ -339,10 +349,26 @@ class ButtonBar extends FeathersControl {
@since 1.0.0
**/
public dynamic function itemToText(data:Dynamic):String {
return Std.string(data);
public var itemToText(get, set):(Dynamic) -> String;

private function get_itemToText():(Dynamic) -> String {
return this._itemToText;
}

private function set_itemToText(value:(Dynamic) -> String):(Dynamic) -> String {
if (value == null) {
value = defaultItemToText;
}
if (this._itemToText == value || Reflect.compareMethods(this._itemToText, value)) {
return this._itemToText;
}
this._itemToText = value;
this.setInvalid(DATA);
return this._itemToText;
}

private var _itemToEnabled:(Dynamic) -> Bool = defaultItemToEnabled;

/**
Determines if a button should be enabled or disabled. By default, all
items are enabled, unless the `ButtonBar` is disabled. This method
Expand All @@ -366,8 +392,22 @@ class ButtonBar extends FeathersControl {
@since 1.2.0
**/
public dynamic function itemToEnabled(data:Dynamic):Bool {
return true;
public var itemToEnabled(get, set):(Dynamic) -> Bool;

private function get_itemToEnabled():(Dynamic) -> Bool {
return this._itemToEnabled;
}

private function set_itemToEnabled(value:(Dynamic) -> Bool):(Dynamic) -> Bool {
if (value == null) {
value = defaultItemToEnabled;
}
if (this._itemToEnabled == value || Reflect.compareMethods(this._itemToEnabled, value)) {
return this._itemToEnabled;
}
this._itemToEnabled = value;
this.setInvalid(DATA);
return this._itemToEnabled;
}

/**
Expand Down
48 changes: 44 additions & 4 deletions src/feathers/controls/ComboBox.hx
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,14 @@ class ComboBox extends FeathersControl implements IIndexSelector implements IDat
**/
public static final CHILD_VARIANT_LIST_VIEW = "comboBox_listView";

private static function defaultItemToText(data:Dynamic):String {
return Std.string(data);
}

private static function defaultItemToEnabled(data:Dynamic):Bool {
return true;
}

private static final defaultButtonFactory = DisplayObjectFactory.withClass(Button);

private static final defaultTextInputFactory = DisplayObjectFactory.withClass(TextInput);
Expand Down Expand Up @@ -473,6 +481,8 @@ class ComboBox extends FeathersControl implements IIndexSelector implements IDat
return this._itemRendererRecycler;
}

private var _itemToText:(Dynamic) -> String = defaultItemToText;

/**
Converts an item to text to display within the pop-up `ListView`, or
within the `Button`, if the item is selected. By default, the
Expand All @@ -498,10 +508,26 @@ class ComboBox extends FeathersControl implements IIndexSelector implements IDat
@since 1.0.0
**/
public dynamic function itemToText(data:Dynamic):String {
return Std.string(data);
public var itemToText(get, set):(Dynamic) -> String;

private function get_itemToText():(Dynamic) -> String {
return this._itemToText;
}

private function set_itemToText(value:(Dynamic) -> String):(Dynamic) -> String {
if (value == null) {
value = defaultItemToText;
}
if (this._itemToText == value || Reflect.compareMethods(this._itemToText, value)) {
return this._itemToText;
}
this._itemToText = value;
this.setInvalid(DATA);
return this._itemToText;
}

private var _itemToEnabled:(Dynamic) -> Bool = defaultItemToEnabled;

/**
Determines if an item should be enabled or disabled. By default, all
items are enabled, unless the `ComboBox` is disabled. This method
Expand All @@ -525,8 +551,22 @@ class ComboBox extends FeathersControl implements IIndexSelector implements IDat
@since 1.2.0
**/
public dynamic function itemToEnabled(data:Dynamic):Bool {
return true;
public var itemToEnabled(get, set):(Dynamic) -> Bool;

private function get_itemToEnabled():(Dynamic) -> Bool {
return this._itemToEnabled;
}

private function set_itemToEnabled(value:(Dynamic) -> Bool):(Dynamic) -> Bool {
if (value == null) {
value = defaultItemToEnabled;
}
if (this._itemToEnabled == value || Reflect.compareMethods(this._itemToEnabled, value)) {
return this._itemToEnabled;
}
this._itemToEnabled = value;
this.setInvalid(DATA);
return this._itemToEnabled;
}

/**
Expand Down
72 changes: 66 additions & 6 deletions src/feathers/controls/GroupListView.hx
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,18 @@ class GroupListView extends BaseScrollContainer implements IDataSelector<Dynamic

private static final RESET_ITEM_STATE = new GroupListViewItemState();

private static function defaultItemToText(data:Dynamic):String {
return Std.string(data);
}

private static function defaultItemToEnabled(data:Dynamic):Bool {
return true;
}

private static function defaultItemToHeaderText(data:Dynamic):String {
return Std.string(data);
}

private static function defaultUpdateItemRenderer(itemRenderer:DisplayObject, state:GroupListViewItemState):Void {
if ((itemRenderer is ITextControl)) {
var textControl:ITextControl = cast itemRenderer;
Expand Down Expand Up @@ -840,6 +852,8 @@ class GroupListView extends BaseScrollContainer implements IDataSelector<Dynamic
private var _ignoreSelectionChange = false;
private var _ignoreLayoutChanges = false;

private var _itemToText:(Dynamic) -> String = defaultItemToText;

/**
Converts an item to text to display within group list view. By default,
the `toString()` method is called to convert an item to text. This
Expand All @@ -862,10 +876,26 @@ class GroupListView extends BaseScrollContainer implements IDataSelector<Dynamic
@since 1.0.0
**/
public dynamic function itemToText(data:Dynamic):String {
return Std.string(data);
public var itemToText(get, set):(Dynamic) -> String;

private function get_itemToText():(Dynamic) -> String {
return this._itemToText;
}

private function set_itemToText(value:(Dynamic) -> String):(Dynamic) -> String {
if (value == null) {
value = defaultItemToText;
}
if (this._itemToText == value || Reflect.compareMethods(this._itemToText, value)) {
return this._itemToText;
}
this._itemToText = value;
this.setInvalid(DATA);
return this._itemToText;
}

private var _itemToEnabled:(Dynamic) -> Bool = defaultItemToEnabled;

/**
Determines if an item should be enabled or disabled. By default, all
items are enabled, unless the `GroupListView` is disabled. This method
Expand All @@ -889,10 +919,26 @@ class GroupListView extends BaseScrollContainer implements IDataSelector<Dynamic
@since 1.2.0
**/
public dynamic function itemToEnabled(data:Dynamic):Bool {
return true;
public var itemToEnabled(get, set):(Dynamic) -> Bool;

private function get_itemToEnabled():(Dynamic) -> Bool {
return this._itemToEnabled;
}

private function set_itemToEnabled(value:(Dynamic) -> Bool):(Dynamic) -> Bool {
if (value == null) {
value = defaultItemToEnabled;
}
if (this._itemToEnabled == value || Reflect.compareMethods(this._itemToEnabled, value)) {
return this._itemToEnabled;
}
this._itemToEnabled = value;
this.setInvalid(DATA);
return this._itemToEnabled;
}

private var _itemToHeaderText:(Dynamic) -> String = defaultItemToHeaderText;

/**
Converts an group to text to display within a group list view header. By
default, the `toString()` method is called to convert an item to text.
Expand All @@ -915,8 +961,22 @@ class GroupListView extends BaseScrollContainer implements IDataSelector<Dynamic
@since 1.0.0
**/
public dynamic function itemToHeaderText(data:Dynamic):String {
return Std.string(data);
public var itemToHeaderText(get, set):(Dynamic) -> String;

private function get_itemToHeaderText():(Dynamic) -> String {
return this._itemToHeaderText;
}

private function set_itemToHeaderText(value:(Dynamic) -> String):(Dynamic) -> String {
if (value == null) {
value = defaultItemToHeaderText;
}
if (this._itemToHeaderText == value || Reflect.compareMethods(this._itemToHeaderText, value)) {
return this._itemToHeaderText;
}
this._itemToHeaderText = value;
this.setInvalid(DATA);
return this._itemToHeaderText;
}

/**
Expand Down
48 changes: 44 additions & 4 deletions src/feathers/controls/ListView.hx
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,14 @@ class ListView extends BaseScrollContainer implements IIndexSelector implements

private static final RESET_ITEM_STATE = new ListViewItemState();

private static function defaultItemToText(data:Dynamic):String {
return Std.string(data);
}

private static function defaultItemToEnabled(data:Dynamic):Bool {
return true;
}

private static function defaultUpdateItemRenderer(itemRenderer:DisplayObject, state:ListViewItemState):Void {
if ((itemRenderer is ITextControl)) {
var textControl:ITextControl = cast itemRenderer;
Expand Down Expand Up @@ -1047,6 +1055,8 @@ class ListView extends BaseScrollContainer implements IIndexSelector implements
**/
public var edgeAutoScrollDistance:Float = 8.0;

private var _itemToText:(Dynamic) -> String = defaultItemToText;

/**
Converts an item to text to display within list view. By default, the
`toString()` method is called to convert an item to text. This method
Expand All @@ -1069,10 +1079,26 @@ class ListView extends BaseScrollContainer implements IIndexSelector implements
@since 1.0.0
**/
public dynamic function itemToText(data:Dynamic):String {
return Std.string(data);
public var itemToText(get, set):(Dynamic) -> String;

private function get_itemToText():(Dynamic) -> String {
return this._itemToText;
}

private function set_itemToText(value:(Dynamic) -> String):(Dynamic) -> String {
if (value == null) {
value = defaultItemToText;
}
if (this._itemToText == value || Reflect.compareMethods(this._itemToText, value)) {
return this._itemToText;
}
this._itemToText = value;
this.setInvalid(DATA);
return this._itemToText;
}

private var _itemToEnabled:(Dynamic) -> Bool = defaultItemToEnabled;

/**
Determines if an item should be enabled or disabled. By default, all
items are enabled, unless the `ListView` is disabled. This method
Expand All @@ -1096,8 +1122,22 @@ class ListView extends BaseScrollContainer implements IIndexSelector implements
@since 1.2.0
**/
public dynamic function itemToEnabled(data:Dynamic):Bool {
return true;
public var itemToEnabled(get, set):(Dynamic) -> Bool;

private function get_itemToEnabled():(Dynamic) -> Bool {
return this._itemToEnabled;
}

private function set_itemToEnabled(value:(Dynamic) -> Bool):(Dynamic) -> Bool {
if (value == null) {
value = defaultItemToEnabled;
}
if (this._itemToEnabled == value || Reflect.compareMethods(this._itemToEnabled, value)) {
return this._itemToEnabled;
}
this._itemToEnabled = value;
this.setInvalid(DATA);
return this._itemToEnabled;
}

/**
Expand Down
Loading

0 comments on commit ff16e94

Please sign in to comment.