Skin Shortcuts can be used to let the user select from a wide variety of options - library sources and nodes, playlists, add-on nodes and custom options - to use as a widget for a menu item. The script adds properties to the menu item which the skinner can then use to display the widget the user has selected.
By default, Skin Shortcuts provides a large array of available widgets which can be displayed using the list-filling methods of Kodi. You can define any further widgets in your skins overrides.xml file.
<widget label="[label]" icon="[icon]" condition="[Condition]" name="name" type="[type]" path="[path]" target="[target]">[widgetID]</widget>
Property | Optional | Description |
---|---|---|
[label] |
The display name of the widget, to be shown when choosing widgets (can be a localised string) | |
[icon] |
Yes | An image provided by your skin to be used when selecting widgets |
[Condition] |
Yes | Boolean condition that must be true for the background to show in the management dialogs Background Select (evaluated when management dialog is loaded) |
[name] |
Yes | The string that will be assigned to <property name="widgetName"> . If ommitted, this will be set to the value of [label] |
[type] |
Yes | The string that will be assigned to <property name="widgetType"> |
[path] |
Yes | The string that will be assigned to <property name="widgetPath"> |
[target] |
Yes | The string that will be assigned to <property name="widgetTarget"> |
[widgetID] |
The unique string you use to identify this widget |
If you are customising the <widget-groupings />
groupings, these will be displayed in <content>widgets</content>
.
You may wish to define a default widget to one or more menu items. These will be applied when a user first switches to your skin, or when they reset all menu items. This is done in your skins overrides.xml file.
To set a default to a widget you have defined, the labelID
property is used to decide which menu item to set the default to the widgetID
you specify.
<widgetdefault labelID="[labelID]" group="[GroupName]">[widgetID]</widgetdefault>
Property | Optional | Description |
---|---|---|
[labelID] |
The labelID you are setting the default for. (Replace with defaultID="[defaultID]" to set default based on this property instead) | |
[GroupName] |
Yes | The group that the labelID must be in, for example "movies". If omitted, the property will apply to items in the main menu. |
[widgetID] |
A string you use to identify this widget |
To set the default to any other widget, you must directly specify the properties you want added to the menu item with the labelID
you specify.
<widgetdefaultnode labelID="[labelID]" group="[GroupName]" label="[label]" type="[type]" path="[path]" target="[target]">[widget]</widgetdefaultnode>
Property | Optional | Description |
---|---|---|
[labelID] |
The labelID you are setting the default for. (Replace with defaultID="[defaultID]" to set default based on this property instead) | |
[GroupName] |
Yes | The group that the labelID must be in, for example "movies". If omitted, the property will apply to items in the main menu. |
[label] |
Yes | The display name of the widget (can be a localised string) that will be assigned to <property name="widgetName"> |
[type] |
Yes | The string that will be assigned to <property name="widgetType"> |
[path] |
Yes | The string that will be assigned to <property name="widgetPath"> |
[target] |
Yes | The string that will be assigned to <property name="widgetContent"> |
[widget] |
Yes | The string that will be assigned to <property name="widget"> |
Be careful when setting defaults to library nodes - if the user has customised their nodes, the node may not exist on their system. Only skin-provided playlists should be set as defaults.
To let the user select a widget, include button 312 in your Management Dialog.
You can also use the [Just Select](./Just Select.md#just-select-widgets) method to let the user select a widget and save its properties to skin strings.
You may wish to let the user have more than one widget per menu item. In this case, set the window property widgetID
to a unique identifier for your additional widget, then send a click to 312.
All widget properties for the additional widget will be suffixed with .[widgetID]
, where [widgetID]
is the value you set the window property to.
<onclick>SetProperty(widgetID,myWidgetIdentifier)</onclick>
<onclick>SendClick(312)</onclick>
It may be advantageous for your submenu items to have the same widget properties as your main menu items. In which case, include &options=clonewidgets
in your build command. Please note, this will only clone the default widget, not any additional widgets you define.
If you want to clone all the properties from the main menu item, use &options=cloneproperties
Multiple options can be separated with a pipe - | - symbol.
By default, when using gui 312 to select a widget, Skin Shortcuts will show a keyboard dialog after the widget has been selected so that the user can edit the widgetName property.
If your skin doesn't show the widgetName property, you can disable this function by including the following in the skins overrides.xml file:-
<widgetRename>False</widgetRename>
For every widget that is selected, five properties will be added to the menu item. For widgets you have defined, or for defaults set via <widgetdefaultnode />
, they will be the values you have defined.
All other widgets will return a widgetTarget property, which is designed to be used in the target
element of a lists content tag. Other properties returned are:-
widget
- Library.widgetName
- The name of the library nodewidgetType
- Either 'video' or 'audio', or the content type specified in the nodes xml filewidgetPath
- The path to the selected node
widget
- SourcewidgetName
- The name of the library sourcewidgetType
- Either 'video', 'audio' or 'picture'widgetPath
- The path to the selected source
widget
- PlaylistwidgetName
- The name of the playlistwidgetType
- The content type specified by theplaylist
widgetPath
- The path to the playlist
widget
- AddonwidgetName
- The name of the add-on + the selected node (if available)widgetType
- Either 'video', 'audio', 'picture' or 'program', or a best-guess at the type of content providedwidgetPath
- The path to the selected node
The five properties returned are designed to be enough for the skin to display the widget to the user. The widgets that Skin Shortcuts returns by default are intended to be used in the <content />
tag of a list control, with other properties being used to decide what layout to use.
For example, the list used to display movie content may look like this:-
<control type="list">
<include>widgetListPositioning</include>
<visible>StringCompare(Container(9000).ListItem.Property(widgetType),movies)</visible>
<itemlayout>
<control type="image">
<include>widgetPosterLayout</include>
<texture>$INFO[ListItem.Art(poster)]</texture>
</control>
</itemlayout>
<focusedlayout>
<control type="image">
<include>widgetPosterFocusedLayout</include>
<texture>$INFO[ListItem.Art(poster)]</texture>
</control>
</focusedlayout>
<content target="$INFO[Container(9000).ListItem.Property(widgetTarget)]">$INFO[Container(9000).ListItem.Property(widgetPath)]</content>
</control>
When upgrading from the previous Skin Shortcuts implementation (gui button 309), due to the additional properties that the new method returns, there is no upgrade path implemented. This means users will need to reset their widgets.
Skin Shortcuts own widgets groupings provides a 'Default Widgets' node (or the option to install the 'Default Widgets' node) which is powered by the Skin Helper Service, and lets the user choose from widgets provided by the Skin Helper Service itself, the Library Data Provider script, the Extended Info script and the Smart(ish) Widgets script.
To allow the user the chance to install aditional widget providers when browsing the 'Default Widgets', Skin Shortcuts enables the 'Get More...' button of the select dialog and manages installation of the additional widget providers. If you are customising how the widgets presented by Skin Helper Service are displayed, you may wish to remove this link. This is done by including the following in the skins overrides.xml file:-
<defaultwidgetsGetMore>False</defaultwidgetsGetMore>
Additionally, when customising the widget groupings, you can enable the button for any node by including the attribute installWidget with the value True:-
<node label="My widgets" installWidget="True">
Quick links - Readme - Getting Started - Advanced Usage