Reputation: 893
So i was asked to trigger up/down spinner click with the keyboard, but i cant find where to dispatch the event...
This is what i have tried:
var item:Object=spinner.skin;
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
Any ideas?
Edit:I had to make shortcuts for datagrid row swapping.
if(e.keyCode==Keyboard.NUMPAD_ADD){
spnOrder.value++;
spnOrder.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
else if(e.keyCode==Keyboard.NUMPAD_SUBTRACT){
spnOrder.value--;
spnOrder.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
The spinner has a generic handler which swaps rows on a data grid with the resulting value of the spinner, dispatching a click sounded like the cleanest solution to me.
edit2:
Click handler:
private function spnOrder_clickHandler(e:MouseEvent):void{
var toIndex:int=spnOrder.value;
var index:int=grid.selectedIndex;
if(toIndex>-1 && toIndex<list.length && index>-1 && toIndex!=index){
if(toIndex<index)
list.addItemAt(list.removeItemAt(index-1),index)
else
list.addItemAt(list.removeItemAt(index+1),index);
grid.setFocus();
grid.setSelectedIndex(toIndex);
}
else{
grid.setFocus();
spnOrder.value=index;
}
}
Spinner:
<s:Spinner
id="spnOrder"
value="{grid.selectedIndex}"
skinClass="skins.SpinnerInvertedSkin"
click="spnOrder_clickHandler(event)" />
Upvotes: 0
Views: 118
Reputation: 39408
Don't reference the incrementButton / decrementButton on the skin. Do so on the component class.
var item:Object=spinner;
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
The events were probably dispatching properly, but no event listeners were listening on the skin instance; so no changes are made to the underlying component.
Upvotes: 1