Req [RFC] Lists inside lists - looking for testers
#1
until now it was possible to use multiple lists inside a grouplist, but a few days ago,
some code was merged which makes it possible to use lists inside lists as well. (see: https://github.com/xbmc/xbmc/pull/20852)

if anyone is interested in testing this new functionality, it would be greatly appreciated.
you get get a nightly master build here: http://mirrors.kodi.tv/nightlies/
Do not PM or e-mail Team-Kodi members directly asking for support.
Always read the Forum rules, Kodi online-manual, FAQ, Help and Search the forum before posting.
Reply
#2
a question @ronie

- whats the suppoed method to let the 'sublist' gain focus (switch between root list and sublist layout items)

i tested on a custom window

root list id  50
- vertical
- onright should focus sub list 5001


sub list id   5001
- onleft should focus 50


Video - on right just loose focus of id 50, but gain no new focus on control 5001  https://streamable.com/pnal3w

xml:

<window type="window" id="1150">
    <defaultcontrol always="true">2000</defaultcontrol>
    <menucontrol>99001</menucontrol>
    <controls>
    <description>template for tesing some thing(s)</description>
        <control type="group">
            <include>global_background</include>
        </control>
        <control type="grouplist" id="2000">
            <height>1080</height>
                <control type="list" id="50">
                    <onup>2300</onup>
                    <ondown>2200</ondown>
                    <height>910</height>
                    <left>130</left>
                    <top>170</top>
                    <right>50</right>
                    <align>center</align>
                    <orientation>vertical</orientation>
                    <preloaditems>2</preloaditems>
                    <scrolltime tween="quadratic">400</scrolltime>        
                    <onright>SetFocus(5001)</onright>

                    <itemlayout height="460" width="1600">
                        <control type="group">
                            <width>240</width>
                            <height>370</height>
                            <include content="universal_itemlayout">
                                <param name="artwork_bordercolor" value="$VAR[color_universalcontainer_itemframe_nf]" />
                                <param name="artwork" value="poster" />
                                <param name="artwork_focusoverlay_visible" value="false" />
                                <param name="infotags_visible" value="true" />
                                <param name="infotags_autoscroll" value="false" />
                                <param name="artwork_bg_bordersize" value="6" />
                                <param name="infotags_bgpanel_color" value="$VAR[color_universalcontainer_itemtag_bgpanel_nf]" />
                                <param name="infotags_label1_color" value="$VAR[color_universalcontainer_itemtag_label1_nf]" />
                                <param name="infotags_label2_color" value="$VAR[color_universalcontainer_itemtag_label2_nf]" />
                                <param name="artwork_diffuse_themed" value="true" />
                                <param name="artwork_diffuse_override" value="false" />
                            </include>
                        </control>
                        
                            <control type="list" id="5001">    
                                <left>280</left>
                                <align>center</align>
                                <orientation>horizontal</orientation>

 <description>
- i am restricted to the width/height attribue of root(50) item/focusedlayout
- how to switch focus                bewtween root and sub        
</description>
                                <preloaditems>2</preloaditems>
                                <scrolltime tween="quadratic">400</scrolltime>
                                <itemlayout height="100" width="100">
                                    <control type="group">
                                        <width>100</width>
                                        <height>100</height>
                                        <include content="universal_itemlayout">
                                            <param name="artwork_bordercolor" value="$VAR[color_universalcontainer_itemframe_nf]" />
                                            <param name="artwork" value="poster" />
                                            <param name="artwork_focusoverlay_visible" value="false" />
                                            <param name="infotags_visible" value="true" />
                                            <param name="infotags_autoscroll" value="false" />
                                            <param name="artwork_bg_bordersize" value="6" />
                                            <param name="infotags_bgpanel_color" value="$VAR[color_universalcontainer_itemtag_bgpanel_nf]" />
                                            <param name="infotags_label1_color" value="$VAR[color_universalcontainer_itemtag_label1_nf]" />
                                            <param name="infotags_label2_color" value="$VAR[color_universalcontainer_itemtag_label2_nf]" />
                                            <param name="artwork_diffuse_themed" value="true" />
                                            <param name="artwork_diffuse_override" value="false" />
                                        </include>
                                    </control>
                                </itemlayout>
                                <focusedlayout height="100" width="100">
                                    <control type="group">
                                        <width>100</width>
                                        <height>100</height>
                                        <include condition="true">AltAnimation_Item_Focus</include>
                                        <control type="group">
                                            <include content="universal_itemlayout">
                                                <param name="artwork_bordercolor" value="$VAR[color_universalcontainer_itemframe_fo]" />
                                                <param name="artwork" value="poster" />
                                                <param name="artwork_focusoverlay_visible" value="true" />
                                                <param name="infotags_visible" value="true" />
                                                <param name="infotags_autoscroll" value="true" />
                                                <param name="artwork_bg_bordersize" value="4" />
                                                <param name="infotags_bgpanel_color" value="$VAR[color_universalcontainer_itemtag_bgpanel_fo]" />
                                                <param name="infotags_label1_color" value="$VAR[color_universalcontainer_itemtag_label1_fo]" />
                                                <param name="infotags_label2_color" value="$VAR[color_universalcontainer_itemtag_label2_fo]" />
                                            </include>
                                        </control>
                                    </control>
                                </focusedlayout>
                                <include content="emptywidget">
                                    <param name="id" value="0" />
                                </include>
                                <content>
                                    <item>
                                        <label>SPACER</label>
                                        <label2 />
                                        <icon></icon>
                                        <thumb></thumb>
                                    </item>
                                </content>
                                <content>$INFO[Container(50).ListItem(1).Folderpath]</content>
                            </control>       
                    </itemlayout>
                    <focusedlayout height="460" width="1600">
                        <include content="hiddenbutton_manage_skinpropertys" />
                        <control type="group">
                            <width>240</width>
                            <height>370</height>
                            <include condition="true">AltAnimation_Item_Focus</include>
                            <control type="group">
                                <include content="universal_itemlayout">
                                    <param name="artwork_bordercolor" value="$VAR[color_universalcontainer_itemframe_fo]" />
                                    <param name="artwork" value="poster" />
                                    <param name="artwork_focusoverlay_visible" value="true" />
                                    <param name="infotags_visible" value="true" />
                                    <param name="infotags_autoscroll" value="true" />
                                    <param name="artwork_bg_bordersize" value="4" />
                                    <param name="infotags_bgpanel_color" value="$VAR[color_universalcontainer_itemtag_bgpanel_fo]" />
                                    <param name="infotags_label1_color" value="$VAR[color_universalcontainer_itemtag_label1_fo]" />
                                    <param name="infotags_label2_color" value="$VAR[color_universalcontainer_itemtag_label2_fo]" />
                                </include>
                            </control>
                        </control>
                        <control type="list" id="5001">    
                                <left>280</left>
                                <align>center</align>
                                <orientation>horizontal</orientation>
<description>
- i am restricted to the width/height attribue of root(50)item/focusedlayout
- how to switch focus                bewtween root and sub
</description>        
                                <preloaditems>2</preloaditems>
                                <scrolltime tween="quadratic">400</scrolltime>
                                <itemlayout height="100" width="100">
                                    <control type="group">
                                        <width>100</width>
                                        <height>100</height>
                                        <include content="universal_itemlayout">
                                            <param name="artwork_bordercolor" value="$VAR[color_universalcontainer_itemframe_nf]" />
                                            <param name="artwork" value="poster" />
                                            <param name="artwork_focusoverlay_visible" value="false" />
                                            <param name="infotags_visible" value="true" />
                                            <param name="infotags_autoscroll" value="false" />
                                            <param name="artwork_bg_bordersize" value="6" />
                                            <param name="infotags_bgpanel_color" value="$VAR[color_universalcontainer_itemtag_bgpanel_nf]" />
                                            <param name="infotags_label1_color" value="$VAR[color_universalcontainer_itemtag_label1_nf]" />
                                            <param name="infotags_label2_color" value="$VAR[color_universalcontainer_itemtag_label2_nf]" />
                                            <param name="artwork_diffuse_themed" value="true" />
                                            <param name="artwork_diffuse_override" value="false" />
                                        </include>
                                    </control>
                                </itemlayout>
                                <focusedlayout height="100" width="100">
                                    <control type="group">
                                        <width>100</width>
                                        <height>100</height>
                                        <include condition="true">AltAnimation_Item_Focus</include>
                                        <control type="group">
                                            <include content="universal_itemlayout">
                                                <param name="artwork_bordercolor" value="$VAR[color_universalcontainer_itemframe_fo]" />
                                                <param name="artwork" value="poster" />
                                                <param name="artwork_focusoverlay_visible" value="true" />
                                                <param name="infotags_visible" value="true" />
                                                <param name="infotags_autoscroll" value="true" />
                                                <param name="artwork_bg_bordersize" value="4" />
                                                <param name="infotags_bgpanel_color" value="$VAR[color_universalcontainer_itemtag_bgpanel_fo]" />
                                                <param name="infotags_label1_color" value="$VAR[color_universalcontainer_itemtag_label1_fo]" />
                                                <param name="infotags_label2_color" value="$VAR[color_universalcontainer_itemtag_label2_fo]" />
                                            </include>
                                        </control>
                                    </control>
                                </focusedlayout>
                                <include content="emptywidget">
                                    <param name="id" value="999" />
                                </include>
                                <content>
                                    <item>
                                        <label>SPACER</label>
                                        <label2 />
                                        <icon></icon>
                                        <thumb></thumb>
                                    </item>
                                </content>
                                <content>$INFO[Container(50).ListItem.Folderpath]</content>
                            </control>
                    </focusedlayout>
                    <content>videodb://tvshows/titles/</content>
            </control>
        </control>
    </controls>
</window>
Skins |  Titan M O D   •   S W A N (WIP)
Reply
#3
Are the secondary lists 'just for show' because, as mardukL mentioned, they can't seem to be focused and used?
Reply
#4
Perhaps needs @garbear input as he did the PR.
Reply
#5
Would this be more efficient from a memory perspective than running a separate secondary list with a visibility condition?

I imagine it would also be constrained by the bounding of the parent list without the need to create a mask?
Reply
#6
I honestly forgot to consider skin navigation. I wrote code in core to focus the inner list. It's hard because item layouts operate differently than the rest of the skin. When the window is loaded the entire skin is read into memory, but itemlayouts only initialize a "template". Then, dynamically, the lists are populated, and each inner list item is initialized from the "template" item layout. The problem is that a control ID can't be assigned, because cloning the template would duplicate the ID.

There is a workaround, however. Kodi will pass the index of the inner listitem using the ListItem.CurrentItem label. CurrentItem starts at 1 and counts up for each listitem of the inner list. Maybe there's some concatenation trickery we can do to make use of this.

​​​​​​
(2022-01-30, 14:30)mardukL Wrote: Video - on right just loose focus of id 50, but gain no new focus on control 5001  https://streamable.com/pnal3w

Can you skin up how lists within lists *should* work, and then send me the skin code? I can modify core so that the navigation performs like you expect.
Reply
#7
Here's the skin code for my experimental Player Manager:


Image


The outer list is defined like this:


xml:

<control type="list" id="5">
<description>Player list</description>
<onup>3</onup>
<ondown>6</ondown>
<pagecontrol>61</pagecontrol>
<scrolltime tween="sine">200</scrolltime>
<orientation>vertical</orientation>
<itemlayout width="1700" height="96">
<include>GameDialogAgentList</include>
</itemlayout>
<focusedlayout width="1700" height="96">
<control type="image">
<top>-20</top>
<bottom>-20</bottom>
<left>-20</left>
<right>-20</right>
<texture border="40" colordiffuse="button_focus">buttons/dialogbutton-fo.png</texture>
<visible>Control.HasFocus(5)</visible>
</control>
<include>GameDialogAgentList</include>
</focusedlayout>
</control>


The inner list is defined like this:


xml:

<include name="GameDialogAgentList">
<control type="label">
<description>Player name</description>
<top>20</top>
<left>20</left>
<label>$INFO[ListItem.Label]</label>
<font>font37</font>
<shadowcolor>text_shadow</shadowcolor>
<align>left</align>
</control>
<control type="gamecontrollerlist">
<description>Player's game controller list. Length should fit 11 listitems (10 players and one "input disabled" indicator).</description>
<right>0</right>
<width>1248</width>
<orientation>horizontal</orientation>
<enable>false</enable>
<itemlayout width="96" height="96">
<control type="gamecontroller" />
</itemlayout>
<focusedlayout width="96" height="96">
<control type="gamecontroller" />
</focusedlayout>
</control>
</include>
Reply
#8
(2022-02-13, 13:49)garbear Wrote: I honestly forgot to consider skin navigation. I wrote code in core to focus the inner list. It's hard because item layouts operate differently than the rest of the skin. When the window is loaded the entire skin is read into memory, but itemlayouts only initialize a "template". Then, dynamically, the lists are populated, and each inner list item is initialized from the "template" item layout. The problem is that a control ID can't be assigned, because cloning the template would duplicate the ID.

There is a workaround, however. Kodi will pass the index of the inner listitem using the ListItem.CurrentItem label. CurrentItem starts at 1 and counts up for each listitem of the inner list. Maybe there's some concatenation trickery we can do to make use of this.

​​​​​​
(2022-01-30, 14:30)mardukL Wrote: Video - on right just loose focus of id 50, but gain no new focus on control 5001  https://streamable.com/pnal3w

Can you skin up how lists within lists *should* work, and then send me the skin code? I can modify core so that the navigation performs like you expect.

Hi, thanks for taking a look.

So for Navigation, i would just stick witch the simple onright navigations, as 'sublist' is stick to a 1 row, or 1 column layout of the root container.

e.g.
means if list 50 is vertical list, filled with dynamic content

50 = root list
    <onright>SetFocus(50001)</


        50001 = sub list of 50
            <onleft>50</onleft>  <!-- should be able focus ROOT LIST -->
            <onup>Control.Move(50,-1)</onup> <!--dynamic content container,  should move root up ,but keep focus the sublist, ~ circular navigaition-->
            <ondown>Control.Move(50,1)</ondown> <!-- dynamic content container, should move root down , but keep focus the sublist, ~ circular navigaition--->


....

Currently i just struggle define 'working' visible conditions. 

Not pretty importantat ( least to me ) but depending on a usecase it effeccts other situations as well.

in my test case
Integer.IsLess(ListItem.CurrentItem, Container.CurrentItem) ALWAYS FALSE, but should be true for the 1st colum : listitem(-1).**
Integer.IsGreater(ListItem.CurrentItem, Container.CurrentItem)  RETURN ALWAYS TRUE but should be true for the 3st colum : listitem(1).**

watch gallery





I created a view type in estuary for testing...
code used : https://github.com/marduklev/xbmc/commit...5f465e4b01


xml:

<?xml version="1.0" encoding="UTF-8"?>
<includes>
    <include name="View_510_SubLists">
        <param name="bottom_offset">list_bottom_offset</param>
        <definition>
            <control type="group">
                <include>OpenClose_Right</include>
                <visible>Control.IsVisible(510)</visible>
                <include>Visible_Right</include>
                <control type="fixedlist" id="510">
                    <description>ROOT - Equals main media item which can lead to 'subdir' : tvshows,sets,artists...</description>
                    <visible>Container.Content(tvshows) | Container.Content(sets) | Container.Content(artists) | Container.Content(albums) | Container.Content(tvshows) | Container.Content(games)</visible>
                    
                    <left>50</left>
                    <top>100</top>
                    <bottom>$PARAM[bottom_offset]</bottom>
                    <right>0</right>
                    <scrolltime tween="cubic" easing="out">500</scrolltime>
                    <orientation>vertical</orientation>
                    <pagecontrol>531</pagecontrol>
                    <focusposition>1</focusposition>
                    <onleft>9000</onleft>
        <onright>51001</onright>  <!-- should be able focus SUB LIST -->
                    <onup>510</onup>
                    <ondown>510</ondown>
                    <viewtype label="View 510 SubLists">list</viewtype>
                    
                    <focusedlayout height="300">
                        <control type="group">
                            <width>sublists_rootlayout_width_hor</width>
                            <include content="sublist_root_layout" />
                        </control>
                        
                        <control type="group">
                            <left>sublists_rootlayout_width_hor</left>
                            <centertop>50%</centertop>
                            <control type="image">
                                <animation effect="fade" end="50" condition="true">conditional</animation>
                                <bordersize>2</bordersize>
                                <texture>colors/black.png</texture>
                            </control>
                            <control type="list" id="51001">
                                <orientation>horizontal</orientation>
        <onleft>510</onleft>  <!-- should be able focus ROOT LIST -->
        <onup>Control.Move(510,-1)</onup> <!-- should move root up -->
        <ondown>Control.Move(510,1)</ondown> <!-- should move root down -->
                                <focusedlayout height="150" width="100" condition="Container.Content(tvshows)">
                                    <control type="group">
                                        <width>sublists_rootlayout_width_hor</width>
                                        <include content="sublist_sub_layout" />
                                    </control>
                                </focusedlayout>
                                <itemlayout height="150" width="100" condition="Container.Content(tvshows)">
                                    <control type="group">
                                        <width>sublists_rootlayout_width_hor</width>
                                        <include content="sublist_sub_layout">
                                            <param name="focusborder" value="" />
                                        </include>
                                    </control>
                                </itemlayout>
                                <content limit="5">$INFO[Container(510).ListItem(0).FolderPath]</content>
                                <!-- tvshows lib path <content>videodb://tvshows/titles/$INFO[ListItem.dbid]/</content> -->
                                <!-- tvshows xsp lib path <content>videodb://tvshows/titles/? xsp=%7B%22rules%22%3A%7B%22and%22%3A%5B%7B%22field%22%3A%22title%22%2C%22operator%22%3A%22contains%22%2C%22value%22%3A%5B%22$INFO[ListItem.TVShowTitle]%22%5D%7D%5D%7D%2C%22type%22%3A%22tvshows%22%7D</content> -->
                                
                            </control>
                        </control>
                    </focusedlayout>
                    
                    <itemlayout height="300">
                        <control type="group">
                            <width>sublists_rootlayout_width_hor</width>
                            <include content="sublist_root_layout">
                                <param name="focusborder" value="" />
                            </include>
                        </control>
                        
                        <control type="group">
                            <description>may found a bug, but used as visible condition</description>
                            <left>1300</left> <!-- use left , just for debugging purpose - better diff lists condition -->
                            <!-- should be default <left>sublists_rootlayout_width_hor</left> -->
                            
                            <!-- <visible> Integer.IsEqual(ListItem.CurrentItem, Container.CurrentItem)</visible> I ALWAYS FALSE : got my issues by check against to differenciate -->
                            
                            <centertop>50%</centertop>
                            <control type="image">
                                <animation effect="fade" end="50" condition="true">conditional</animation>
                                <bordersize>2</bordersize>
                                <texture>colors/black.png</texture>
                            </control>
                            <control type="list">
                                <orientation>horizontal</orientation>
                                <focusedlayout height="150" width="100" condition="Container.Content(tvshows)">
                                    <control type="group">
                                        <width>sublists_rootlayout_width_hor</width>
                                        <include content="sublist_sub_layout" />
                                    </control>
                                </focusedlayout>
                                <itemlayout height="150" width="100" condition="Container.Content(tvshows)">
                                    <control type="group">
                                        <width>sublists_rootlayout_width_hor</width>
                                        <include content="sublist_sub_layout">
                                            <param name="focusborder" value="" />
                                        </include>
                                    </control>
                                </itemlayout>
                                <content limit="5">$INFO[ListItem(-1).folderpath]</content>
                                <!-- tvshows lib path <content>videodb://tvshows/titles/$INFO[ListItem(-1).dbid]/</content> -->
                                <!-- tvshows xsp lib path <content>videodb://tvshows/titles/? xsp=%7B%22rules%22%3A%7B%22and%22%3A%5B%7B%22field%22%3A%22title%22%2C%22operator%22%3A%22contains%22%2C%22value%22%3A%5B%22$INFO[(-1)ListItem.TVShowTitle]%22%5D%7D%5D%7D%2C%22type%22%3A%22tvshows%22%7D</content> -->
                                
                            </control>
                        </control>
                        <control type="group">
                            <description>may found a bug, visible condition</description>
                            <left>sublists_rootlayout_width_hor</left>
                            
        <!-- <visible>Integer.IsGreater(ListItem.CurrentItem, Container.CurrentItem)</visible> I RETURN ALWAYS TRUE  -->
                            
                            <centertop>50%</centertop>
                            <control type="image">
                                <animation effect="fade" end="20" condition="true">conditional</animation>
                                <bordersize>2</bordersize>
                                <texture>colors/black.png</texture>
                            </control>
                            <control type="list">
                                <orientation>horizontal</orientation>
                                <focusedlayout height="150" width="100" condition="Container.Content(tvshows)">
                                    <control type="group">
                                        <width>sublists_rootlayout_width_hor</width>
                                        <include content="sublist_sub_layout" />
                                    </control>
                                </focusedlayout>
                                <itemlayout height="150" width="100" condition="Container.Content(tvshows)">
                                    <control type="group">
                                        <width>sublists_rootlayout_width_hor</width>
                                        <include content="sublist_sub_layout">
                                            <param name="focusborder" value="" />
                                        </include>
                                    </control>
                                </itemlayout>
                                <content limit="5">$INFO[ListItem(1).folderpath]</content>
                                <!-- tvshows lib path <content>videodb://tvshows/titles/$INFO[ListItem(1).dbid]/</content> -->
                                <!-- tvshows xsp lib path <content>videodb://tvshows/titles/? xsp=%7B%22rules%22%3A%7B%22and%22%3A%5B%7B%22field%22%3A%22title%22%2C%22operator%22%3A%22contains%22%2C%22value%22%3A%5B%22$INFO[(1)ListItem.TVShowTitle]%22%5D%7D%5D%7D%2C%22type%22%3A%22tvshows%22%7D</content> -->
                                
                            </control>
                        </control>
                        
                    </itemlayout>
                    
                    
                </control>
            </control>
        </definition>
    </include>
    
    <include name="sublist_sub_layout">
            <control type="image">
                <centertop>50%</centertop>
                <left>10</left>
                <height>92%</height>
                <bordersize>3</bordersize>
                <bordertexture>$PARAM[focusborder]</bordertexture>
                <texture>$INFO[ListItem.Art(poster)]</texture>
                <aspectratio align="left" aligny="center">keep</aspectratio>
            </control>
    </include>
    
    <include name="sublist_root_layout">
        <param name="focusborder" default="colors/white.png" />
        
        <definition>
            <control type="image">
                <bordersize>2</bordersize>
                <texture colordiffuse="cc000000">$PARAM[focusborder]</texture>
            </control>
            <control type="image">
                <centertop>50%</centertop>
                <left>10</left>
                <height>92%</height>
                <bordersize>3</bordersize>
                <bordertexture>$PARAM[focusborder]</bordertexture>
                <texture>$INFO[ListItem.Art(poster)]</texture>
                <aspectratio align="left" aligny="center">keep</aspectratio>
            </control>
            <control type="image">
                <left>145</left>
                <top>10</top>
                <width>32</width>
                <height>32</height>
                <bordersize>3</bordersize>
                <bordertexture colordiffuse="black" border="2">buttons/roundbutton-fo.png</bordertexture>
                <texture>$VAR[ListWatchedIconVar]</texture>
            </control>
            <control type="label">
                <font>font_flag</font>
                <align>left</align>
                <top>10</top>
                <left>220</left>
                <width>2000</width>
                <height>90%</height>
                <aligny>center</aligny>
                <scroll>true</scroll>
                <label>ListItem.CurrentItem :$INFO[ListItem(-1).CurrentItem][CR][CR]Container.CurrentItem : $INFO[Container.CurrentItem]  [CR]$INFO[ListItem.dbid,dbid:  ,][CR]$INFO[ListItem.folderpath,folderpath: ,][CR][CR]$VAR[ListLabelVar]</label>
                <!-- default <label>$VAR[ListLabelVar]</label> -->
                <shadowcolor>text_shadow</shadowcolor>
            </control>
            <control type="label">
                <visible>false</visible>
                <align>left</align>
                <top>55</top>
                <left>230</left>
                <align>right</align>
                <aligny>center</aligny>
                <label>$VAR[ListLabel2Var]</label>
                <shadowcolor>text_shadow</shadowcolor>
            </control>
        </definition>
    </include>
    
    <constant name="sublists_rootlayout_width_hor">600</constant>
    
</includes>



EDIT:
alos nothing relevant in the log, just wondered about
WARNING <general>: Trying to add unsupported control type 29
when i open  MyVideoNav.xml
Skins |  Titan M O D   •   S W A N (WIP)
Reply
#9
Thanks for the detailed response and all the raw XML that I can use to reproduce. I'll work on this issue in parallel with the Player Manager. It might take a long time to land both but I'll check back in when I've made progress.
Reply
#10
(2022-02-15, 00:59)garbear Wrote: Thanks for the detailed response and all the raw XML that I can use to reproduce. I'll work on this issue in parallel with the Player Manager. It might take a long time to land both but I'll check back in when I've made progress.


Hi @garbear thanks again.
And for sure no need o rush.

i got no clue about helping with core implementation ( no good coding background c+, py )

but may consider one more things.


as circular navigation is not always the best idea, and the 'navigation' will be handled by core.
may there is need for an 'identifier' attribute
- something like


root list
xml:

<!--
when 'sublist' attribute or tag true a main container can navigate into sublist , defaults to ?true?
-->
<control type="list" id="510" sublist="true">
or
<control type="list">
<sublist>true<sublist>


sublist
xml:

<!--
still unsure if an id attribute can / will be used for 'sub lists' containers
if so, maybe 'rootid' attribute or tag indicate that it is belonging to 'origin' id = is a sublist

circular tag or attribute : indicate nav behaviour , just if? control id s cannot be used to skin the navigation

-->
<control type="list" id="5101" rootid="510" circular="true">
or
<control type="list">
<rootid>510<rootid>
<circular>false<circular>
<!--
when 'circular' false control.move([root_id],[+|-]) and focus rootlist
when 'circular' true control.move([root_id],[+|-]) and keep focus sublist
-->

- to do : investigate sublist static item content , and best practice for its used ids
<item id"??">
- when found time i create a custom window to test the static containers in estuary, and send the 'git changes'

For a usecase i could think of is ' my viewselect and lock ' dialog.

Currently i workaround with grouplists , which containing staic item containers and button grouplists.
With the new abililty 'lists within lists' it can be skinned easier.



video example: https://streamable.com/5a9hn3


If needed for testing the navigation behaviour , its best to install skin and navigate to

settings -> skinnsettings -> library : on top right 'click' the button called "open viewtype management"
Skins |  Titan M O D   •   S W A N (WIP)
Reply
#11
I have an update. I spent an entire day on this, and the results aren't too promising. I was able to tell Kodi that it's OK for a list-within-list to receive focus (commit below).

However, the problem comes from the way Kodi handles memory. The inside-list skin controls are owned by the list items. That means that whenever list items change or are refreshed, the skin controls are deleted and re-created. Not an issue for static lists, as I currently use in my Player Manager experiment. But any state, like navigation, would be cleared on every refresh.

So I think I'll have to pause working on this. Now, we'll see what the Player Manager demands. If it needs navigation inside inner lists, I'll spend more time on this. Thanks for your posts, they allowed me to get this far.

The work so far: https://github.com/garbear/xbmc/commit/list-within-list
Reply
#12
@garbear - Sorry for the thread necro but I'm wondering if there's any possibility that this code would also impact grouplist behaviour?

I use a lot of grouplists in AH2 and recently I've discovered quite a bit of unexpected behaviour on Nexus in terms of positioning in grouplists when item visibility changes. I'm not sure if it is related to this PR but its the only one I can find that specifically references lists of any type.

I'm trying to put a test case together in Estuary to reproduce. I'm not 100% certain on what skin code is exactly the cause at the moment as I do some fairly funky things with negative values for positioning purposes but there is definitely a change somewhere in grouplist code which quite significantly impacts positioning.

EDIT: Nevermind. I've tracked the issue I'm experiencing with grouplists down to a commit between 02986e91 and eeccfe85 so its not this one. Fairly sure the issue I'm experiencing is due to conditional fade animations in a grouplist being impacted by @sarbes commit which hides 0.1 alpha elements in https://github.com/xbmc/xbmc/pull/21387

Just trying to put together a proper test cast now to add a bug report.
Arctic Fuse - Alpha now available. Support me on Ko-fi.
Reply
#13
Thanks for the detailed bug report. I'll ping @sarbes
Reply

Logout Mark Read Team Forum Stats Members Help
[RFC] Lists inside lists - looking for testers0