Yeah, I've used this approach, but IMO it's a tedious process, that could easily be solved with a few conditions.
Say I have a view, with posters in a list in the middle and plot/info at the bottom. I also have a menu at the top (id 900). The posters (id 50) have a scrollbar beneath to scroll through them (id 60), and the plot has one (id 600). Easy. <ondown>60</ondown> <onup>900</onup> in the poster list, then <ondown>600</ondown> <onup>50</onup> on the poster scrollbar, then <onleft>60</onleft><onright>60</onright> on the plot scrollbar.
Basically, this:
Code:
---TOP MENU (900)--- (no onup*, ondown* 50)
---POSTERS (50)--- (onup* 900, ondown* 60)
---SCROLLBAR (60)--- (onup* 50, ondown* 600)
---PLOT-PLOT SCROLLBAR (600)--- (onleft*/onright* 60)
Now, I have this setting to swap them, so that the posters are at the bottom, and the plot/info above it, which alters the events:
Code:
---TOP MENU (900)--- (no onup*, ondown* 600) *
---PLOT-PLOT SCROLLBAR (600)--- (onleft* 900, onright* 50)
---POSTERS (50)--- (onup* 600, ondown* 60)
---SCROLLBAR (60)--- (onup* 50, ondown* 900)
To get the navigation to make sense id 900 shouldn't go down to 50 anymore, it should go to 600.
The posters should go down to 60 either way, nothing to do there.
Scrollbar 60 should go down to 600 too, if posters are centered, 900 otherwise.
Then, the plot scrollbar 600 should go right to 60 if posters centered, and to 50 if bottom aligned.
That would equal four buttons with my logic:
PHP Code:
<control type="group" id="901">
<description>ondown/onright conditions</description>
<control type="button">
<description>Posters centered and down press from 900 OR posters bottom aligned and right press from 600</description>
<visible>[Control.HasFocus(900) + !Skin.HasSetting(Posters_Bottom)] | [Control.HasFocus(600) + Skin.HasSetting(Posters_Bottom)]</visible>
<onfocus>SetFocus(50)</onfocus>
</control>
<control type="button">
<description>Posters centered and right press from 600</description>
<visible>Control.HasFocus(600) + !Skin.HasSetting(Posters_Bottom)</visible>
<onfocus>SetFocus(60)</onfocus>
</control>
<control type="button">
<description>Posters bottom aligned and down press from 900 or posters center aligned and down press from 60</description>
<visible>[Control.HasFocus(900) + Skin.HasSetting(Posters_Bottom)] | [Control.HasFocus(60) + !Skin.HasSetting(Posters_Bottom)]</visible>
<onfocus>SetFocus(600)</onfocus>
</control>
<control type="button">
<description>Posters bottom aligned and down press from 60</description>
<visible>Control.HasFocus(60) + Skin.HasSetting(Posters_Bottom)</visible>
<onfocus>SetFocus(900)</onfocus>
</control>
</control>
But, I haven't even started with the onup/onleft conditions yet. This means, more buttons (only three though!):
PHP Code:
<control type="group" id="902">
<description>onup/onleft conditions</description>
<control type="button">
<description>Posters centered and up press from 50 OR posters bottom aligned and left press from 600</description>
<visible>[Control.HasFocus(50) + !Skin.HasSetting(Posters_Bottom)] | [Control.HasFocus(600) + Skin.HasSetting(Posters_Bottom)]</visible>
<onfocus>SetFocus(900)</onfocus>
</control>
<control type="button">
<description>Posters centered and left press from 600</description>
<visible>Control.HasFocus(600) + !Skin.HasSetting(Posters_Bottom)</visible>
<onfocus>SetFocus(60)</onfocus>
</control>
<control type="button">
<description>Posters bottom aligned and up press from 50</description>
<visible>Control.HasFocus(50) + Skin.HasSetting(Posters_Bottom)</visible>
<onfocus>SetFocus(600)</onfocus>
</control>
</control>
So, as far as I can tell, that would be seven buttons, just for a swap between bottom and center aligned posters.
Instead of just having this:
PHP Code:
<control type="scrollbar" id="60">
...
<onup>50</onup>
<ondown condition="!Skin.HasSetting(Posters_Bottom)">600</ondown>
<ondown condition="Skin.HasSetting(Posters_Bottom)">900</ondown>
...
</control>
<control type="list" id="50">
...
<ondown>60</ondown>
<onup condition="!Skin.HasSetting(Posters_Bottom)">900</onup>
<onup condition="Skin.HasSetting(Posters_Bottom)">600</onup>
...
</control>
Alot easier if you ask me!
If only my C++ skills werent so limited.