22.8.2021, 14:46
(11.7.2021, 15:33)otava5 Napsal(a): @JiRo: měl bych zájem o kompletní úpravu "TV kanály - zobrazení typu zeď" .... případně šla by udělat úprava typu zeď jako widget?
Tak kompletní úpravu "TV kanály - zobrazení typu zeď" jsme už popsal, teď tedy ještě úprava typu zeď jako widget.
K tomu jednu poznámku. Přidávat do widgetů stylu originálního Estuary widget typu zeď není úplně bezproblémové. Jak jste si jiště všimli, v Estuary se aktuální pozice vybrané položky widgetu v zobrazené části pamatuje a při přechodu na předcházející nebo následující widget se použije. To funguje dobře, pokud jsou widgety shodného typu. Pokud tedy mezi standardní widgety Estuary vložíme widget typu zeď, nebude ta zapamatovaná pozic fungovat správně. S tím je prostě se třeba smířit, skin-engin na to, aby mohl řešit i tyto případy korektně, nemá funkce.
Teď tedy k vlastnímu řešení. Uvádím ho tak, jak ho používám ve své modifikaci Estuary Easy, takže některé drobnosti jsou v definičních souborech nadbytečné. Ale protože tohle je určeno už lidem s vyššími znalostmi skinningu, tak si s tím snad poradí.
V první řadě je třeba vytvořit patřičné include widgetu, pojmenované analogicky k názvům ostatních widgetů WidgetWallChannels, které je třeba umístit do vhodného souboru, v tomto případě tedy nejlépe do Includes_Home.xml, kam definice widgetů obecně v Estuary patří.
Kód:
<include name="WidgetWallChannels"> <!-- EASY+ -->
<param name="item_limit">$INFO[Skin.String(widget_limit)]</param>
<param name="icon">$INFO[ListItem.Icon]</param>
<param name="label">$INFO[ListItem.Label]</param>
<param name="label2">$INFO[ListItem.Title]</param>
<definition>
<include content="CategoryLabel">
<param name="label">$PARAM[widget_header]</param>
<param name="list_id">$PARAM[list_id]</param>
<param name="visible">$PARAM[visible]</param>
<param name="title">$PARAM[title]</param>
<param name="title_icon">$PARAM[title_icon]</param>
</include>
<include content="BusyListSpinner">
<param name="list_id" value="$PARAM[list_id]"/>
<param name="posy" value="200"/>
</include>
<control type="panel" id="$PARAM[list_id]">
<left>0</left>
<top>120</top>
<right>0</right>
<height>1000</height>
<!-- <bottom>0</bottom> -->
<include content="WidgetWallCommon">
<param name="list_id" value="$PARAM[list_id]"/>
</include>
<visible>Integer.IsGreater(Container($PARAM[list_id]).NumItems,0) | Container($PARAM[list_id]).IsUpdating</visible>
<itemlayout width="310" height="350">
<control type="group">
<left>70</left>
<control type="image">
<width>319</width>
<height>340</height>
<texture>dialogs/dialog-bg-nobo.png</texture>
<bordertexture border="21">overlays/shadow.png</bordertexture>
<bordersize>20</bordersize>
</control>
<control type="image">
<top>43</top>
<left>38</left>
<width>245</width>
<height>200</height>
<texture fallback="icons/sidemenu/radio.png">$PARAM[icon]</texture>
<aspectratio>keep</aspectratio>
</control>
<control type="label">
<left>42</left>
<top>247</top>
<width>245</width>
<height>70</height>
<wrapmultiline>true</wrapmultiline>
<label>$PARAM[label]</label>
<font>font12</font>
<shadowcolor>text_shadow</shadowcolor>
<align>center</align>
<aligny>top</aligny>
</control>
<control type="label">
<left>42</left>
<top>277</top>
<width>245</width>
<height>65</height>
<label>$PARAM[label2]</label>
<font>font12</font>
<shadowcolor>text_shadow</shadowcolor>
<align>center</align>
<aligny>top</aligny>
</control>
<control type="image">
<left>260</left>
<top>30</top>
<width>32</width>
<height>32</height>
<texture>$VAR[WallWatchedIconVar]</texture>
</control>
</control>
</itemlayout>
<focusedlayout width="310" height="350">
<control type="group">
<depth>DepthContentPopout</depth>
<left>70</left>
<animation type="Focus">
<effect type="zoom" start="100" end="110" time="200" tween="sine" easing="inout" center="240,100" />
</animation>
<animation type="Unfocus">
<effect type="zoom" start="110" end="100" time="200" tween="sine" easing="inout" center="240,100" />
</animation>
<control type="image">
<width>319</width>
<height>340</height>
<texture>dialogs/dialog-bg-nobo.png</texture>
<bordertexture border="21">overlays/shadow.png</bordertexture>
<bordersize>20</bordersize>
</control>
<control type="image">
<width>319</width>
<height>340</height>
<texture colordiffuse="button_focus">colors/grey.png</texture>
<bordersize>20</bordersize>
<include>Animation_FocusTextureFade</include>
</control>
<control type="image">
<top>43</top>
<left>38</left>
<width>245</width>
<height>200</height>
<texture fallback="icons/sidemenu/radio.png">$PARAM[icon]</texture>
<aspectratio>keep</aspectratio>
</control>
<control type="label">
<left>42</left>
<top>247</top>
<width>245</width>
<height>70</height>
<wrapmultiline>true</wrapmultiline>
<label>$PARAM[label]</label>
<font>font12</font>
<shadowcolor>text_shadow</shadowcolor>
<align>center</align>
<scroll>true</scroll>
<aligny>top</aligny>
</control>
<control type="label">
<left>42</left>
<top>277</top>
<width>245</width>
<height>65</height>
<label>$PARAM[label2]</label>
<font>font12</font>
<shadowcolor>text_shadow</shadowcolor>
<align>center</align>
<scroll>true</scroll>
<aligny>top</aligny>
</control>
<control type="image">
<left>260</left>
<top>30</top>
<width>32</width>
<height>32</height>
<texture>$VAR[WallWatchedIconVar]</texture>
</control>
</control>
</focusedlayout>
<content sortby="$PARAM[sortby]" sortorder="$PARAM[sortorder]" target="$PARAM[widget_target]" limit="$PARAM[item_limit]">$PARAM[content_path]</content>
</control>
</definition>
</include>
V druhém kroku je pak třeba výše uvedené include zavolat v patřičném místě a s patřičnými parametry. Tím patřičným místem je zobrazení widgetů pro volbu hlavního menu Televize, tedy s id=12 000. Widget by měl být (s oheldem na výše uvedenou poznámku) umístěn nejlépe jako poslední v řadě widgetů, tedy za widget který zobrazuje Nedávné nahrávky. Volání widgetu a jeho parametry pak mohou vypadat například takto:
Kód:
<include content="WidgetWallChannels" condition="System.HasPVRAddon">
<param name="content_path" value="pvr://channels/tv/*"/>
<param name="widget_header" value="TV kanály"/>
<param name="widget_target" value="videos"/>
<param name="list_id" value="12500"/>
<param name="item_limit" value="$INFO[NumItems]"/>
<param name="label2" value=""/>
</include>