icy-zebra-52882
09/12/2022, 12:38 PMbright-gpu-74537
09/12/2022, 12:39 PMicy-zebra-52882
09/12/2022, 12:39 PMicy-zebra-52882
09/12/2022, 12:48 PM@:bind
functions don't trigger when bound in a child component? This is my non-working code:
hx
@:build(haxe.ui.macros.ComponentMacros.build("assets/data/ui/characterlist.xml"))
class CharacterList extends TableView
{
public function new()
{
super();
}
@:bind(charFilter, UIEvent.CHANGE)
private function onCharFilterChange(_)
{
if (charFilter.text == null || charFilter.text == "")
{
dataSource.clearFilter();
}
else
{
dataSource.filter((k, v) ->
{
if (fuzzyFilter.value)
return (StringTools.contains(v.charName.toUpperCase(), charFilter.text.toUpperCase()));
else
return (StringTools.startsWith(v.charName.toUpperCase(), charFilter.text.toUpperCase()));
});
}
}
}
@:build(haxe.ui.macros.ComponentMacros.build("assets/data/ui/MainView.xml"))
class MainView extends VBox
{
public function new()
{
super();
}
}
icy-zebra-52882
09/12/2022, 12:48 PMMainView
and add grid1.
to specify a grid that specifically exists within `mainView`'s XML, it works fine. Essentially I want to be able to use that filter function on any instance of that componentrefined-laptop-39041
09/12/2022, 12:48 PMrefined-laptop-39041
09/12/2022, 12:49 PMhaxe
g2.begin(true, Colors.FOAM);
g2.color = kha.Color.Blue;
g2.sdfRect(10, 400, 300, 100, kha.Color.Blue, kha.Color.Blue, kha.Color.Yellow, kha.Color.Yellow, {tr: 20, br: 20, tl: 20, bl: 20}, 10, kha.Color.Green, 2.2);
g2.end();
refined-laptop-39041
09/12/2022, 12:49 PMbright-gpu-74537
09/12/2022, 12:50 PMbright-gpu-74537
09/12/2022, 12:50 PMbright-gpu-74537
09/12/2022, 12:50 PMhaxe
@:bind(tv6Filter, UIEvent.CHANGE)
private function ontv6FilterChange(_) {
if (tv6Filter.text == null || tv6Filter.text == "") {
tv6.dataSource.clearFilter();
} else {
tv6.dataSource.filter(function(index, data) {
return data.name.toLowerCase().indexOf(tv6Filter.text.toLowerCase()) != -1;
});
}
}
bright-gpu-74537
09/12/2022, 12:50 PMicy-zebra-52882
09/12/2022, 12:51 PMgrid1.dataSource.[...]
in MainViewicy-zebra-52882
09/12/2022, 12:51 PMgrid1
), it doesn't triggerbright-gpu-74537
09/12/2022, 12:53 PMbright-gpu-74537
09/12/2022, 12:53 PMicy-zebra-52882
09/12/2022, 12:54 PMhx
@:build(haxe.ui.macros.ComponentMacros.build("assets/data/ui/characterlist.xml"))
class CharacterList extends TableView
{
public function new()
{
super();
}
}
@:build(haxe.ui.macros.ComponentMacros.build("assets/data/ui/MainView.xml"))
class MainView extends VBox
{
public function new()
{
super();
}
@:bind(grid1.charFilter, UIEvent.CHANGE)
private function onCharFilterChange(_)
{
if (grid1.charFilter.text == null || grid1.charFilter.text == "")
{
grid1.dataSource.clearFilter();
}
else
{
grid1.dataSource.filter((k, v) ->
{
if (grid1.fuzzyFilter.value)
return (StringTools.contains(v.charName.toUpperCase(), grid1.charFilter.text.toUpperCase()));
else
return (StringTools.startsWith(v.charName.toUpperCase(), grid1.charFilter.text.toUpperCase()));
});
}
}
}
icy-zebra-52882
09/12/2022, 12:54 PMgrid1
as the instancebright-gpu-74537
09/12/2022, 12:55 PMbright-gpu-74537
09/12/2022, 12:55 PM@:bind(grid1.charFilter, UIEvent.CHANGE)
didnt know you could do that! 😄bright-gpu-74537
09/12/2022, 12:55 PMgrid1.charFilter
bit)icy-zebra-52882
09/12/2022, 12:56 PMbright-gpu-74537
09/12/2022, 12:56 PMbright-gpu-74537
09/12/2022, 1:36 PMbright-gpu-74537
09/12/2022, 1:36 PMhaxe
@:build(haxe.ui.ComponentBuilder.build("assets/my-table-view.xml"))
class MyTableView extends TableView {
@:bind(tv6Filter, UIEvent.CHANGE)
private function ontv6FilterChange(_) {
if (tv6Filter.text == null || tv6Filter.text == "") {
this.dataSource.clearFilter();
} else {
this.dataSource.filter(function(index, data) {
return data.name.toLowerCase().indexOf(tv6Filter.text.toLowerCase()) != -1;
});
}
}
}
bright-gpu-74537
09/12/2022, 1:36 PMxml
<tableview width="230" height="200">
<header width="100%">
<column width="32" id="image" />
<column width="100%" id="name">
<vbox width="100%">
<label text="Language" />
<textfield id="tv6Filter" placeholder="Filter" width="100%" />
</vbox>
</column>
<column id="rating" width="80" height="100%">
<vbox width="100%">
<label text="Rating" />
</vbox>
</column>
</header>
<item-renderer>
<image id="image" verticalAlign="center" horizontalAlign="center" />
</item-renderer>
<item-renderer verticalAlign="center">
<label id="name" width="100%" verticalAlign="center" />
</item-renderer>
<item-renderer verticalAlign="center">
<progress id="rating" width="100%" />
</item-renderer>
<data>
<item name="Haxe" image="icons/logo-haxe.png" rating="100" />
<item name="Java" image="icons/logo-java.png" rating="33" />
<item name="Javascript" image="icons/logo-javascript.png" rating="75" />
<item name="C++" image="icons/logo-cpp.png" rating="63" />
<item name="PHP" image="icons/logo-php.png" rating="40" />
<item name="C#" image="icons/logo-cs.png" rating="80" />
<item name="F#" image="icons/logo-fs.png" rating="11" />
<item name="OCaml" image="icons/logo-ocaml.png" rating="39" />
<item name="Assembler" image="icons/logo-asm.png" rating="81" />
</data>
</tableview>
bright-gpu-74537
09/12/2022, 1:37 PMxml
<vbox style="padding: 5px;">
<my-table-view />
</vbox>
refined-laptop-39041
09/12/2022, 1:38 PMbright-gpu-74537
09/12/2022, 1:38 PMicy-zebra-52882
09/12/2022, 8:50 PM