Zum Inhalt springen
Weitere Sprachen

Automatisch aus Englisch übersetzen. Bilder und Suchbegriffe bleiben Englisch.

Nach deiner Auswahl wird Google Translate geladen.

English original

Named GUI component API

<widget name="status" … /> skins an object already created by the screen’s Python code. The XML name does not tell you its class. Find the assignment, for example self["status"] = Label("Ready"), then look up that Python component here.

from Components.Label import Label
from Components.MenuList import MenuList
self["status"] = Label("Ready")
self["choices"] = MenuList(["One", "Two", "Three"])
<widget name="status" position="24,24" size="400,40"
font="Regular;28" foregroundColor="#00FFFFFF" />
<widget name="choices" position="24,84" size="400,210"
itemHeight="42" enableWrapAround="1" />

Here Label uses eLabel, while MenuList uses eListbox. The string-list content supplies the rows. Adding a renderer-style <convert> chain does not turn a named GUI component into a source.

Component Skinning consequence
Input createWidget() returns eLabel; do not use the native eInput attribute list just because of the Python name.
TunerInfo createWidget() chooses a label or slider according to the constructor mode.
ScrollLabel Creates multiple labels and a scrollbar; its own applySkin distributes attributes.
ServiceListLegacy Adds service fonts, event colours and progress-bar attributes beyond native listbox styling.
ServiceList Modern list configuration and templates; its own contract differs from the legacy component.
Addons such as ScreenButtonsBar Consume layout, button, font and spacing options while building list content.

The catalogue includes 55 core GUI-component classes and helpers, excluding the separately listed renderers. Plugins can add their own classes and applySkin handlers; those are outside this core-source inventory. A screen-local GUI class also needs its own contract. Helper classes without a concrete native widget are retained so inheritance remains understandable.

55 entries

Source snapshot f4135659cb. Current attribute counts exclude legacy names and structural XML names. Deprecated attributes and compatibility migrations have their own reference.

ButtonSequence

lib/python/Components/Addons/ButtonSequence.py, line 15 ↗

Class: Components.Addons.ButtonSequence.ButtonSequence. Bases: GUIAddon.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 4. alignment, orientation, pixmaps, spacing These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.Addons.ButtonSequence.ButtonSequence

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ButtonSequence.__init__(self)

Implementation, line 16 ↗

def __init__(self):
	GUIAddon.__init__(self)
	self.l = eListboxPythonMultiContent()  # noqa: E741
	self.l.setBuildFunc(self.buildEntry)
	self.l.setItemHeight(36)
	self.l.setItemWidth(36)
	self.spacing = applySkinFactor(10)
	self.orientations = {"orHorizontal": eListbox.orHorizontal, "orVertical": eListbox.orVertical}
	self.orientation = eListbox.orHorizontal
	self.alignment = "left"
	self.pixmaps = {}
GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
ButtonSequence.applySkin(self, desktop, parent)

Implementation, line 82 ↗

def applySkin(self, desktop, parent):
	attribs = []
	for (attrib, value) in self.skinAttributes[:]:
		if attrib == "pixmaps":
			self.pixmaps = {k: v for k, v in (item.split(':') for item in value.split(','))}
		elif attrib == "spacing":
			self.spacing = self.parseScale(value)
		elif attrib == "alignment":
			self.alignment = value
		elif attrib == "orientation":
			self.orientation = self.orientations.get(value, self.orientations["orHorizontal"])
			if self.orientation == eListbox.orHorizontal:
				self.instance.setOrientation(eListbox.orVertical)
				self.l.setOrientation(eListbox.orVertical)
			else:
				self.instance.setOrientation(eListbox.orHorizontal)
				self.l.setOrientation(eListbox.orHorizontal)
		else:
			attribs.append((attrib, value))
	self.skinAttributes = attribs
	return GUIAddon.applySkin(self, desktop, parent)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (7) and inherited methods (23)

Inherited methods

ColorButtonsSequence

lib/python/Components/Addons/ColorButtonsSequence.py, line 14 ↗

Class: Components.Addons.ColorButtonsSequence.ColorButtonsSequence. Bases: GUIAddon.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 11. alignment, buttonCornerRadius, font, foregroundColor, layoutStyle, orientation, pixmaps, renderType, spacing, spacingPixmapText, textColors These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.Addons.ColorButtonsSequence.ColorButtonsSequence

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ColorButtonsSequence.__init__(self)

Implementation, line 15 ↗

def __init__(self):
	GUIAddon.__init__(self)
	self.foreColor = None
	self.font = gFont("Regular", 18)
	self.l = eListboxPythonMultiContent()  # noqa: E741
	self.l.setBuildFunc(self.buildEntry)
	self.l.setItemHeight(35)
	self.l.setItemWidth(35)
	self.spacingButtons = applySkinFactor(40)
	self.spacingPixmapText = applySkinFactor(10)
	self.layoutStyle = "fixed"
	self.colorIndicatorStyle = "pixmap"
	self.orientations = {"orHorizontal": eListbox.orHorizontal, "orVertical": eListbox.orVertical}
	self.orientation = eListbox.orHorizontal
	self.renderType = "ImageTextRight"  # Currently supported are ImageTextRight, ImageTextOver and ColorTextOver
	self.alignment = "left"
	self.cornerRadius = 0
	self.pixmaps = {}
	self.colors = {}
	self.textRenderer = Label("")
GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
ColorButtonsSequence.applySkin(self, desktop, parent)

Implementation, line 151 ↗

def applySkin(self, desktop, parent):
	attribs = []
	for (attrib, value) in self.skinAttributes[:]:
		if attrib == "pixmaps":
			self.pixmaps = {k: v for k, v in (item.split(':') for item in value.split(','))}
		elif attrib == "spacing":
			self.spacingButtons = self.parseScale(value)
		elif attrib == "spacingPixmapText":
			self.spacingPixmapText = self.parseScale(value)
		elif attrib == "layoutStyle":
			self.layoutStyle = value
		elif attrib == "alignment":
			self.alignment = value
		elif attrib == "orientation":
			self.orientation = self.orientations.get(value, self.orientations["orHorizontal"])
			if self.orientation == eListbox.orHorizontal:
				self.instance.setOrientation(eListbox.orVertical)
				self.l.setOrientation(eListbox.orVertical)
			else:
				self.instance.setOrientation(eListbox.orHorizontal)
				self.l.setOrientation(eListbox.orHorizontal)
		elif attrib == "font":
			self.font = parseFont(value, parent.scale)
		elif attrib == "foregroundColor":
			self.foreColor = parseColor(value).argb()
		elif attrib == "textColors":
			self.colors = {k: v for k, v in (item.split(':') for item in value.split(','))}
		elif attrib == "buttonCornerRadius":
			self.cornerRadius = self.parseScale(value)
		elif attrib == "renderType":
			self.renderType = value
		else:
			attribs.append((attrib, value))
	self.skinAttributes = attribs
	self.l.setFont(0, self.font)
	return GUIAddon.applySkin(self, desktop, parent)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (9) and inherited methods (23)

Inherited methods

GUIAddon

lib/python/Components/Addons/GUIAddon.py, line 5 ↗

Class: Components.Addons.GUIAddon.GUIAddon. Bases: GUIComponent.

No single GUI_WIDGET declaration. Inspect the construction contract below; this can be a base/helper, composite or non-visual class.

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (5) and inherited methods (22)

Inherited methods

MainMenu

lib/python/Components/Addons/MainMenu.py, line 23 ↗

Class: Components.Addons.MainMenu.MainMenu. Bases: GUIAddon.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 9. backgroundColor, font, foregroundColor, foregroundColorSelected, iconSize, itemHeight, itemWidth, maxWidth, minWidth These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.Addons.MainMenu.MainMenu

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

MainMenu.__init__(self)

Implementation, line 24 ↗

def __init__(self):
	GUIAddon.__init__(self)
	self.itemHeight = 36
	self.itemWidth = 36
	self.l = eListboxPythonMultiContent()  # noqa: E741
	self.l.setBuildFunc(self.buildEntry)
	self.l.setItemHeight(self.itemHeight)
	self.l.setItemWidth(self.itemWidth)
	self.orientation = eListbox.orVertical
	self.font = gFont("Regular", applySkinFactor(22))
	self.iconSize = 0
	self.foregroundColor = 0xffffff
	self.foregroundColorSelected = 0xffffff
	self.backgroundColor = 0x000000
	self.textRenderer = Label("")
	self.longestMenuTextWidth = 0
	self.minWidth = 100
	self.maxWidth = 700
GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
MainMenu.applySkin(self, desktop, parent)

Implementation, line 145 ↗

def applySkin(self, desktop, parent):
	attribs = []
	for (attrib, value) in self.skinAttributes[:]:
		if attrib == "font":
			self.font = parseFont(value, parent.scale)
		elif attrib == "foregroundColor":
			self.foregroundColor = parseColor(value).argb()
		elif attrib == "foregroundColorSelected":
			self.foregroundColorSelected = parseColor(value).argb()
		elif attrib == "backgroundColor":
			self.backgroundColor = parseColor(value).argb()
		elif attrib == "iconSize":
			self.iconSize = self.parseScale(value)
		elif attrib == "minWidth":
			self.minWidth = self.parseScale(value)
		elif attrib == "maxWidth":
			self.maxWidth = self.parseScale(value)
		elif attrib == "itemWidth":
			self.itemWidth = self.parseScale(value)
		elif attrib == "itemHeight":
			self.itemHeight = self.parseScale(value)
		else:
			attribs.append((attrib, value))
	self.skinAttributes = attribs
	self.l.setFont(0, self.font)
	self.l.setItemHeight(self.itemHeight)
	self.l.setItemWidth(self.itemWidth)

	return GUIAddon.applySkin(self, desktop, parent)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (18) and inherited methods (23)

Inherited methods

Pager

lib/python/Components/Addons/Pager.py, line 15 ↗

Class: Components.Addons.Pager.Pager. Bases: GUIAddon.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 17. bubbletextBackgroundColor, bubbletextFont, bubbletextPadding, currentPageStyle, foregroundColor, itemHeight, itemWidth, maxPages, orientation, picD, picL, picPage, picPageCurrent, picR, picU, showIcons, spacing These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.Addons.Pager.Pager

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

Pager.__init__(self)

Implementation, line 16 ↗

def __init__(self):
	GUIAddon.__init__(self)
	self.foreColor = None
	self.l = eListboxPythonMultiContent()  # noqa: E741
	self.l.setBuildFunc(self.buildEntry)
	self.l.setItemHeight(25)  # 25 is the height of the default images. For other images set the height in the skin.
	self.l.setItemWidth(25)  # 25 is the width of the default images. For other images set the width in the skin.
	self.spacing = applySkinFactor(5)
	self.font = gFont("Regular", 16)
	self.picDotPage = LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/dot.png"))
	self.picDotCurPage = LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/dotfull.png"))
	self.picShevronLeft = LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/shevronleft.png"))
	self.picShevronRight = LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/shevronright.png"))
	self.picShevronUp = LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/shevronup.png"))
	self.picShevronDown = LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/shevrondown.png"))
	self.showIcons = "showAll"  # can be "showAll", "onlyFirst", "onlyLast"
	self.orientations = {"orHorizontal": eListbox.orHorizontal, "orVertical": eListbox.orVertical}
	self.orientation = eListbox.orHorizontal
	self.maxPages = 10
	self.currentPageStyle = "bubbletext"  # possible is bubbletext and graphic
	self.textRenderer = Label("")
	self.bubbletextCornerRadius = 12
	self.bubbletextBkColor = 0x02444444
	self.bubbletextPadding = 10
GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
Pager.applySkin(self, desktop, parent)

Implementation, line 250 ↗

def applySkin(self, desktop, parent):
	attribs = []
	for (attrib, value) in self.skinAttributes[:]:
		if attrib == "picPage":
			pic = LoadPixmap(resolveFilename(SCOPE_GUISKIN, value))
			if pic:
				self.picDotPage = pic
		elif attrib == "picPageCurrent":
			pic = LoadPixmap(resolveFilename(SCOPE_GUISKIN, value))
			if pic:
				self.picDotCurPage = pic
		elif attrib == "picL":
			pic = LoadPixmap(resolveFilename(SCOPE_GUISKIN, value))
			if pic:
				self.picShevronLeft = pic
		elif attrib == "picR":
			pic = LoadPixmap(resolveFilename(SCOPE_GUISKIN, value))
			if pic:
				self.picShevronRight = pic
		elif attrib == "picU":
			pic = LoadPixmap(resolveFilename(SCOPE_GUISKIN, value))
			if pic:
				self.picShevronUp = pic
		elif attrib == "picD":
			pic = LoadPixmap(resolveFilename(SCOPE_GUISKIN, value))
			if pic:
				self.picShevronDown = pic
		elif attrib == "itemHeight":
			self.l.setItemHeight(self.parseScale(value))
		elif attrib == "itemWidth":
			self.l.setItemWidth(self.parseScale(value))
		elif attrib == "spacing":
			self.spacing = self.parseScale(value)
		elif attrib == "showIcons":
			self.showIcons = value
		elif attrib == "maxPages":
			self.maxPages = int(value)
		elif attrib == "currentPageStyle":
			self.currentPageStyle = value
		elif attrib == "bubbletextFont":
			self.font = parseFont(value, parent.scale)
		elif attrib == "bubbletextPadding":
			self.bubbletextPadding = self.parseScale(value)
		elif attrib == "foregroundColor":
			self.foreColor = parseColor(value).argb()
		elif attrib == "bubbletextBackgroundColor":
			self.bubbletextBkColor = parseColor(value).argb()
		elif attrib == "orientation":
			self.orientation = self.orientations.get(value, self.orientations["orHorizontal"])
			if self.orientation == eListbox.orHorizontal:
				self.instance.setOrientation(eListbox.orVertical)
				self.l.setOrientation(eListbox.orVertical)
			else:
				self.instance.setOrientation(eListbox.orHorizontal)
				self.l.setOrientation(eListbox.orHorizontal)
		else:
			attribs.append((attrib, value))
	self.skinAttributes = attribs
	self.l.setFont(0, self.font)
	return GUIAddon.applySkin(self, desktop, parent)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (15) and inherited methods (22)

Inherited methods

ScreenButtonsBar

lib/python/Components/Addons/ScreenButtonsBar.py, line 14 ↗

Class: Components.Addons.ScreenButtonsBar.ScreenButtonsBar. Bases: GUIAddon.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 15. actionButtonsPos, alignment, buttonCornerRadius, font, foregroundColor, layoutStyle, orientation, pixmaps, renderType, spacingAction, spacingActionColorGroups, spacingColor, spacingColorTight, spacingPixmapText, textColors These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.Addons.ScreenButtonsBar.ScreenButtonsBar

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ScreenButtonsBar.__init__(self)

Implementation, line 15 ↗

def __init__(self):
	GUIAddon.__init__(self)
	self.foreColor = None
	self.font = gFont("Regular", 18)
	self.l = eListboxPythonMultiContent()  # noqa: E741
	self.l.setBuildFunc(self.buildEntry)
	self.l.setItemHeight(35)
	self.l.setItemWidth(35)
	self.spacingButtons = applySkinFactor(40)
	self.spacingButtonsTight = applySkinFactor(30)
	self.spacingPixmapText = applySkinFactor(10)
	self.layoutStyle = "fixed"
	self.colorIndicatorStyle = "pixmap"
	self.orientations = {"orHorizontal": eListbox.orHorizontal, "orVertical": eListbox.orVertical}
	self.orientation = eListbox.orHorizontal
	self.actionButtonsPosition = "farRight"  # can be left, right, farRight
	self.renderType = "ImageTextRight"  # Currently supported are ImageTextRight, ImageTextOver and ColorTextOver
	self.alignment = "left"
	self.cornerRadius = 0
	self.pixmaps = {}
	self.colors = {}
	self.textRenderer = Label("")
	self.colorButtonSources = {}
	self.actionButtonSources = {}
	self.spacing = applySkinFactor(10)
	self.spacingBetweenActionAndColorGroups = applySkinFactor(60)
GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
ScreenButtonsBar.applySkin(self, desktop, parent)

Implementation, line 207 ↗

def applySkin(self, desktop, parent):
	attribs = []
	for (attrib, value) in self.skinAttributes[:]:
		if attrib == "actionButtonsPos":
			self.actionButtonsPosition = value
		elif attrib == "pixmaps":
			self.pixmaps = {k: v for k, v in (item.split(':') for item in value.split(','))}
		elif attrib == "spacingColor":
			self.spacingButtons = self.parseScale(value)
		elif attrib == "spacingColorTight":
			self.spacingButtonsTight = self.parseScale(value)
		elif attrib == "spacingAction":
			self.spacing = self.parseScale(value)
		elif attrib == "spacingPixmapText":
			self.spacingPixmapText = self.parseScale(value)
		elif attrib == "spacingActionColorGroups":
			self.spacingBetweenActionAndColorGroups = self.parseScale(value)
		elif attrib == "layoutStyle":
			self.layoutStyle = value
		elif attrib == "alignment":
			self.alignment = value
		elif attrib == "orientation":
			self.orientation = self.orientations.get(value, self.orientations["orHorizontal"])
			if self.orientation == eListbox.orHorizontal:
				self.instance.setOrientation(eListbox.orVertical)
				self.l.setOrientation(eListbox.orVertical)
			else:
				self.instance.setOrientation(eListbox.orHorizontal)
				self.l.setOrientation(eListbox.orHorizontal)
		elif attrib == "font":
			self.font = parseFont(value, parent.scale)
		elif attrib == "foregroundColor":
			self.foreColor = parseColor(value).argb()
		elif attrib == "textColors":
			self.colors = {k: v for k, v in (item.split(':') for item in value.split(','))}
		elif attrib == "buttonCornerRadius":
			self.cornerRadius = self.parseScale(value)
		elif attrib == "renderType":
			self.renderType = value
		else:
			attribs.append((attrib, value))
	self.skinAttributes = attribs
	self.l.setFont(0, self.font)
	return GUIAddon.applySkin(self, desktop, parent)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (9) and inherited methods (23)

Inherited methods

ScreenHeader

lib/python/Components/Addons/ScreenHeader.py, line 12 ↗

Class: Components.Addons.ScreenHeader.ScreenHeader. Bases: GUIAddon.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 6. backgroundColor, pathFont, pathForegroundColor, titleFont, titleForegroundColor, titleSingleFont These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.Addons.ScreenHeader.ScreenHeader

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ScreenHeader.__init__(self)

Implementation, line 13 ↗

def __init__(self):
	GUIAddon.__init__(self)
	self.l = eListboxPythonMultiContent()  # noqa: E741
	self.l.setBuildFunc(self.buildEntry)
	self.l.setItemHeight(36)
	self.l.setItemWidth(36)
	self.orientation = eListbox.orHorizontal
	self.titleFont = gFont("Regular", applySkinFactor(22))
	self.titleSingleFont = gFont("Regular", applySkinFactor(24))
	self.pathFont = gFont("Regular", applySkinFactor(16))
	self.titleForeground = 0xffffff
	self.pathForeground = 0xffffff
	self.backgroundColor = 0x000000
GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
ScreenHeader.applySkin(self, desktop, parent)

Implementation, line 111 ↗

def applySkin(self, desktop, parent):
	attribs = []
	for (attrib, value) in self.skinAttributes:
		if attrib == "titleFont":
			self.titleFont = parseFont(value, parent.scale)
		elif attrib == "titleSingleFont":
			self.titleSingleFont = parseFont(value, parent.scale)
		elif attrib == "pathFont":
			self.pathFont = parseFont(value, parent.scale)
		elif attrib == "titleForegroundColor":
			self.titleForeground = parseColor(value).argb()
		elif attrib == "pathForegroundColor":
			self.pathForeground = parseColor(value).argb()
		elif attrib == "backgroundColor":
			self.backgroundColor = parseColor(value).argb()
		else:
			attribs.append((attrib, value))
	self.skinAttributes = attribs
	self.l.setFont(0, self.titleFont)
	self.l.setFont(1, self.pathFont)
	self.l.setFont(2, self.titleSingleFont)
	return GUIAddon.applySkin(self, desktop, parent)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (7) and inherited methods (23)

Inherited methods

ServiceInfoBar

lib/python/Components/Addons/ServiceInfoBar.py, line 28 ↗

Class: Components.Addons.ServiceInfoBar.ServiceInfoBar. Bases: GUIAddon.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 13. alignment, autoresizeMode, elements, font, foregroundColor, orientation, permanent, pixmaps, pixmapsDisabled, separatorLineColor, separatorLineThickness, spacing, textBackColor These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.Addons.ServiceInfoBar.ServiceInfoBar

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ServiceInfoBar.__init__(self)

Implementation, line 29 ↗

def __init__(self):
	GUIAddon.__init__(self)
	self.nav = NavigationInstance.instance
	self.nav.record_event.append(self.gotRecordEvent)
	self.refreshCryptoInfo = eTimer()
	self.refreshCryptoInfo.callback.append(self.checkCrypto_update)
	self.refreshAddon = eTimer()
	self.refreshAddon.callback.append(self.updateAddon)
	self.elements = []
	self.l = eListboxPythonMultiContent()  # noqa: E741
	self.l.setBuildFunc(self.buildEntry)
	self.l.setItemHeight(36)
	self.l.setItemWidth(36)
	self.spacing = applySkinFactor(10)
	self.orientations = {"orHorizontal": eListbox.orHorizontal, "orVertical": eListbox.orVertical}
	self.orientation = eListbox.orHorizontal
	self.alignment = "left"
	self.pixmaps = {}
	self.pixmapsDisabled = {}
	self.separatorLineColor = 0xC0C0C0
	self.foreColor = 0xFFFFFF
	self.textBackColor = None
	self.separatorLineThickness = 0
	self.autoresizeMode = "auto"  # possible values: auto, fixed, condensed
	self.font = gFont("Regular", 18)
	self.__event_tracker = None
	self.currentCrypto = ""
	self.tuner_string = ""
	self.textRenderer = Label("")
	self.permanentIcons = []
	self.records_running = 0
	self.streamServer = eStreamServer.getInstance()
	self.currentServiceSource = None
	self.frontendInfoSource = None
	self.isCryptedDetected = False
	self.tunerColors = parameters.get("FrontendInfoColors", (0x0000FF00, 0x00FFFF00, 0x007F7F7F))  # tuner active, busy, available colors
	self.instanceInfoBarSubserviceSelection = None
GUIAddon.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.source = None
	self.sources = {}
	self.relatedScreen = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
ServiceInfoBar.applySkin(self, desktop, parent)

Implementation, line 370 ↗

def applySkin(self, desktop, parent):
	attribs = []
	for (attrib, value) in self.skinAttributes[:]:
		if attrib == "pixmaps":
			self.pixmaps = {k: v for k, v in (item.split(':') for item in value.split(','))}
		elif attrib == "pixmapsDisabled":
			self.pixmapsDisabled = {k: v for k, v in (item.split(':') for item in value.split(','))}
		elif attrib == "spacing":
			self.spacing = self.parseScale(value)
		elif attrib == "alignment":
			self.alignment = value
		elif attrib == "orientation":
			self.orientation = self.orientations.get(value, self.orientations["orHorizontal"])
			if self.orientation == eListbox.orHorizontal:
				self.instance.setOrientation(eListbox.orVertical)
				self.l.setOrientation(eListbox.orVertical)
			else:
				self.instance.setOrientation(eListbox.orHorizontal)
				self.l.setOrientation(eListbox.orHorizontal)
		elif attrib == "elements":
			self.elements = value.split(",")
		elif attrib == "separatorLineColor":
			self.foreColor = parseColor(value).argb()
		elif attrib == "separatorLineThickness":
			self.separatorLineThickness = self.parseScale(value)
		elif attrib == "autoresizeMode":
			self.autoresizeMode = value
		elif attrib == "font":
			self.font = parseFont(value, parent.scale)
		elif attrib == "foregroundColor":
			self.foreColor = parseColor(value).argb()
		elif attrib == "textBackColor":
			self.textBackColor = parseColor(value).argb()
		elif attrib == "permanent":
			self.permanentIcons = value.split(",")
		else:
			attribs.append((attrib, value))
	self.skinAttributes = attribs
	self.l.setFont(0, self.font)
	return GUIAddon.applySkin(self, desktop, parent)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (14) and inherited methods (22)

Inherited methods

BlinkingPixmap

lib/python/Components/BlinkingPixmap.py, line 5 ↗

Class: Components.BlinkingPixmap.BlinkingPixmap. Bases: BlinkingWidget.

No single GUI_WIDGET declaration. Inspect the construction contract below; this can be a base/helper, composite or non-visual class.

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

BlinkingPixmap.__init__(self)

Implementation, line 6 ↗

def __init__(self):
	BlinkingWidget.__init__(self)
BlinkingWidget.__init__(self)

Implementation, line 38 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.blinking = False
	self.setBlinkTime(500)
	self.timer = eTimer()
	self.timer.callback.append(self.blink)
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (1) and inherited methods (26)

Inherited methods

BlinkingPixmapConditional

lib/python/Components/BlinkingPixmap.py, line 10 ↗

Class: Components.BlinkingPixmap.BlinkingPixmapConditional. Bases: BlinkingWidgetConditional, PixmapConditional.

Native root: ePixmap (18 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Inherited Python attribute handlers
  • Components.Pixmap.Pixmap: offset

Inheritance does not mean every branch calls every base handler. The applySkin implementations below show delegation and precedence.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = ePixmap — Components.Pixmap.Pixmap

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

BlinkingPixmapConditional.__init__(self)

Implementation, line 11 ↗

def __init__(self):
	BlinkingWidgetConditional.__init__(self)
	PixmapConditional.__init__(self)
BlinkingWidgetConditional.__init__(self)

Implementation, line 64 ↗

def __init__(self):
	BlinkingWidget.__init__(self)
	ConditionalWidget.__init__(self)
BlinkingWidget.__init__(self)

Implementation, line 38 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.blinking = False
	self.setBlinkTime(500)
	self.timer = eTimer()
	self.timer.callback.append(self.blink)
PixmapConditional.__init__(self, withTimer=True)

Implementation, line 62 ↗

def __init__(self, withTimer=True):
	ConditionalWidget.__init__(self)
	Pixmap.__init__(self)
ConditionalWidget.__init__(self, withTimer=True)

Implementation, line 6 ↗

def __init__(self, withTimer=True):
	GUIComponent.__init__(self)

	self.setConnect(None)

	if withTimer:
		self.conditionCheckTimer = eTimer()
		self.conditionCheckTimer.callback.append(self.update)
		self.conditionCheckTimer.start(1000)
Pixmap.__init__(self)

Implementation, line 14 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.xOffset = 0
	self.yOffset = 0
	self.pixmap = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
Pixmap.applySkin(self, desktop, screen)

Implementation, line 28 ↗

def applySkin(self, desktop, screen):
	if self.skinAttributes is not None:
		attribs = []
		for (attrib, value) in self.skinAttributes:
			if attrib == "offset":
				self.xOffset, self.yOffset = map(int, value.split(","))
			else:
				attribs.append((attrib, value))
		self.skinAttributes = attribs
	return GUIComponent.applySkin(self, desktop, screen)
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (1) and inherited methods (33)

Inherited methods

Button

lib/python/Components/Button.py, line 7 ↗

Class: Components.Button.Button. Bases: VariableText, GUIComponent.

Native root: eButton (30 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (3) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eButton — Components.Button.Button

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

Button.__init__(self, text='', onClick=None)

Implementation, line 8 ↗

def __init__(self, text="", onClick=None):
	if not onClick:
		onClick = []
	GUIComponent.__init__(self)
	VariableText.__init__(self)
	self.setText(text)
	self.onClick = onClick
VariableText.__init__(self)

Implementation, line 4 ↗

def __init__(self):
	object.__init__(self)
	self.message = ""
	self.instance = None
	self.onChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (9) and inherited methods (23)

Inherited methods

ChoiceList

lib/python/Components/ChoiceList.py, line 75 ↗

Class: Components.ChoiceList.ChoiceList. Bases: MenuList.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (4) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.MenuList.MenuList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ChoiceList.__init__(self, list, selection=0, enableWrapAround=False)

Implementation, line 76 ↗

def __init__(self, list, selection=0, enableWrapAround=False):
	MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
	font = fonts.get("ChoiceList", ("Regular", 20, 25))
	self.l.setFont(0, gFont(font[0], font[1]))
	if parameters.get("ChoiceListNative", 0):
		iconFont = fonts.get("ChoiceListIcons", ("enigma2icons", font[1]))
		self.l.setFont(1, gFont(iconFont[0], iconFont[1]))
	self.l.setItemHeight(font[2])
	self.itemHeight = font[2]
	self.selection = selection
MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

Implementation, line 9 ↗

def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
	GUIComponent.__init__(self)
	self.list = menuList
	self.l = content()
	self.l.setList(self.list)
	self.onSelectionChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (3) and inherited methods (52)

Inherited methods

Clock

lib/python/Components/Clock.py, line 10 ↗

Class: Components.Clock.Clock. Bases: VariableText, GUIComponent.

Created by createWidget(): eLabel. The constructor may choose a widget by mode.

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (3) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

Clock.__init__(self)

Implementation, line 11 ↗

def __init__(self):
	VariableText.__init__(self)
	GUIComponent.__init__(self)
	self.doClock()

	self.clockTimer = eTimer()
	self.clockTimer.callback.append(self.doClock)
VariableText.__init__(self)

Implementation, line 4 ↗

def __init__(self):
	object.__init__(self)
	self.message = ""
	self.instance = None
	self.onChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
Clock.createWidget(self, parent)

Implementation, line 31 ↗

def createWidget(self, parent):
	return eLabel(parent)
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (6) and inherited methods (22)

Inherited methods

ConditionalWidget

lib/python/Components/ConditionalWidget.py, line 5 ↗

Class: Components.ConditionalWidget.ConditionalWidget. Bases: GUIComponent.

No single GUI_WIDGET declaration. Inspect the construction contract below; this can be a base/helper, composite or non-visual class.

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ConditionalWidget.__init__(self, withTimer=True)

Implementation, line 6 ↗

def __init__(self, withTimer=True):
	GUIComponent.__init__(self)

	self.setConnect(None)

	if withTimer:
		self.conditionCheckTimer = eTimer()
		self.conditionCheckTimer.callback.append(self.update)
		self.conditionCheckTimer.start(1000)
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (5) and inherited methods (21)

Inherited methods

BlinkingWidget

lib/python/Components/ConditionalWidget.py, line 37 ↗

Class: Components.ConditionalWidget.BlinkingWidget. Bases: GUIComponent.

No single GUI_WIDGET declaration. Inspect the construction contract below; this can be a base/helper, composite or non-visual class.

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

BlinkingWidget.__init__(self)

Implementation, line 38 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.blinking = False
	self.setBlinkTime(500)
	self.timer = eTimer()
	self.timer.callback.append(self.blink)
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (5) and inherited methods (22)

Inherited methods

BlinkingWidgetConditional

lib/python/Components/ConditionalWidget.py, line 63 ↗

Class: Components.ConditionalWidget.BlinkingWidgetConditional. Bases: BlinkingWidget, ConditionalWidget.

No single GUI_WIDGET declaration. Inspect the construction contract below; this can be a base/helper, composite or non-visual class.

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

BlinkingWidgetConditional.__init__(self)

Implementation, line 64 ↗

def __init__(self):
	BlinkingWidget.__init__(self)
	ConditionalWidget.__init__(self)
BlinkingWidget.__init__(self)

Implementation, line 38 ↗

def __init__(self):
	GUIComponent.__init__(self)
	self.blinking = False
	self.setBlinkTime(500)
	self.timer = eTimer()
	self.timer.callback.append(self.blink)
ConditionalWidget.__init__(self, withTimer=True)

Implementation, line 6 ↗

def __init__(self, withTimer=True):
	GUIComponent.__init__(self)

	self.setConnect(None)

	if withTimer:
		self.conditionCheckTimer = eTimer()
		self.conditionCheckTimer.callback.append(self.update)
		self.conditionCheckTimer.start(1000)
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (2) and inherited methods (28)

Inherited methods

ConfigList

Configuration-entry list. Native list styling and row fonts work with configuration content; editable values and actions are supplied by Python.

lib/python/Components/ConfigList.py, line 18 ↗

Class: Components.ConfigList.ConfigList. Bases: GUIComponent.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (3) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.ConfigList.ConfigList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

ConfigList.__init__(self, list, session=None)

Implementation, line 21 ↗

def __init__(self, list, session=None):
	GUIComponent.__init__(self)
	self.session = session
	self.l = eListboxPythonConfigContent()
	seperation = parameters.get("ConfigListSeperator", 200)
	self.l.setSeperation(seperation)
	height, borderWidth = parameters.get("ConfigListSlider", (17, 0))
	self.l.setSlider(height, borderWidth)
	self.list = list
	self.timer = eTimer()
	self.onSelectionChanged = []
	self.current = None
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (31) and inherited methods (18)

Inherited methods

DiskInfo

lib/python/Components/DiskInfo.py, line 11 ↗

Class: Components.DiskInfo.DiskInfo. Bases: VariableText, GUIComponent.

Native root: eLabel (30 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (3) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eLabel — Components.DiskInfo.DiskInfo

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

Class-level constants and option maps
FREE = 0
USED = 1
SIZE = 2
DiskInfo.__init__(self, path, type, update=True)

Implementation, line 16 ↗

def __init__(self, path, type, update=True):
	GUIComponent.__init__(self)
	VariableText.__init__(self)
	self.type = type
	self.path = path
	if update:
		self.update()
VariableText.__init__(self)

Implementation, line 4 ↗

def __init__(self):
	object.__init__(self)
	self.message = ""
	self.instance = None
	self.onChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (2) and inherited methods (25)

Inherited methods

EPGList

lib/python/Components/EpgList.py, line 51 ↗

Class: Components.EpgList.EPGList. Bases: GUIComponent.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 47. EntryBackgroundColor, EntryBackgroundColorNow, EntryBackgroundColorNowSelected, EntryBackgroundColorPast, EntryBackgroundColorPastSelected, EntryBackgroundColorSelected, EntryBorderColor, EntryFontAlignment, EntryFontGraphical, EntryFontWrap, EntryForegroundColor, EntryForegroundColorNow, EntryForegroundColorNowSelected, EntryForegroundColorPast, EntryForegroundColorPastSelected, EntryForegroundColorSelected, EventBorderWidth, EventFontInfobar, EventFontMulti, EventFontSingle, EventFontVertical, EventNamePadding, MinimumItemHeight, NumberOfRows, PrimeTimeBackgroundColor, PrimeTimeForegroundColor, RecordBackgroundColor, RecordBackgroundColorSelected, RecordForegroundColor, RecordForegroundColorSelected, ServiceBackgroundColor, ServiceBackgroundColorNow, ServiceBorderColor, ServiceBorderWidth, ServiceFontGraphical, ServiceFontInfobar, ServiceForegroundColor, ServiceForegroundColorNow, ServiceNamePadding, ServiceNumberPadding, TimeBackgroundColor, TimeFontVertical, TimeForegroundColor, ZapBackgroundColor, ZapBackgroundColorSelected, ZapForegroundColor, ZapForegroundColorSelected These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.EpgList.EPGList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

EPGList.__init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer=None, time_epoch=120, overjump_empty=False, graphic=False)

Implementation, line 52 ↗

def __init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer=None, time_epoch=120, overjump_empty=False, graphic=False):
	sf = getSkinFactor()
	self.screenwidth = int(1280 * sf)  # important for compatibility to other plugins (e.g. partnerbox)
	if sf == 1.5:
		self.posx, self.posy, self.picx, self.picy, self.gap = skinparameter.get("EpgListIcon", (2, 13, 25, 25, 2))
		self.column_service, self.column_time, self.column_remaining, self.column_gap = skinparameter.get("EpgListMulti", (240, 180, 120, 30))
		self.progress_width, self.progress_height, self.progress_borderwidth = skinparameter.get("EpgListMultiProgressBar", (120, 15, 1))
		self.column_weekday, self.column_datetime = skinparameter.get("EpgListSingle", (75, 225))
	else:
		self.posx, self.posy, self.picx, self.picy, self.gap = skinparameter.get("EpgListIcon", (1, 11, 23, 23, 1))
		self.column_service, self.column_time, self.column_remaining, self.column_gap = skinparameter.get("EpgListMulti", (160, 120, 80, 20))
		self.progress_width, self.progress_height, self.progress_borderwidth = skinparameter.get("EpgListMultiProgressBar", (80, 10, 1))
		self.column_weekday, self.column_datetime = skinparameter.get("EpgListSingle", (50, 150))

	self.cur_event = None
	self.cur_service = None
	self.offs = 0
	self.time_base = None
	self.time_epoch = time_epoch
	self.select_rect = None
	self.event_rect = None
	self.service_rect = None
	self.listSizeWidth = None
	self.currentlyPlaying = None
	self.showPicon = False
	self.showServiceTitle = True
	self.showServiceNumber = False
	self.skinUsingForeColorByTime = False
	self.skinUsingBackColorByTime = False
	# //vertical
	self.days = (_("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun"))
	# //

	self.listRows = 8
	self.listFirstServiceIndex = 0
	self.pageRow = 0
	self.serviceList = ()

	self.overjump_empty = overjump_empty
	self.timer = timer
	self.onSelChanged = []
	if selChangedCB is not None:
		self.onSelChanged.append(selChangedCB)
	GUIComponent.__init__(self)
	self.type = type
	self.graphic = graphic
	self.l = eListboxPythonMultiContent()

	if type == EPG_TYPE_SINGLE or type == EPG_TYPE_ENHANCED or type == EPG_TYPE_INFOBAR:
		self.l.setBuildFunc(self.buildSingleEntry)
	elif type == EPG_TYPE_MULTI:
		self.l.setBuildFunc(self.buildMultiEntry)
	elif type == EPG_TYPE_GRAPH or type == EPG_TYPE_INFOBARGRAPH:
		self.l.setBuildFunc(self.buildGraphEntry)
	elif type == EPG_TYPE_VERTICAL:
		self.l.setBuildFunc(self.buildVerticalEntry)
	else:
		assert (type == EPG_TYPE_SIMILAR)
		self.l.setBuildFunc(self.buildSimilarEntry)
	self.epgcache = eEPGCache.getInstance()

	self.clocks = [LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_add.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_pre.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_prepost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_post.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_add.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_pre.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_zap.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_prepost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_post.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_add.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_pre.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_zaprec.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_prepost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_post.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_disabled.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_fallback.png'))]

	self.selclocks = [LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_add.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selpre.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selprepost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selpost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_add.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selpre.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_zap.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selprepost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selpost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_add.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selpre.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_zaprec.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selprepost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_selpost.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_disabled.png')),
			LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_fallback.png'))]

	self.autotimericon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_autotimer.png'))
	self.icetvicon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_icetv.png'))
	self.primetimeicon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/epgclock_primetime.png'))
	self.catchupicon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_GUISKIN, 'icons/catchup.png'))

	self.nowEvPix = None
	self.nowSelEvPix = None
	self.othEvPix = None
	self.selEvPix = None
	self.othServPix = None
	self.nowServPix = None
	self.recEvPix = None
	self.recSelEvPix = None
	self.recordingEvPix = None
	self.zapEvPix = None
	self.zapSelEvPix = None

	self.borderTopPix = None
	self.borderBottomPix = None
	self.borderLeftPix = None
	self.borderRightPix = None
	self.borderSelectedTopPix = None
	self.borderSelectedLeftPix = None
	self.borderSelectedBottomPix = None
	self.borderSelectedRightPix = None
	self.InfoPix = None
	self.selInfoPix = None
	self.graphicsloaded = False

	self.borderColor = 0xC0C0C0
	self.borderColorService = 0xC0C0C0

	self.foreColor = 0xffffff
	self.foreColorSelected = 0xffffff
	self.backColor = 0x2D455E
	self.backColorSelected = 0xd69600
	self.foreColorService = 0xffffff
	self.backColorService = 0x2D455E
	self.foreColorNow = 0xffffff
	self.foreColorNowSelected = 0xffffff
	self.backColorNow = 0x00825F
	self.backColorNowSelected = 0xd69600
	self.foreColorPast = 0x808080
	self.foreColorPastSelected = 0x808080
	self.backColorPast = 0x2D455E
	self.backColorPastSelected = 0xd69600
	self.foreColorServiceNow = 0xffffff
	self.backColorServiceNow = 0x00825F
	self.foreColorTime = 0xF0A30A
	self.backColorTime = 0x2D455E
	self.foreColorPrimeTime = 0xffffff
	self.backColorPrimeTime = 0x704A05

	self.foreColorRecord = 0xffffff
	self.backColorRecord = 0xd13333
	self.foreColorRecordSelected = 0xffffff
	self.backColorRecordSelected = 0x9e2626
	self.foreColorZap = 0xffffff
	self.backColorZap = 0x669466
	self.foreColorZapSelected = 0xffffff
	self.backColorZapSelected = 0x436143

	self.serviceFontNameGraph = "Regular"
	self.eventFontNameGraph = "Regular"
	self.eventFontNameSingle = "Regular"
	self.eventFontNameMulti = "Regular"
	self.serviceFontNameInfobar = "Regular"
	self.eventFontNameInfobar = "Regular"
	self.eventFontNameVertical = "Regular"
	self.timeFontNameVertical = "Regular"

	self.serviceFontSizeGraph = int(20 * sf)
	self.eventFontSizeGraph = int(18 * sf)
	self.eventFontSizeSingle = int(22 * sf)
	self.eventFontSizeMulti = int(22 * sf)
	self.serviceFontSizeInfobar = int(20 * sf)
	self.eventFontSizeInfobar = int(22 * sf)
	self.eventFontSizeVertical = int(18 * sf)
	self.timeFontSizeVertical = int(20 * sf)

	self.listHeight = None
	self.listWidth = None
	self.serviceBorderWidth = 1
	self.serviceNamePadding = 3
	self.serviceNumberPadding = 9
	self.eventBorderWidth = 1
	self.eventNamePadding = 3
	self.eventNameAlign = 'left'
	self.eventNameWrap = 'yes'
	self.NumberOfRows = None
	self.minimumItemHeight = 0
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
EPGList.applySkin(self, desktop, screen)

Implementation, line 241 ↗

def applySkin(self, desktop, screen):
	if self.skinAttributes is not None:
		attribs = []
		self.skinUsingForeColorByTime = False
		self.skinUsingBackColorByTime = False
		for (attrib, value) in self.skinAttributes:
			if attrib == "ServiceFontGraphical":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.serviceFontNameGraph = font.family
				self.serviceFontSizeGraph = font.pointSize
			elif attrib == "EntryFontGraphical":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.eventFontNameGraph = font.family
				self.eventFontSizeGraph = font.pointSize
			elif attrib == "ServiceFontInfobar":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.serviceFontNameInfobar = font.family
				self.serviceFontSizeInfobar = font.pointSize
			elif attrib == "EventFontInfobar":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.eventFontNameInfobar = font.family
				self.eventFontSizeInfobar = font.pointSize
			elif attrib == "EventFontSingle":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.eventFontNameSingle = font.family
				self.eventFontSizeSingle = font.pointSize
			elif attrib == "EventFontMulti":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.eventFontNameMulti = font.family
				self.eventFontSizeMulti = font.pointSize
			elif attrib == "EventFontVertical":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.eventFontNameVertical = font.family
				self.eventFontSizeVertical = font.pointSize
			elif attrib == "TimeFontVertical":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.timeFontNameVertical = font.family
				self.timeFontSizeVertical = font.pointSize
			elif attrib == "EntryFontAlignment":
				self.eventNameAlign = value
			elif attrib == "EntryFontWrap":
				self.eventNameWrap = value

			elif attrib == "ServiceForegroundColor":
				self.foreColorService = parseColor(value).argb()
			elif attrib == "ServiceForegroundColorNow":
				self.foreColorServiceNow = parseColor(value).argb()
			elif attrib == "ServiceBackgroundColor":
				self.backColorService = parseColor(value).argb()
			elif attrib == "ServiceBackgroundColorNow":
				self.backColorServiceNow = parseColor(value).argb()

			elif attrib == "EntryForegroundColor":
				self.foreColor = parseColor(value).argb()
			elif attrib == "EntryForegroundColorSelected":
				self.foreColorSelected = parseColor(value).argb()
			elif attrib == "EntryBackgroundColor":
				self.backColor = parseColor(value).argb()
			elif attrib == "EntryBackgroundColorSelected":
				self.backColorSelected = parseColor(value).argb()
			elif attrib == "EntryBackgroundColorNow":
				self.backColorNow = parseColor(value).argb()
				self.skinUsingBackColorByTime = True
			elif attrib == "EntryBackgroundColorNowSelected":
				self.backColorNowSelected = parseColor(value).argb()
				self.skinUsingBackColorByTime = True
			elif attrib == "EntryForegroundColorNow":
				self.foreColorNow = parseColor(value).argb()
				self.skinUsingForeColorByTime = True
			elif attrib == "EntryForegroundColorNowSelected":
				self.foreColorNowSelected = parseColor(value).argb()
				self.skinUsingForeColorByTime = True
			elif attrib == "EntryBackgroundColorPast":
				self.backColorPast = parseColor(value).argb()
				self.skinUsingBackColorByTime = True
			elif attrib == "EntryBackgroundColorPastSelected":
				self.backColorPastSelected = parseColor(value).argb()
				self.skinUsingBackColorByTime = True
			elif attrib == "EntryForegroundColorPast":
				self.foreColorPast = parseColor(value).argb()
				self.skinUsingForeColorByTime = True
			elif attrib == "EntryForegroundColorPastSelected":
				self.foreColorPastSelected = parseColor(value).argb()
				self.skinUsingForeColorByTime = True
			elif attrib == "TimeForegroundColor":
				self.foreColorTime = parseColor(value).argb()
			elif attrib == "TimeBackgroundColor":
				self.backColorTime = parseColor(value).argb()
			elif attrib == "PrimeTimeForegroundColor":
				self.foreColorPrimeTime = parseColor(value).argb()
			elif attrib == "PrimeTimeBackgroundColor":
				self.backColorPrimeTime = parseColor(value).argb()

			elif attrib == "ServiceBorderColor":
				self.borderColorService = parseColor(value).argb()
			elif attrib == "ServiceBorderWidth":
				self.serviceBorderWidth = int(value)
			elif attrib == "ServiceNamePadding":
				self.serviceNamePadding = int(value)
			elif attrib == "ServiceNumberPadding":
				self.serviceNumberPadding = int(value)
			elif attrib == "EntryBorderColor":
				self.borderColor = parseColor(value).argb()
			elif attrib == "EventBorderWidth":
				self.eventBorderWidth = int(value)
			elif attrib == "EventNamePadding":
				self.eventNamePadding = int(value)

			elif attrib == "RecordForegroundColor":
				self.foreColorRecord = parseColor(value).argb()
			elif attrib == "RecordForegroundColorSelected":
				self.foreColorRecordSelected = parseColor(value).argb()
			elif attrib == "RecordBackgroundColor":
				self.backColorRecord = parseColor(value).argb()
			elif attrib == "RecordBackgroundColorSelected":
				self.backColorRecordSelected = parseColor(value).argb()
			elif attrib == "ZapForegroundColor":
				self.foreColorZap = parseColor(value).argb()
			elif attrib == "ZapBackgroundColor":
				self.backColorZap = parseColor(value).argb()
			elif attrib == "ZapForegroundColorSelected":
				self.foreColorZapSelected = parseColor(value).argb()
			elif attrib == "ZapBackgroundColorSelected":
				self.backColorZapSelected = parseColor(value).argb()
			elif attrib == "NumberOfRows":
				self.NumberOfRows = int(value)
			elif attrib == "MinimumItemHeight":
				self.minimumItemHeight = max(0, int(value))
			else:
				attribs.append((attrib, value))
		self.skinAttributes = attribs
	rc = GUIComponent.applySkin(self, desktop, screen)
	self.listHeight = self.instance.size().height()
	self.listWidth = self.instance.size().width()
	self.setItemsPerPage()
	self.setFontsize()
	return rc
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (60) and inherited methods (19)

Inherited methods

TimelineText

lib/python/Components/EpgList.py, line 1725 ↗

Class: Components.EpgList.TimelineText. Bases: GUIComponent.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 8. TimelineAlignment, TimelineFont, backgroundColor, borderColor, borderWidth, font, foregroundColor, itemHeight These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.EpgList.TimelineText

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

TimelineText.__init__(self, type=EPG_TYPE_GRAPH, graphic=False)

Implementation, line 1726 ↗

def __init__(self, type=EPG_TYPE_GRAPH, graphic=False):
	GUIComponent.__init__(self)
	self.type = type
	self.graphic = graphic
	self.l = eListboxPythonMultiContent()
	self.l.setSelectionClip(eRect(0, 0, 0, 0))
	self.itemHeight = 30
	self.TlDate = None
	self.TlTime = None
	self.foreColor = 0xffc000
	self.borderColor = 0x000000
	self.backColor = 0x000000
	self.borderWidth = 1
	self.time_base = 0
	self.time_epoch = 0
	self.timelineFontName = "Regular"
	self.timelineFontSize = int(20 * getSkinFactor())
	self.timelineAlign = 'left'
	self.datefmt = ""
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
TimelineText.applySkin(self, desktop, screen)

Implementation, line 1748 ↗

def applySkin(self, desktop, screen):
	if self.skinAttributes is not None:
		attribs = []
		for (attrib, value) in self.skinAttributes:
			if attrib == "foregroundColor":
				self.foreColor = parseColor(value).argb()
			elif attrib == "borderColor":
				self.borderColor = parseColor(value).argb()
			elif attrib == "backgroundColor":
				self.backColor = parseColor(value).argb()
			elif attrib == "font":
				self.l.setFont(0, parseFont(value, ((1, 1), (1, 1))))
			elif attrib == "borderWidth":
				self.borderWidth = int(value)
			elif attrib == "TimelineFont":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.timelineFontName = font.family
				self.timelineFontSize = font.pointSize
			elif attrib == "TimelineAlignment":
				self.timelineAlign = value
			elif attrib == "itemHeight":
				self.itemHeight = int(value)
			else:
				attribs.append((attrib, value))
		self.skinAttributes = attribs
	rc = GUIComponent.applySkin(self, desktop, screen)
	self.listHeight = self.instance.size().height()
	self.listWidth = self.instance.size().width()
	self.l.setItemHeight(self.itemHeight)
	if self.graphic:
		self.TlDate = loadPNG(resolveFilename(SCOPE_GUISKIN, 'epg/TimeLineDate.png'))
		self.TlTime = loadPNG(resolveFilename(SCOPE_GUISKIN, 'epg/TimeLineTime.png'))
	self.setTimeLineFontsize()
	return rc
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (5) and inherited methods (20)

Inherited methods

EPGBouquetList

lib/python/Components/EpgList.py, line 1922 ↗

Class: Components.EpgList.EPGBouquetList. Bases: GUIComponent.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 8. backgroundColor, backgroundColorSelected, borderColor, borderWidth, font, foregroundColor, foregroundColorSelected, itemHeight These can override central meanings.

Effective Python properties (2) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.EpgList.EPGBouquetList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

EPGBouquetList.__init__(self, graphic=False)

Implementation, line 1923 ↗

def __init__(self, graphic=False):
	GUIComponent.__init__(self)
	self.graphic = graphic
	self.l = eListboxPythonMultiContent()
	self.l.setBuildFunc(self.buildEntry)

	self.onSelChanged = []

	self.foreColor = 0xffffff
	self.foreColorSelected = 0xffffff
	self.backColor = 0x2D455E
	self.backColorSelected = 0xd69600

	self.borderColor = 0xC0C0C0
	self.BorderWidth = 1

	self.othPix = None
	self.selPix = None
	self.graphicsloaded = False

	self.bouquetFontName = "Regular"
	self.bouquetFontSize = int(20 * getSkinFactor())

	self.itemHeight = 31
	self.listHeight = None
	self.listWidth = None

	self.bouquetNamePadding = 3
	self.bouquetNameAlign = 'left'
	self.bouquetNameWrap = 'no'
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
EPGBouquetList.applySkin(self, desktop, screen)

Implementation, line 1954 ↗

def applySkin(self, desktop, screen):
	if self.skinAttributes is not None:
		attribs = []
		for (attrib, value) in self.skinAttributes:
			if attrib == "font":
				font = parseFont(value, ((1, 1), (1, 1)))
				self.bouquetFontName = font.family
				self.bouquetFontSize = font.pointSize
			elif attrib == "foregroundColor":
				self.foreColor = parseColor(value).argb()
			elif attrib == "backgroundColor":
				self.backColor = parseColor(value).argb()
			elif attrib == "foregroundColorSelected":
				self.foreColorSelected = parseColor(value).argb()
			elif attrib == "backgroundColorSelected":
				self.backColorSelected = parseColor(value).argb()
			elif attrib == "borderColor":
				self.borderColor = parseColor(value).argb()
			elif attrib == "borderWidth":
				self.BorderWidth = int(value)
			elif attrib == "itemHeight":
				self.itemHeight = int(value)
			else:
				attribs.append((attrib, value))
		self.skinAttributes = attribs
	rc = GUIComponent.applySkin(self, desktop, screen)
	self.listHeight = self.instance.size().height()
	self.listWidth = self.instance.size().width()
	self.l.setItemHeight(self.itemHeight)
	self.setBouquetFontsize()
	return rc
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (18) and inherited methods (19)

Inherited methods

FileListBase

lib/python/Components/FileList.py, line 139 ↗

Class: Components.FileList.FileListBase. Bases: MenuList.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (5) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.MenuList.MenuList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

FileListBase.__init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories='0.0', sortFiles='0.0', directoriesFirst=True, showCurrentDirectory=False)

Implementation, line 140 ↗

def __init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories="0.0", sortFiles="0.0", directoriesFirst=True, showCurrentDirectory=False):
	self.extensionIcons = {}
	for icon in ("lock_off", "lock_on", "link_arrow", "link_error", "storage", "parent", "current", "directory", "file"):
		folder = "icons" if icon.startswith("lock_") else "extensions"
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"{folder}/{icon}.png")
	for icon in set(EXTENSIONS.values()):
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"extensions/{icon}.png")
	if self.extensionIcons["storage"] is None:
		self.extensionIcons["storage"] = self.extensionIcons["directory"]
	if self.extensionIcons["parent"] is None:
		self.extensionIcons["parent"] = self.extensionIcons["directory"]
	if self.extensionIcons["current"] is None:
		self.extensionIcons["current"] = self.extensionIcons["directory"]
	self.fileList = []
	MenuList.__init__(self, self.fileList, content=eListboxPythonMultiContent)
	self.selectedItems = selectedItems
	self.showDirectories = showDirectories
	self.showFiles = showFiles
	self.showMountPoints = showMountPoints
	self.matchingPattern = compile(matchingPattern) if matchingPattern else None  # Example: To match .nfi and .ts files use "^.*\.(nfi|ts)$".
	self.useServiceRef = useServiceRef
	self.inhibitDirs = inhibitDirs or []
	self.inhibitMounts = inhibitMounts or []
	self.isTop = isTop
	self.additionalExtensions = additionalExtensions
	self.sortDirectories = sortDirectories
	self.sortFiles = sortFiles
	self.directoriesFirst = directoriesFirst
	self.showCurrentDirectory = showCurrentDirectory
	self.mountPoints = []
	self.currentDirectory = None
	self.previousDirectory = None
	self.serviceHandler = eServiceCenter.getInstance()
	if self.multiSelect:
		self.setMultiSelectMode()
	else:
		self.setSingleSelectMode()
	self.refreshMountPoints()
	self.changeDir(directory, directory)
MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

Implementation, line 9 ↗

def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
	GUIComponent.__init__(self)
	self.list = menuList
	self.l = content()
	self.l.setList(self.list)
	self.onSelectionChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (47) and inherited methods (51)

Inherited methods

FileList

lib/python/Components/FileList.py, line 584 ↗

Class: Components.FileList.FileList. Bases: FileListBase.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (5) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.MenuList.MenuList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

FileList.__init__(self, directory, showDirectories=True, showFiles=True, showMountpoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirs='0.0', sortFiles='0.0', firstDirs=True, showCurrentDirectory=False, enableWrapAround=False)

Implementation, line 585 ↗

def __init__(self, directory, showDirectories=True, showFiles=True, showMountpoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirs='0.0', sortFiles='0.0', firstDirs=True, showCurrentDirectory=False, enableWrapAround=False):
	self.multiSelect = False
	selectedItems = []
	FileListBase.__init__(self, selectedItems, directory, showMountPoints=showMountpoints, matchingPattern=matchingPattern, showDirectories=showDirectories, showFiles=showFiles, useServiceRef=useServiceRef, inhibitDirs=inhibitDirs, inhibitMounts=inhibitMounts, isTop=isTop, additionalExtensions=additionalExtensions, sortDirectories=sortDirs, sortFiles=sortFiles, directoriesFirst=firstDirs, showCurrentDirectory=showCurrentDirectory)
FileListBase.__init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories='0.0', sortFiles='0.0', directoriesFirst=True, showCurrentDirectory=False)

Implementation, line 140 ↗

def __init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories="0.0", sortFiles="0.0", directoriesFirst=True, showCurrentDirectory=False):
	self.extensionIcons = {}
	for icon in ("lock_off", "lock_on", "link_arrow", "link_error", "storage", "parent", "current", "directory", "file"):
		folder = "icons" if icon.startswith("lock_") else "extensions"
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"{folder}/{icon}.png")
	for icon in set(EXTENSIONS.values()):
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"extensions/{icon}.png")
	if self.extensionIcons["storage"] is None:
		self.extensionIcons["storage"] = self.extensionIcons["directory"]
	if self.extensionIcons["parent"] is None:
		self.extensionIcons["parent"] = self.extensionIcons["directory"]
	if self.extensionIcons["current"] is None:
		self.extensionIcons["current"] = self.extensionIcons["directory"]
	self.fileList = []
	MenuList.__init__(self, self.fileList, content=eListboxPythonMultiContent)
	self.selectedItems = selectedItems
	self.showDirectories = showDirectories
	self.showFiles = showFiles
	self.showMountPoints = showMountPoints
	self.matchingPattern = compile(matchingPattern) if matchingPattern else None  # Example: To match .nfi and .ts files use "^.*\.(nfi|ts)$".
	self.useServiceRef = useServiceRef
	self.inhibitDirs = inhibitDirs or []
	self.inhibitMounts = inhibitMounts or []
	self.isTop = isTop
	self.additionalExtensions = additionalExtensions
	self.sortDirectories = sortDirectories
	self.sortFiles = sortFiles
	self.directoriesFirst = directoriesFirst
	self.showCurrentDirectory = showCurrentDirectory
	self.mountPoints = []
	self.currentDirectory = None
	self.previousDirectory = None
	self.serviceHandler = eServiceCenter.getInstance()
	if self.multiSelect:
		self.setMultiSelectMode()
	else:
		self.setSingleSelectMode()
	self.refreshMountPoints()
	self.changeDir(directory, directory)
MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

Implementation, line 9 ↗

def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
	GUIComponent.__init__(self)
	self.list = menuList
	self.l = content()
	self.l.setList(self.list)
	self.onSelectionChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (1) and inherited methods (97)

Inherited methods

FileListMultiSelect

lib/python/Components/FileList.py, line 591 ↗

Class: Components.FileList.FileListMultiSelect. Bases: FileListBase.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (5) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.MenuList.MenuList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

FileListMultiSelect.__init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountpoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirs='0.0', sortFiles='0.0', firstDirs=True, showCurrentDirectory=False, enableWrapAround=False)

Implementation, line 592 ↗

def __init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountpoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirs='0.0', sortFiles='0.0', firstDirs=True, showCurrentDirectory=False, enableWrapAround=False):
	self.multiSelect = True
	FileListBase.__init__(self, selectedItems, directory, showMountPoints=showMountpoints, matchingPattern=matchingPattern, showDirectories=showDirectories, showFiles=showFiles, useServiceRef=useServiceRef, inhibitDirs=inhibitDirs, inhibitMounts=inhibitMounts, isTop=isTop, additionalExtensions=additionalExtensions, sortDirectories=sortDirs, sortFiles=sortFiles, directoriesFirst=firstDirs, showCurrentDirectory=showCurrentDirectory)
FileListBase.__init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories='0.0', sortFiles='0.0', directoriesFirst=True, showCurrentDirectory=False)

Implementation, line 140 ↗

def __init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories="0.0", sortFiles="0.0", directoriesFirst=True, showCurrentDirectory=False):
	self.extensionIcons = {}
	for icon in ("lock_off", "lock_on", "link_arrow", "link_error", "storage", "parent", "current", "directory", "file"):
		folder = "icons" if icon.startswith("lock_") else "extensions"
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"{folder}/{icon}.png")
	for icon in set(EXTENSIONS.values()):
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"extensions/{icon}.png")
	if self.extensionIcons["storage"] is None:
		self.extensionIcons["storage"] = self.extensionIcons["directory"]
	if self.extensionIcons["parent"] is None:
		self.extensionIcons["parent"] = self.extensionIcons["directory"]
	if self.extensionIcons["current"] is None:
		self.extensionIcons["current"] = self.extensionIcons["directory"]
	self.fileList = []
	MenuList.__init__(self, self.fileList, content=eListboxPythonMultiContent)
	self.selectedItems = selectedItems
	self.showDirectories = showDirectories
	self.showFiles = showFiles
	self.showMountPoints = showMountPoints
	self.matchingPattern = compile(matchingPattern) if matchingPattern else None  # Example: To match .nfi and .ts files use "^.*\.(nfi|ts)$".
	self.useServiceRef = useServiceRef
	self.inhibitDirs = inhibitDirs or []
	self.inhibitMounts = inhibitMounts or []
	self.isTop = isTop
	self.additionalExtensions = additionalExtensions
	self.sortDirectories = sortDirectories
	self.sortFiles = sortFiles
	self.directoriesFirst = directoriesFirst
	self.showCurrentDirectory = showCurrentDirectory
	self.mountPoints = []
	self.currentDirectory = None
	self.previousDirectory = None
	self.serviceHandler = eServiceCenter.getInstance()
	if self.multiSelect:
		self.setMultiSelectMode()
	else:
		self.setSingleSelectMode()
	self.refreshMountPoints()
	self.changeDir(directory, directory)
MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

Implementation, line 9 ↗

def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
	GUIComponent.__init__(self)
	self.list = menuList
	self.l = content()
	self.l.setList(self.list)
	self.onSelectionChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (1) and inherited methods (97)

Inherited methods

MultiFileSelectList

lib/python/Components/FileList.py, line 597 ↗

Class: Components.FileList.MultiFileSelectList. Bases: FileListMultiSelect.

Native root: eListbox (63 current central attribute names).

Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

Effective Python properties (5) and value/range constants

These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

GUI_WIDGET = eListbox — Components.MenuList.MenuList

Arguments, defaults and skin parsing — exact implementation

Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

FileListMultiSelect.__init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountpoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirs='0.0', sortFiles='0.0', firstDirs=True, showCurrentDirectory=False, enableWrapAround=False)

Implementation, line 592 ↗

def __init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountpoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirs='0.0', sortFiles='0.0', firstDirs=True, showCurrentDirectory=False, enableWrapAround=False):
	self.multiSelect = True
	FileListBase.__init__(self, selectedItems, directory, showMountPoints=showMountpoints, matchingPattern=matchingPattern, showDirectories=showDirectories, showFiles=showFiles, useServiceRef=useServiceRef, inhibitDirs=inhibitDirs, inhibitMounts=inhibitMounts, isTop=isTop, additionalExtensions=additionalExtensions, sortDirectories=sortDirs, sortFiles=sortFiles, directoriesFirst=firstDirs, showCurrentDirectory=showCurrentDirectory)
FileListBase.__init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories='0.0', sortFiles='0.0', directoriesFirst=True, showCurrentDirectory=False)

Implementation, line 140 ↗

def __init__(self, selectedItems, directory, showDirectories=True, showFiles=True, showMountPoints=True, matchingPattern=None, useServiceRef=False, inhibitDirs=False, inhibitMounts=False, isTop=False, additionalExtensions=None, sortDirectories="0.0", sortFiles="0.0", directoriesFirst=True, showCurrentDirectory=False):
	self.extensionIcons = {}
	for icon in ("lock_off", "lock_on", "link_arrow", "link_error", "storage", "parent", "current", "directory", "file"):
		folder = "icons" if icon.startswith("lock_") else "extensions"
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"{folder}/{icon}.png")
	for icon in set(EXTENSIONS.values()):
		self.extensionIcons[icon] = loadSkinIcon("FileList", icon, f"extensions/{icon}.png")
	if self.extensionIcons["storage"] is None:
		self.extensionIcons["storage"] = self.extensionIcons["directory"]
	if self.extensionIcons["parent"] is None:
		self.extensionIcons["parent"] = self.extensionIcons["directory"]
	if self.extensionIcons["current"] is None:
		self.extensionIcons["current"] = self.extensionIcons["directory"]
	self.fileList = []
	MenuList.__init__(self, self.fileList, content=eListboxPythonMultiContent)
	self.selectedItems = selectedItems
	self.showDirectories = showDirectories
	self.showFiles = showFiles
	self.showMountPoints = showMountPoints
	self.matchingPattern = compile(matchingPattern) if matchingPattern else None  # Example: To match .nfi and .ts files use "^.*\.(nfi|ts)$".
	self.useServiceRef = useServiceRef
	self.inhibitDirs = inhibitDirs or []
	self.inhibitMounts = inhibitMounts or []
	self.isTop = isTop
	self.additionalExtensions = additionalExtensions
	self.sortDirectories = sortDirectories
	self.sortFiles = sortFiles
	self.directoriesFirst = directoriesFirst
	self.showCurrentDirectory = showCurrentDirectory
	self.mountPoints = []
	self.currentDirectory = None
	self.previousDirectory = None
	self.serviceHandler = eServiceCenter.getInstance()
	if self.multiSelect:
		self.setMultiSelectMode()
	else:
		self.setSingleSelectMode()
	self.refreshMountPoints()
	self.changeDir(directory, directory)
MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

Implementation, line 9 ↗

def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
	GUIComponent.__init__(self)
	self.list = menuList
	self.l = content()
	self.l.setList(self.list)
	self.onSelectionChanged = []
GUIComponent.__init__(self)

Implementation, line 9 ↗

def __init__(self):
	self.onVisibilityChange = []
	self.instance = None
	self.visiblity = False
	self.visible = True
	self.skinAttributes = None
	self.deprecationInfo = None
GUIComponent.applySkin(self, desktop, parent)

Implementation, line 32 ↗

def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
	if not self.visible:
		self.instance.hide()
	if self.skinAttributes is None:
		result = False
	else:
		# // Workaround for values from attributes the not be set.
		#
		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
		#
		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
		# 	self.skinAttributes.sort()
		#
		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
		# To be correct the code could/should be one of, depending on the original intention:
		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
		#
		# //
		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		result = True
	return result
GUIComponent.createWidget(self, parent)

Implementation, line 119 ↗

def createWidget(self, parent):  # Default for argument less widget constructor.
	return self.GUI_WIDGET(parent)
GUIComponent.GUIcreate(self, parent)

Implementation, line 111 ↗

def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
	self.instance = self.createWidget(parent)
	self.postWidgetCreate(self.instance)
Declared methods (0) and inherited methods (97)

    Inherited methods

    GUIComponent

    Base lifecycle for named Python widgets: GUIcreate, applySkin, postWidgetCreate and preWidgetRemove. Instantiate concrete subclasses for actual screen content.

    lib/python/Components/GUIComponent.py, line 6 ↗

    Class: Components.GUIComponent.GUIComponent. Bases: none.

    No single GUI_WIDGET declaration. Inspect the construction contract below; this can be a base/helper, composite or non-visual class.

    Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

    Effective Python properties (2) and value/range constants

    These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

    Arguments, defaults and skin parsing — exact implementation

    Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

    GUIComponent.__init__(self)

    Implementation, line 9 ↗

    def __init__(self):
    	self.onVisibilityChange = []
    	self.instance = None
    	self.visiblity = False
    	self.visible = True
    	self.skinAttributes = None
    	self.deprecationInfo = None
    
    GUIComponent.applySkin(self, desktop, parent)

    Implementation, line 32 ↗

    def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
    	if not self.visible:
    		self.instance.hide()
    	if self.skinAttributes is None:
    		result = False
    	else:
    		# // Workaround for values from attributes the not be set.
    		#
    		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
    		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
    		#
    		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
    		# 	self.skinAttributes.sort()
    		#
    		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
    		# To be correct the code could/should be one of, depending on the original intention:
    		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
    		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
    		#
    		# //
    		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
    		result = True
    	return result
    
    GUIComponent.createWidget(self, parent)

    Implementation, line 119 ↗

    def createWidget(self, parent):  # Default for argument less widget constructor.
    	return self.GUI_WIDGET(parent)
    
    GUIComponent.GUIcreate(self, parent)

    Implementation, line 111 ↗

    def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
    	self.instance = self.createWidget(parent)
    	self.postWidgetCreate(self.instance)
    
    Declared methods (23) and inherited methods (0)

    Inherited methods

      Input

      Python text-input component using VariableText and GUIComponent. createWidget returns eLabel; it is not the native eInput class.

      lib/python/Components/Input.py, line 8 ↗

      Class: Components.Input.Input. Bases: VariableText, GUIComponent, NumericalTextInput.

      Created by createWidget(): eLabel. The constructor may choose a widget by mode.

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Class-level constants and option maps
      TEXT = 0
      PIN = 1
      NUMBER = 2
      Input.__init__(self, text='', maxSize=False, visible_width=False, type=TEXT, currPos=0, allMarked=True)

      Implementation, line 13 ↗

      def __init__(self, text="", maxSize=False, visible_width=False, type=TEXT, currPos=0, allMarked=True):
      	VariableText.__init__(self)
      	GUIComponent.__init__(self)
      	NumericalTextInput.__init__(self, self.right)
      	self.maxSize = maxSize
      	self.visibleWidth = visible_width
      	self.type = type
      	self.currPos = currPos
      	self.allMarked = allMarked and (text != "") and (type != self.PIN)
      	self.offset = 0
      	self.overwrite = maxSize
      	self.setText(text)
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      Input.createWidget(self, parent)

      Implementation, line 29 ↗

      def createWidget(self, parent):
      	if self.allMarked:
      		return eLabel(parent, -2)
      	return eLabel(parent, self.currPos - self.offset)
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (26) and inherited methods (22)

      Inherited methods

      Label

      lib/python/Components/Label.py, line 9 ↗

      Class: Components.Label.Label. Bases: VariableText, GUIComponent.

      Native root: eLabel (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eLabel — Components.Label.Label

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Label.__init__(self, text='')

      Implementation, line 10 ↗

      def __init__(self, text=""):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	self.setText(text)
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (5) and inherited methods (25)

      Inherited methods

      LabelConditional

      lib/python/Components/Label.py, line 33 ↗

      Class: Components.Label.LabelConditional. Bases: Label, ConditionalWidget.

      Native root: eLabel (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eLabel — Components.Label.Label

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      LabelConditional.__init__(self, text='', withTimer=True)

      Implementation, line 34 ↗

      def __init__(self, text="", withTimer=True):
      	ConditionalWidget.__init__(self, withTimer=withTimer)
      	Label.__init__(self, text=text)
      
      Label.__init__(self, text='')

      Implementation, line 10 ↗

      def __init__(self, text=""):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	self.setText(text)
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      ConditionalWidget.__init__(self, withTimer=True)

      Implementation, line 6 ↗

      def __init__(self, withTimer=True):
      	GUIComponent.__init__(self)
      
      	self.setConnect(None)
      
      	if withTimer:
      		self.conditionCheckTimer = eTimer()
      		self.conditionCheckTimer.callback.append(self.update)
      		self.conditionCheckTimer.start(1000)
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (1) and inherited methods (32)

      Inherited methods

      BlinkingLabel

      lib/python/Components/Label.py, line 39 ↗

      Class: Components.Label.BlinkingLabel. Bases: Label, BlinkingWidget.

      Native root: eLabel (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eLabel — Components.Label.Label

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      BlinkingLabel.__init__(self, text='')

      Implementation, line 40 ↗

      def __init__(self, text=""):
      	Label.__init__(self, text=text)
      	BlinkingWidget.__init__(self)
      
      Label.__init__(self, text='')

      Implementation, line 10 ↗

      def __init__(self, text=""):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	self.setText(text)
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      BlinkingWidget.__init__(self)

      Implementation, line 38 ↗

      def __init__(self):
      	GUIComponent.__init__(self)
      	self.blinking = False
      	self.setBlinkTime(500)
      	self.timer = eTimer()
      	self.timer.callback.append(self.blink)
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (1) and inherited methods (33)

      Inherited methods

      BlinkingLabelConditional

      lib/python/Components/Label.py, line 45 ↗

      Class: Components.Label.BlinkingLabelConditional. Bases: BlinkingWidgetConditional, LabelConditional.

      Native root: eLabel (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eLabel — Components.Label.Label

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      BlinkingLabelConditional.__init__(self, text='')

      Implementation, line 46 ↗

      def __init__(self, text=""):
      	LabelConditional.__init__(self, text=text)
      	BlinkingWidgetConditional.__init__(self)
      
      BlinkingWidgetConditional.__init__(self)

      Implementation, line 64 ↗

      def __init__(self):
      	BlinkingWidget.__init__(self)
      	ConditionalWidget.__init__(self)
      
      BlinkingWidget.__init__(self)

      Implementation, line 38 ↗

      def __init__(self):
      	GUIComponent.__init__(self)
      	self.blinking = False
      	self.setBlinkTime(500)
      	self.timer = eTimer()
      	self.timer.callback.append(self.blink)
      
      LabelConditional.__init__(self, text='', withTimer=True)

      Implementation, line 34 ↗

      def __init__(self, text="", withTimer=True):
      	ConditionalWidget.__init__(self, withTimer=withTimer)
      	Label.__init__(self, text=text)
      
      Label.__init__(self, text='')

      Implementation, line 10 ↗

      def __init__(self, text=""):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	self.setText(text)
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      ConditionalWidget.__init__(self, withTimer=True)

      Implementation, line 6 ↗

      def __init__(self, withTimer=True):
      	GUIComponent.__init__(self)
      
      	self.setConnect(None)
      
      	if withTimer:
      		self.conditionCheckTimer = eTimer()
      		self.conditionCheckTimer.callback.append(self.update)
      		self.conditionCheckTimer.start(1000)
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (1) and inherited methods (36)

      Inherited methods

      MultiColorLabel

      lib/python/Components/Label.py, line 51 ↗

      Class: Components.Label.MultiColorLabel. Bases: Label.

      Native root: eLabel (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 4. backgroundColor, backgroundColors, foregroundColor, foregroundColors These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eLabel — Components.Label.Label

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      MultiColorLabel.__init__(self, text='')

      Implementation, line 52 ↗

      def __init__(self, text=""):
      	Label.__init__(self, text)
      	self.foreColors = []
      	self.backColors = []
      
      Label.__init__(self, text='')

      Implementation, line 10 ↗

      def __init__(self, text=""):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	self.setText(text)
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      MultiColorLabel.applySkin(self, desktop, screen)

      Implementation, line 57 ↗

      def applySkin(self, desktop, screen):
      	if self.skinAttributes is not None:
      		foregroundColor = None
      		backgroundColor = None
      		attribs = []
      		for (attrib, value) in self.skinAttributes:
      			if attrib == "foregroundColors":
      				colors = value.split(',')
      				for color in colors:
      					self.foreColors.append(parseColor(color))
      				if not foregroundColor:
      					foregroundColor = colors[0]
      			elif attrib == "backgroundColors":
      				colors = value.split(',')
      				for color in colors:
      					self.backColors.append(parseColor(color))
      				if not backgroundColor:
      					backgroundColor = colors[0]
      			elif attrib == "backgroundColor":
      				backgroundColor = value
      			elif attrib == "foregroundColor":
      				foregroundColor = value
      			else:
      				attribs.append((attrib, value))
      		if foregroundColor:
      			attribs.append(("foregroundColor", foregroundColor))
      		if backgroundColor:
      			attribs.append(("backgroundColor", backgroundColor))
      		self.skinAttributes = attribs
      	return GUIComponent.applySkin(self, desktop, screen)
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (4) and inherited methods (28)

      Inherited methods

      PlayList

      lib/python/Components/MediaPlayer.py, line 19 ↗

      Class: Components.MediaPlayer.PlayList. Bases: MenuList.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (4) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.MenuList.MenuList

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      PlayList.__init__(self, enableWrapAround=False)

      Implementation, line 20 ↗

      def __init__(self, enableWrapAround=False):
      	MenuList.__init__(self, [], enableWrapAround, eListboxPythonMultiContent)
      	font = fonts.get("PlayList", ("Regular", 18, 23))
      	self.l.setFont(0, gFont(font[0], font[1]))
      	self.l.setItemHeight(font[2])
      	self.currPlaying = -1
      	self.oldCurrPlaying = -1
      	self.serviceHandler = eServiceCenter.getInstance()
      	self.state = STATE_NONE
      	self.icons = [
      		LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/ico_mp_play.png")),
      		LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/ico_mp_pause.png")),
      		LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/ico_mp_stop.png")),
      		LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/ico_mp_rewind.png")),
      		LoadPixmap(resolveFilename(SCOPE_GUISKIN, "icons/ico_mp_forward.png")),
      	]
      
      MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

      Implementation, line 9 ↗

      def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
      	GUIComponent.__init__(self)
      	self.list = menuList
      	self.l = content()
      	self.l.setList(self.list)
      	self.onSelectionChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (22) and inherited methods (51)

      Inherited methods

      MenuList

      lib/python/Components/MenuList.py, line 6 ↗

      Class: Components.MenuList.MenuList. Bases: GUIComponent.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (4) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.MenuList.MenuList

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

      Implementation, line 9 ↗

      def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
      	GUIComponent.__init__(self)
      	self.list = menuList
      	self.l = content()
      	self.l.setList(self.list)
      	self.onSelectionChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (34) and inherited methods (20)

      Inherited methods

      MovieList

      lib/python/Components/MovieList.py, line 145 ↗

      Class: Components.MovieList.MovieList. Bases: GUIComponent.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 1. font These can override central meanings.

      Effective Python properties (4) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.MovieList.MovieList

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Class-level constants and option maps
      SORT_ALPHANUMERIC = 1
      SORT_RECORDED = 2
      SHUFFLE = 3
      SORT_ALPHANUMERIC_REVERSE = 4
      SORT_RECORDED_REVERSE = 5
      SORT_ALPHANUMERIC_FLAT = 6
      SORT_ALPHANUMERIC_FLAT_REVERSE = 7
      SORT_GROUPWISE = 8
      SORT_ALPHA_DATE_OLDEST_FIRST = 9
      SORT_ALPHAREV_DATE_NEWEST_FIRST = 10
      HIDE_DESCRIPTION = 1
      SHOW_DESCRIPTION = 2
      MovieList.__init__(self, root, sort_type=None, descr_state=None)

      Implementation, line 162 ↗

      def __init__(self, root, sort_type=None, descr_state=None):
      	GUIComponent.__init__(self)
      	self.list = []
      	self.descr_state = descr_state or self.HIDE_DESCRIPTION
      	self.sort_type = sort_type or self.SORT_GROUPWISE
      	self.firstFileEntry = 0
      	self.parentDirectory = 0
      	self.fontName = "Regular"
      	self.fontSize = 28 if getSkinFactor() == 1.5 else 20
      	self.listHeight = None
      	self.listWidth = None
      	self.reloadDelayTimer = None
      	self.l = eListboxPythonMultiContent()
      	self.tags = set()
      	self.root = None
      	self._playInBackground = None
      	self._playInForeground = None
      	self._char = ""
      	if root is not None:
      		self.reload(root)
      	self.onSelectionChanged = []
      	self.iconPart = []
      	for part in list(range(5)):
      		self.iconPart.append(loadSkinIcon("MovieList", f"part_{part}_4", f"icons/part_{part}_4.png"))
      	self.iconMovieRec = loadSkinIcon("MovieList", "record", "icons/part_new.png")
      	self.iconMoviePlay = loadSkinIcon("MovieList", "play", "icons/movie_play.png")
      	self.iconMoviePlayRec = loadSkinIcon("MovieList", "play_record", "icons/movie_play_rec.png")
      	self.iconUnwatched = loadSkinIcon("MovieList", "unwatched", "icons/part_unwatched.png")
      	self.iconFolder = loadSkinIcon("MovieList", "folder", "icons/folder.png")
      	self.iconTrash = loadSkinIcon("MovieList", "trash", "icons/trashcan.png")
      	self.runningTimers = {}
      	self.updateRecordings()
      	self.updatePlayPosCache()
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      MovieList.applySkin(self, desktop, parent)

      Implementation, line 196 ↗

      def applySkin(self, desktop, parent):
      	if self.skinAttributes is not None:
      		attribs = []
      		for (attrib, value) in self.skinAttributes:
      			if attrib == "font":
      				font = parseFont(value, ((1, 1), (1, 1)))
      				self.fontName = font.family
      				self.fontSize = font.pointSize
      			else:
      				attribs.append((attrib, value))
      		self.skinAttributes = attribs
      		self.setFontsize()
      	rc = GUIComponent.applySkin(self, desktop, parent)
      	self.listHeight = self.instance.size().height()
      	self.listWidth = self.instance.size().width()
      	self.setItemsPerPage()
      	return rc
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (49) and inherited methods (19)

      Inherited methods

      PerServiceDisplay

      Mixin for building components which display something which changes on navigation events, for example "service name"

      lib/python/Components/PerServiceDisplay.py, line 63 ↗

      Class: Components.PerServiceDisplay.PerServiceDisplay. Bases: PerServiceBase, VariableText, GUIComponent.

      Native root: eLabel (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eLabel — Components.PerServiceDisplay.PerServiceDisplay

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      PerServiceDisplay.__init__(self, navcore, eventmap)

      Implementation, line 66 ↗

      def __init__(self, navcore, eventmap):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	PerServiceBase.__init__(self, navcore, eventmap)
      
      PerServiceBase.__init__(self, navcore, eventmap, with_event=False)

      Implementation, line 21 ↗

      def __init__(self, navcore, eventmap, with_event=False):
      	self.navcore = navcore
      	self.eventmap = eventmap  #NOSONAR
      	self.poll_timer = eTimer()
      	self.with_event = with_event
      
      	self.poll_timer.callback.append(self.poll)
      
      	EventMap = PerServiceBase.EventMap
      	if not len(EventMap):
      		self.navcore.event.append(PerServiceBase.event)
      
      	EventMap = EventMap.setdefault
      	for x in eventmap.items():
      		EventMap(x[0], []).append((with_event, x[1]))
      
      	# start with stopped state, so simulate that
      	evEndEntry = eventmap.get(iPlayableService.evEnd)
      	if evEndEntry:
      		if with_event:
      			evEndEntry(iPlayableService.evEnd)
      		else:
      			evEndEntry()
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (2) and inherited methods (28)

      Inherited methods

      PerServiceDisplayProgress

      lib/python/Components/PerServiceDisplay.py, line 78 ↗

      Class: Components.PerServiceDisplay.PerServiceDisplayProgress. Bases: PerServiceBase, VariableValue, GUIComponent.

      Native root: eSlider (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eSlider — Components.PerServiceDisplay.PerServiceDisplayProgress

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      PerServiceDisplayProgress.__init__(self, navcore, eventmap)

      Implementation, line 79 ↗

      def __init__(self, navcore, eventmap):
      	GUIComponent.__init__(self)
      	VariableValue.__init__(self)
      	PerServiceBase.__init__(self, navcore, eventmap)
      	self.eventmap = eventmap
      	self.navcore = navcore
      	self.navcore.event.append(self.event)
      
      	# start with stopped state, so simulate that
      	self.event(iPlayableService.evEnd)
      
      PerServiceBase.__init__(self, navcore, eventmap, with_event=False)

      Implementation, line 21 ↗

      def __init__(self, navcore, eventmap, with_event=False):
      	self.navcore = navcore
      	self.eventmap = eventmap  #NOSONAR
      	self.poll_timer = eTimer()
      	self.with_event = with_event
      
      	self.poll_timer.callback.append(self.poll)
      
      	EventMap = PerServiceBase.EventMap
      	if not len(EventMap):
      		self.navcore.event.append(PerServiceBase.event)
      
      	EventMap = EventMap.setdefault
      	for x in eventmap.items():
      		EventMap(x[0], []).append((with_event, x[1]))
      
      	# start with stopped state, so simulate that
      	evEndEntry = eventmap.get(iPlayableService.evEnd)
      	if evEndEntry:
      		if with_event:
      			evEndEntry(iPlayableService.evEnd)
      		else:
      			evEndEntry()
      
      VariableValue.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	self.__value = 0
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (2) and inherited methods (27)

      Inherited methods

      Pixmap

      lib/python/Components/Pixmap.py, line 11 ↗

      Class: Components.Pixmap.Pixmap. Bases: GUIComponent.

      Native root: ePixmap (18 current central attribute names).

      Names explicitly handled in this class's applySkin: 1. offset These can override central meanings.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = ePixmap — Components.Pixmap.Pixmap

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Pixmap.__init__(self)

      Implementation, line 14 ↗

      def __init__(self):
      	GUIComponent.__init__(self)
      	self.xOffset = 0
      	self.yOffset = 0
      	self.pixmap = None
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      Pixmap.applySkin(self, desktop, screen)

      Implementation, line 28 ↗

      def applySkin(self, desktop, screen):
      	if self.skinAttributes is not None:
      		attribs = []
      		for (attrib, value) in self.skinAttributes:
      			if attrib == "offset":
      				self.xOffset, self.yOffset = map(int, value.split(","))
      			else:
      				attribs.append((attrib, value))
      		self.skinAttributes = attribs
      	return GUIComponent.applySkin(self, desktop, screen)
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (9) and inherited methods (18)

      Inherited methods

      PixmapConditional

      lib/python/Components/Pixmap.py, line 61 ↗

      Class: Components.Pixmap.PixmapConditional. Bases: ConditionalWidget, Pixmap.

      Native root: ePixmap (18 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Inherited Python attribute handlers
      • Components.Pixmap.Pixmap: offset

      Inheritance does not mean every branch calls every base handler. The applySkin implementations below show delegation and precedence.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = ePixmap — Components.Pixmap.Pixmap

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      PixmapConditional.__init__(self, withTimer=True)

      Implementation, line 62 ↗

      def __init__(self, withTimer=True):
      	ConditionalWidget.__init__(self)
      	Pixmap.__init__(self)
      
      ConditionalWidget.__init__(self, withTimer=True)

      Implementation, line 6 ↗

      def __init__(self, withTimer=True):
      	GUIComponent.__init__(self)
      
      	self.setConnect(None)
      
      	if withTimer:
      		self.conditionCheckTimer = eTimer()
      		self.conditionCheckTimer.callback.append(self.update)
      		self.conditionCheckTimer.start(1000)
      
      Pixmap.__init__(self)

      Implementation, line 14 ↗

      def __init__(self):
      	GUIComponent.__init__(self)
      	self.xOffset = 0
      	self.yOffset = 0
      	self.pixmap = None
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      Pixmap.applySkin(self, desktop, screen)

      Implementation, line 28 ↗

      def applySkin(self, desktop, screen):
      	if self.skinAttributes is not None:
      		attribs = []
      		for (attrib, value) in self.skinAttributes:
      			if attrib == "offset":
      				self.xOffset, self.yOffset = map(int, value.split(","))
      			else:
      				attribs.append((attrib, value))
      		self.skinAttributes = attribs
      	return GUIComponent.applySkin(self, desktop, screen)
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (1) and inherited methods (29)

      Inherited methods

      MovingPixmap

      lib/python/Components/Pixmap.py, line 67 ↗

      Class: Components.Pixmap.MovingPixmap. Bases: Pixmap.

      Native root: ePixmap (18 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Inherited Python attribute handlers
      • Components.Pixmap.Pixmap: offset

      Inheritance does not mean every branch calls every base handler. The applySkin implementations below show delegation and precedence.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = ePixmap — Components.Pixmap.Pixmap

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      MovingPixmap.__init__(self)

      Implementation, line 68 ↗

      def __init__(self):
      	Pixmap.__init__(self)
      	self.moving = False
      	self.x = 0  # Get actual value after skin applied.
      	self.y = 0  # Get actual value after skin applied.
      	self.clearPath()
      	self.moveTimer = eTimer()
      	self.moveTimer.callback.append(self.doMove)
      	self.callback = None
      
      Pixmap.__init__(self)

      Implementation, line 14 ↗

      def __init__(self):
      	GUIComponent.__init__(self)
      	self.xOffset = 0
      	self.yOffset = 0
      	self.pixmap = None
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      MovingPixmap.applySkin(self, desktop, screen)

      Implementation, line 78 ↗

      def applySkin(self, desktop, screen):
      	ret = Pixmap.applySkin(self, desktop, screen)
      	self.x, self.y = self.getPosition()
      	return ret
      
      Pixmap.applySkin(self, desktop, screen)

      Implementation, line 28 ↗

      def applySkin(self, desktop, screen):
      	if self.skinAttributes is not None:
      		attribs = []
      		for (attrib, value) in self.skinAttributes:
      			if attrib == "offset":
      				self.xOffset, self.yOffset = map(int, value.split(","))
      			else:
      				attribs.append((attrib, value))
      		self.skinAttributes = attribs
      	return GUIComponent.applySkin(self, desktop, screen)
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (8) and inherited methods (25)

      Inherited methods

      MultiPixmap

      lib/python/Components/Pixmap.py, line 145 ↗

      Class: Components.Pixmap.MultiPixmap. Bases: Pixmap.

      Native root: ePixmap (18 current central attribute names).

      Names explicitly handled in this class's applySkin: 2. pixmap, pixmaps These can override central meanings.

      Inherited Python attribute handlers
      • Components.Pixmap.Pixmap: offset

      Inheritance does not mean every branch calls every base handler. The applySkin implementations below show delegation and precedence.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = ePixmap — Components.Pixmap.Pixmap

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      MultiPixmap.__init__(self)

      Implementation, line 146 ↗

      def __init__(self):
      	Pixmap.__init__(self)
      	self.pixmaps = []
      	self.iconGlyphs = None
      	self.iconColors = []
      	self.iconFont = None
      
      Pixmap.__init__(self)

      Implementation, line 14 ↗

      def __init__(self):
      	GUIComponent.__init__(self)
      	self.xOffset = 0
      	self.yOffset = 0
      	self.pixmap = None
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      MultiPixmap.applySkin(self, desktop, screen)

      Implementation, line 169 ↗

      def applySkin(self, desktop, screen):
      	if self.skinAttributes is not None:
      		attributes = dict(self.skinAttributes)
      		self.skinAttributes = [(name, value) for name, value in self.skinAttributes if name not in ("iconFont", "iconGlyphs", "iconColors")]
      		if self.iconGlyphs is not None:
      			self.skinAttributes = [(name, value) for name, value in self.skinAttributes if name not in ("pixmap", "pixmaps", "scale", "font")]
      			self.skinAttributes.append(("font", self.iconFont))
      			if "iconColors" in attributes:
      				self.iconColors = [parseColor(value.strip()) for value in attributes["iconColors"].split(",") if value.strip()]
      				if len(self.iconColors) != len(self.iconGlyphs):
      					print("[MultiPixmap] iconColors must provide one color per glyph; using the widget foreground color")
      					self.iconColors = []
      			return GUIComponent.applySkin(self, desktop, screen)
      	if self.skinAttributes is not None:
      		myScreen, path = domScreens.get(screen.__class__.__name__, (None, None))
      		skinPathPrefix = getattr(screen, "skin_path", path)
      		pixmap = None
      		attribs = []
      		for (attrib, value) in self.skinAttributes:
      			if attrib == "pixmaps":
      				pixmaps = value.split(",")
      				for pix in pixmaps:
      					if fileExists(resolveFilename(SCOPE_GUISKIN, pix, path_prefix=skinPathPrefix)):
      						pngfile = resolveFilename(SCOPE_GUISKIN, pix, path_prefix=skinPathPrefix)
      					elif fileExists(resolveFilename(SCOPE_LCDSKIN, pix, path_prefix=skinPathPrefix)):
      						pngfile = resolveFilename(SCOPE_LCDSKIN, pix, path_prefix=skinPathPrefix)
      					else:
      						pngfile = ""
      					if pngfile and isfile(pngfile):
      						self.pixmaps.append(parsePixmap(pngfile, desktop))
      				if not pixmap:
      					if fileExists(resolveFilename(SCOPE_GUISKIN, pixmaps[0], path_prefix=skinPathPrefix)):
      						pixmap = resolveFilename(SCOPE_GUISKIN, pixmaps[0], path_prefix=skinPathPrefix)
      					elif fileExists(resolveFilename(SCOPE_LCDSKIN, pixmaps[0], path_prefix=skinPathPrefix)):
      						pixmap = resolveFilename(SCOPE_LCDSKIN, pixmaps[0], path_prefix=skinPathPrefix)
      			elif attrib == "pixmap":
      				if fileExists(resolveFilename(SCOPE_GUISKIN, value, path_prefix=skinPathPrefix)):
      					pixmap = resolveFilename(SCOPE_GUISKIN, value, path_prefix=skinPathPrefix)
      				elif fileExists(resolveFilename(SCOPE_LCDSKIN, value, path_prefix=skinPathPrefix)):
      					pixmap = resolveFilename(SCOPE_LCDSKIN, value, path_prefix=skinPathPrefix)
      			else:
      				attribs.append((attrib, value))
      		if pixmap:
      			attribs.append(("pixmap", pixmap))
      		self.skinAttributes = attribs
      	return GUIComponent.applySkin(self, desktop, screen)
      
      Pixmap.applySkin(self, desktop, screen)

      Implementation, line 28 ↗

      def applySkin(self, desktop, screen):
      	if self.skinAttributes is not None:
      		attribs = []
      		for (attrib, value) in self.skinAttributes:
      			if attrib == "offset":
      				self.xOffset, self.yOffset = map(int, value.split(","))
      			else:
      				attribs.append((attrib, value))
      		self.skinAttributes = attribs
      	return GUIComponent.applySkin(self, desktop, screen)
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      MultiPixmap.createWidget(self, parent)

      Implementation, line 153 ↗

      def createWidget(self, parent):
      	# Widget-local opt-in: embedded plugin skins can still use their PNGs.
      	attributes = dict(self.skinAttributes or ())
      	self.iconGlyphs = None
      	self.iconColors = []
      	self.iconFont = attributes.get("iconFont")
      	if attributes.get("iconFont") and attributes.get("iconGlyphs"):
      		try:
      			codepoints = [int(value.strip(), 0) for value in attributes["iconGlyphs"].split(",")]
      			if any(not 0 < value <= 0x10FFFF or 0xD800 <= value <= 0xDFFF for value in codepoints):
      				raise ValueError("Invalid Unicode codepoint")
      			self.iconGlyphs = [chr(value) for value in codepoints]
      		except ValueError as error:
      			print(f"[MultiPixmap] Invalid iconGlyphs, using pixmaps: {error}")
      	return eLabel(parent) if self.iconGlyphs is not None else Pixmap.createWidget(self, parent)
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (4) and inherited methods (24)

      Inherited methods

      PluginList

      lib/python/Components/PluginList.py, line 86 ↗

      Class: Components.PluginList.PluginList. Bases: MenuList.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (4) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.MenuList.MenuList

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      PluginList.__init__(self, pluginList, enableWrapAround=True)

      Implementation, line 87 ↗

      def __init__(self, pluginList, enableWrapAround=True):
      	MenuList.__init__(self, pluginList, enableWrapAround, eListboxPythonMultiContent)
      	font = fonts.get("PluginBrowser0", ("Regular", 20, 50))
      	self.l.setFont(0, gFont(font[0], font[1]))
      	self.l.setItemHeight(font[2])
      	font = fonts.get("PluginBrowser1", ("Regular", 14))
      	self.l.setFont(1, gFont(font[0], font[1]))
      
      MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

      Implementation, line 9 ↗

      def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
      	GUIComponent.__init__(self)
      	self.list = menuList
      	self.l = content()
      	self.l.setList(self.list)
      	self.onSelectionChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (1) and inherited methods (53)

      Inherited methods

      ProgressBar

      lib/python/Components/ProgressBar.py, line 6 ↗

      Class: Components.ProgressBar.ProgressBar. Bases: VariableValue, GUIComponent.

      Native root: eSlider (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (4) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eSlider — Components.ProgressBar.ProgressBar

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      ProgressBar.__init__(self)

      Implementation, line 8 ↗

      def __init__(self):
      	GUIComponent.__init__(self)
      	VariableValue.__init__(self)
      	self.__range = (0, 100)
      
      VariableValue.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	self.__value = 0
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (4) and inherited methods (23)

      Inherited methods

      QRCode

      lib/python/Components/QRCode.py, line 7 ↗

      Class: Components.QRCode.QRCode. Bases: VariableText, GUIComponent.

      Native root: eQRCode (19 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eQRCode — Components.QRCode.QRCode

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      QRCode.__init__(self, text='')

      Implementation, line 10 ↗

      def __init__(self, text=""):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	self.setText(text)
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (1) and inherited methods (25)

      Inherited methods

      ScrollLabel

      Composite scrollable text component. GUIcreate builds labels and a slider; applySkin distributes options between them. A single GUI_WIDGET/native-attribute union would be misleading.

      lib/python/Components/ScrollLabel.py, line 7 ↗

      Class: Components.ScrollLabel.ScrollLabel. Bases: GUIComponent.

      No single GUI_WIDGET declaration. Inspect the construction contract below; this can be a base/helper, composite or non-visual class.

      Names explicitly handled in this class's applySkin: 26. backgroundColor, colPosition, colors, colposition, divideChar, dividechar, leftColAlign, leftColumnAlignment, noWrap, rightColAlign, rightColumnAlignment, scrollbarBorderWidth, scrollbarGradient, scrollbarMode, scrollbarOffset, scrollbarRadius, scrollbarScroll, scrollbarWidth, split, splitCharacter, splitMargin, splitPosition, splitSeparated, splitTrim, transparent, wrap These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      ScrollLabel.__init__(self, text='')

      Implementation, line 8 ↗

      def __init__(self, text=""):
      	GUIComponent.__init__(self)
      	self.msgText = text
      	self.instance = None
      	self.leftText = None
      	self.rightText = None
      	self.slider = None
      	self.split = False
      	self.splitCharacter = "|"
      	self.splitTrim = False
      	self.lineWrap = True
      	self.lineHeight = 0
      	self.pageWidth = 0
      	self.pageHeight = 0
      	self.totalTextHeight = 0
      	self.currentPosition = 0
      	self.leftColX = 0
      	self.rightColX = 0
      	self.colors = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      ScrollLabel.applySkin(self, desktop, parent)

      Implementation, line 41 ↗

      def applySkin(self, desktop, parent):
      	splitMargin = 0
      	splitPosition = 0
      	splitSeparated = False
      	sliderBorderWidth = scrollLabelStyle.get("scrollbarBorderWidth", eListbox.DefaultScrollBarBorderWidth)
      	sliderMode = scrollLabelStyle.get("scrollbarMode", eListbox.showOnDemand)
      	sliderScroll = scrollLabelStyle.get("scrollbarScroll", eListbox.DefaultScrollBarScroll)
      	sliderOffset = scrollLabelStyle.get("scrollbarOffset", eListbox.DefaultScrollBarOffset)
      	sliderWidth = scrollLabelStyle.get("scrollbarWidth", eListbox.DefaultScrollBarWidth)
      	scrollbarRadius = scrollLabelStyle.get("scrollbarRadius", None)
      	scrollbarGradient = None
      	lineWrap = True
      	if self.skinAttributes:
      		sliderProperties = (
      			"scrollbarBorderColor",
      			"scrollbarBorderWidth",
      			"scrollbarBackgroundColor",
      			"scrollbarForegroundColor",
      			"scrollbarBackgroundPixmap",
      			"scrollbarForegroundPixmap"
      		)
      		widgetAttributes = []
      		leftLabelAttributes = [("transparent", "1")]
      		rightLabelAttributes = [("transparent", "1")]
      		sliderAttributes = [("transparent", "1")]
      		leftAlign = "left"
      		rightAlign = "left"
      		for attribute, value in self.skinAttributes:
      			if attribute in sliderProperties:
      				sliderAttributes.append((attribute, value))
      			else:
      				if attribute == "backgroundColor":
      					widgetAttributes.append((attribute, value))
      					if "scrollbarBackgroundColor" not in [x[0] for x in sliderAttributes]:
      						sliderAttributes.append(("scrollbarBackgroundColor", value))
      					continue
      				if attribute == "transparent":
      					widgetAttributes.append((attribute, value))
      					continue
      				if attribute in ("leftColumnAlignment", "leftColAlign"):
      					leftAlign = value
      				elif attribute in ("rightColumnAlignment", "rightColAlign"):
      					rightAlign = value
      					self.split = True
      				elif attribute == "split":
      					self.split = parseBoolean("split", value)
      				elif attribute in ("splitCharacter", "divideChar", "dividechar"):
      					self.splitCharacter = value
      					self.split = True
      				elif attribute == "splitMargin":
      					splitMargin = parseInteger(value)
      				elif attribute in ("splitPosition", "colPosition", "colposition"):
      					splitPosition = parseInteger(value)
      					self.split = True
      				elif attribute == "splitSeparated":
      					splitSeparated = parseBoolean("splitSeparated", value)
      					self.split = True
      				elif attribute == "splitTrim":
      					self.splitTrim = parseBoolean("splitTrim", value)
      				elif attribute == "scrollbarBorderWidth":
      					sliderBorderWidth = parseInteger(value, eListbox.DefaultScrollBarBorderWidth)
      				elif attribute == "scrollbarMode":
      					sliderMode = parseScrollbarMode(value)
      				elif attribute == "scrollbarScroll":
      					sliderScroll = parseScrollbarScroll(value)
      				elif attribute == "scrollbarOffset":
      					sliderOffset = parseInteger(value, eListbox.DefaultScrollBarOffset)
      				elif attribute == "scrollbarWidth":
      					sliderWidth = parseInteger(value, eListbox.DefaultScrollBarWidth)
      				elif attribute == "scrollbarRadius":
      					scrollbarRadius = parseRadius(value)
      				elif attribute == "scrollbarGradient":
      					scrollbarGradient = parseGradient(value)
      				elif attribute == "colors":
      					self.colors = [parseColor(x.strip()) if x else None for x in value.split(",")]
      				else:
      					leftLabelAttributes.append((attribute, value))
      					rightLabelAttributes.append((attribute, value))
      					if attribute == "noWrap" and value in ("1", "enable", "enabled", "on", "true", "yes"):
      						lineWrap = False
      					if attribute == "wrap" and value not in ("1", "enable", "enabled", "on", "true", "yes"):
      						lineWrap = False
      		if self.split:
      			if not splitSeparated:
      				leftAlign = "left"  # If columns are used and not separated then left column needs to be "left" aligned to avoid overlapping text.
      			leftLabelAttributes.append(("horizontalAlignment", leftAlign))
      			rightLabelAttributes.append(("horizontalAlignment", rightAlign))
      		applyAllAttributes(self.instance, desktop, widgetAttributes, parent.scale)
      		applyAllAttributes(self.leftText, desktop, leftLabelAttributes, parent.scale)
      		applyAllAttributes(self.rightText, desktop, rightLabelAttributes, parent.scale)
      		applyAllAttributes(self.slider, desktop, sliderAttributes, parent.scale)
      		retVal = True
      	else:
      		retVal = False
      	self.lineWrap = lineWrap
      	self.lineHeight = eLabel.calculateTextSize(self.leftText.getFont(), "Abcdefgh", eSize(10000, 10000), True).height()
      	self.pageWidth = self.leftText.size().width()
      	self.pageHeight = (self.leftText.size().height() // self.lineHeight) * self.lineHeight
      	self.instance.move(self.leftText.position())
      	self.instance.resize(eSize(self.pageWidth, self.pageHeight))
      	self.sliderWidth = sliderOffset + sliderWidth
      	if self.split and sliderMode != eListbox.showNever:  # Check that there is space for the scrollbar in the split.
      		if abs(splitPosition) < self.sliderWidth:
      			splitPosition = None
      		elif abs(self.pageWidth - splitPosition) < self.sliderWidth:
      			splitPosition = None
      	splitPosition = self.pageWidth // 2 if splitPosition is None else splitPosition
      	self.leftWidth = (splitPosition - splitMargin) if splitSeparated else self.pageWidth
      	self.rightColX = splitPosition + splitMargin
      	self.rightWidth = self.pageWidth - splitPosition - splitMargin
      	self.splitSeparated = splitSeparated
      	self.leftText.move(ePoint(0, 0))
      	self.rightText.move(ePoint(self.rightColX, 0))
      	self.slider.move(ePoint(0 if sliderMode in (eListbox.showLeftOnDemand, eListbox.showLeftAlways) else (self.pageWidth - sliderWidth), 0))
      	self.slider.resize(eSize(sliderWidth, self.pageHeight))
      	self.slider.setOrientation(eSlider.orVertical)
      	self.slider.setRange(0, 1000)
      	self.slider.setBorderWidth(sliderBorderWidth)
      	if scrollbarRadius:
      		self.slider.setCornerRadius(*scrollbarRadius)
      	if scrollbarGradient:
      		scrollbarGradient = scrollbarGradient + (True,)  # Add fullColor.
      		self.slider.setForegroundGradient(*scrollbarGradient)
      	self.sliderMode = sliderMode
      	self.sliderScroll = self.lineHeight if sliderScroll else self.pageHeight
      	self.setText(self.msgText)
      	return retVal
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      ScrollLabel.GUIcreate(self, parent)

      Implementation, line 28 ↗

      def GUIcreate(self, parent):
      	self.instance = eWidget(parent)
      	self.leftText = eLabel(self.instance)
      	self.rightText = eLabel(self.instance)
      	self.slider = eSlider(self.instance)
      	self.slider.setIsScrollbar()
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (29) and inherited methods (19)

      Inherited methods

      SelectionList

      lib/python/Components/SelectionList.py, line 26 ↗

      Class: Components.SelectionList.SelectionList. Bases: MenuList.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (4) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.MenuList.MenuList

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      SelectionList.__init__(self, list=None, enableWrapAround=False)

      Implementation, line 27 ↗

      def __init__(self, list=None, enableWrapAround=False):
      	MenuList.__init__(self, list or [], enableWrapAround=enableWrapAround, content=eListboxPythonMultiContent)
      	font = fonts.get("SelectionList", ("Regular", 20, 30))
      	self.l.setFont(0, gFont(font[0], font[1]))
      	self.l.setItemHeight(font[2])
      	global icons
      	icons = [
      		LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/lock_on.png")),
      		LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/lock_off.png"))
      	]
      
      MenuList.__init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent)

      Implementation, line 9 ↗

      def __init__(self, menuList, enableWrapAround=None, content=eListboxPythonStringContent):  # enableWrapAround is deprecated as this is now controllable in the skin and windowstyle.
      	GUIComponent.__init__(self)
      	self.list = menuList
      	self.l = content()
      	self.l.setList(self.list)
      	self.onSelectionChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (8) and inherited methods (53)

      Inherited methods

      ServiceListBase

      lib/python/Components/ServiceList.py, line 305 ↗

      Class: Components.ServiceList.ServiceListBase. Bases: GUIComponent.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.ServiceList.ServiceListBase

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Class-level constants and option maps
      MODE_NORMAL = 0
      MODE_FAVOURITES = 1
      MODE_ALL = 2
      MODE_OTHER = 0
      MODE_BOUQUETS = 1
      MODE_SERVICES = 2
      ServiceListBase.__init__(self, serviceList)

      Implementation, line 316 ↗

      def __init__(self, serviceList):
      	self.serviceList = serviceList
      	GUIComponent.__init__(self)
      	self.onSelectionChanged = []
      	self.root = None
      	self.mode = self.MODE_OTHER
      	self.picFolder = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/folder.png"))
      	self.picMarker = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/marker.png"))
      	self.picDVB_S = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-s.png"))
      	self.picDVB_C = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-c.png"))
      	self.picDVB_T = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-t.png"))
      	self.picServiceGroup = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_service_group.png"))
      	self.picCrypto = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/icon_crypt.png"))
      	self.picRecord = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/record.png"))
      	self.picStream = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_stream.png"))
      	self.picDAB = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dab-plus.png"))
      	self.picCatchup = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_catchup.png"))
      	self.picFavorites = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/epgclock_primetime.png"))  # TODO
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (51) and inherited methods (21)

      Inherited methods

      ServiceListLegacy

      lib/python/Components/ServiceList.py, line 573 ↗

      Class: Components.ServiceList.ServiceListLegacy. Bases: ServiceListBase.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 38. backgroundColorMarked, backgroundColorMarkedSelected, colorEventProgressbar, colorEventProgressbarBorder, colorEventProgressbarBorderSelected, colorEventProgressbarSelected, colorFallbackItem, colorServiceDescription, colorServiceDescriptionFallback, colorServiceDescriptionSelected, colorServiceDescriptionSelectedFallback, colorServicePseudoRecorded, colorServiceRecorded, colorServiceRecording, colorServiceSelectedFallback, colorServiceStreamed, colorServiceWithAdvertisment, fieldMargins, foregroundColorEvent, foregroundColorEventSelected, foregroundColorEventborder, foregroundColorEventborderSelected, foregroundColorMarked, foregroundColorMarkedSelected, foregroundColorServiceNotAvail, itemsDistances, listMarginLeft, listMarginRight, nonplayableMargins, picServiceEventProgressbar, progressBarWidth, progressInfoFont, progressbarBorderWidth, progressbarHeight, serviceInfoFont, serviceItemHeight, serviceNameFont, serviceNumberFont These can override central meanings.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.ServiceList.ServiceListBase

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      ServiceListLegacy.__init__(self, serviceList)

      Implementation, line 575 ↗

      def __init__(self, serviceList):
      	ServiceListBase.__init__(self, serviceList)
      	self.l = eListboxServiceContent()
      
      	if self.picFolder:
      		self.l.setPixmap(self.l.picFolder, self.picFolder)
      
      	if self.picMarker:
      		self.l.setPixmap(self.l.picMarker, self.picMarker)
      
      	if self.picDVB_S:
      		self.l.setPixmap(self.l.picDVB_S, self.picDVB_S)
      
      	if self.picDVB_C:
      		self.l.setPixmap(self.l.picDVB_C, self.picDVB_C)
      
      	if self.picDVB_C:
      		self.l.setPixmap(self.l.picDVB_T, self.picDVB_T)
      
      	if self.picServiceGroup:
      		self.l.setPixmap(self.l.picServiceGroup, self.picServiceGroup)
      
      	if self.picCrypto:
      		self.l.setPixmap(self.l.picCrypto, self.picCrypto)
      
      	if self.picRecord:
      		self.l.setPixmap(self.l.picRecord, self.picRecord)
      
      	if self.picCatchup:
      		self.l.setPixmap(self.l.picCatchup, self.picCatchup)
      
      	if self.picStream:
      		self.l.setPixmap(self.l.picStream, self.picStream)
      
      	if self.picDAB:
      		self.l.setPixmap(self.l.picDAB, self.picDAB)
      
      	self.listHeight = 0
      	self.listWidth = 0
      	self.ServiceNumberFontName = "Regular"
      	self.ServiceNumberFontSize = 20
      	self.ServiceNameFontName = "Regular"
      	self.ServiceNameFontSize = 22
      	self.ServiceInfoFontName = "Regular"
      	self.ServiceInfoFontSize = 18
      	self.progressInfoFontName = "Regular"
      	self.progressInfoFontSize = -1
      	self.progressBarWidth = 52
      	self.fieldMargins = 10
      	self.itemsDistances = 8
      	self.listMarginRight = 25  # scrollbar is fixed 20 + 5 Extra marge
      	self.listMarginLeft = 5
      
      ServiceListBase.__init__(self, serviceList)

      Implementation, line 316 ↗

      def __init__(self, serviceList):
      	self.serviceList = serviceList
      	GUIComponent.__init__(self)
      	self.onSelectionChanged = []
      	self.root = None
      	self.mode = self.MODE_OTHER
      	self.picFolder = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/folder.png"))
      	self.picMarker = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/marker.png"))
      	self.picDVB_S = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-s.png"))
      	self.picDVB_C = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-c.png"))
      	self.picDVB_T = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-t.png"))
      	self.picServiceGroup = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_service_group.png"))
      	self.picCrypto = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/icon_crypt.png"))
      	self.picRecord = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/record.png"))
      	self.picStream = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_stream.png"))
      	self.picDAB = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dab-plus.png"))
      	self.picCatchup = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_catchup.png"))
      	self.picFavorites = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/epgclock_primetime.png"))  # TODO
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      ServiceListLegacy.applySkin(self, desktop, parent)

      Implementation, line 631 ↗

      def applySkin(self, desktop, parent):
      	def foregroundColorMarked(value):
      		self.l.setColor(eListboxServiceContent.markedForeground, parseColor(value))
      
      	def foregroundColorMarkedSelected(value):
      		self.l.setColor(eListboxServiceContent.markedForegroundSelected, parseColor(value))
      
      	def backgroundColorMarked(value):
      		self.l.setColor(eListboxServiceContent.markedBackground, parseColor(value))
      
      	def backgroundColorMarkedSelected(value):
      		self.l.setColor(eListboxServiceContent.markedBackgroundSelected, parseColor(value))
      
      	def foregroundColorServiceNotAvail(value):
      		self.l.setColor(eListboxServiceContent.serviceNotAvail, parseColor(value))
      
      	def foregroundColorEvent(value):
      		self.l.setColor(eListboxServiceContent.eventForeground, parseColor(value))
      
      	def colorServiceDescription(value):
      		self.l.setColor(eListboxServiceContent.serviceDescriptionColor, parseColor(value))
      
      	def foregroundColorEventSelected(value):
      		self.l.setColor(eListboxServiceContent.eventForegroundSelected, parseColor(value))
      
      	def colorServiceDescriptionSelected(value):
      		self.l.setColor(eListboxServiceContent.serviceDescriptionColorSelected, parseColor(value))
      
      	def foregroundColorEventborder(value):
      		self.l.setColor(eListboxServiceContent.eventborderForeground, parseColor(value))
      
      	def foregroundColorEventborderSelected(value):
      		self.l.setColor(eListboxServiceContent.eventborderForegroundSelected, parseColor(value))
      
      	def colorEventProgressbar(value):
      		self.l.setColor(eListboxServiceContent.serviceEventProgressbarColor, parseColor(value))
      
      	def colorEventProgressbarSelected(value):
      		self.l.setColor(eListboxServiceContent.serviceEventProgressbarColorSelected, parseColor(value))
      
      	def colorEventProgressbarBorder(value):
      		self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColor, parseColor(value))
      
      	def colorEventProgressbarBorderSelected(value):
      		self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColorSelected, parseColor(value))
      
      	def colorServiceRecorded(value):
      		self.l.setColor(eListboxServiceContent.serviceRecorded, parseColor(value))
      
      	def colorServicePseudoRecorded(value):
      		self.l.setColor(eListboxServiceContent.servicePseudoRecorded, parseColor(value))
      
      	def colorServiceStreamed(value):
      		self.l.setColor(eListboxServiceContent.serviceStreamed, parseColor(value))
      
      	def colorFallbackItem(value):
      		self.l.setColor(eListboxServiceContent.serviceItemFallback, parseColor(value))
      
      	def colorServiceSelectedFallback(value):
      		self.l.setColor(eListboxServiceContent.serviceSelectedFallback, parseColor(value))
      
      	def colorServiceDescriptionFallback(value):
      		self.l.setColor(eListboxServiceContent.eventForegroundFallback, parseColor(value))
      
      	def colorServiceDescriptionSelectedFallback(value):
      		self.l.setColor(eListboxServiceContent.eventForegroundSelectedFallback, parseColor(value))
      
      	def colorServiceRecording(value):
      		self.l.setColor(eListboxServiceContent.serviceRecordingColor, parseColor(value))
      
      	def colorServiceWithAdvertisment(value):
      		self.l.setColor(eListboxServiceContent.serviceAdvertismentColor, parseColor(value))
      
      	def picServiceEventProgressbar(value):
      		pic = LoadPixmap(resolveFilename(SCOPE_GUISKIN, value))
      		pic and self.l.setPixmap(self.l.picServiceEventProgressbar, pic)
      
      	def serviceItemHeight(value):
      		self.ItemHeight = int(value)
      
      	def serviceNameFont(value):
      		font = parseFont(value, ((1, 1), (1, 1)))
      		self.ServiceNameFontName = font.family
      		self.ServiceNameFontSize = font.pointSize
      
      	def serviceInfoFont(value):
      		font = parseFont(value, ((1, 1), (1, 1)))
      		self.ServiceInfoFontName = font.family
      		self.ServiceInfoFontSize = font.pointSize
      
      	def serviceNumberFont(value):
      		font = parseFont(value, ((1, 1), (1, 1)))
      		self.ServiceNumberFontName = font.family
      		self.ServiceNumberFontSize = font.pointSize
      
      	def progressInfoFont(value):
      		font = parseFont(value, ((1, 1), (1, 1)))
      		self.progressInfoFontName = font.family
      		self.progressInfoFontSize = font.pointSize
      
      	def progressbarHeight(value):
      		self.l.setProgressbarHeight(int(value))
      
      	def progressbarBorderWidth(value):
      		self.l.setProgressbarBorderWidth(int(value))
      
      	def progressBarWidth(value):
      		self.progressBarWidth = int(value)
      
      	def fieldMargins(value):
      		self.fieldMargins = int(value)
      
      	def listMarginRight(value):
      		self.listMarginRight = int(value)
      
      	def listMarginLeft(value):
      		self.listMarginLeft = int(value)
      
      	def nonplayableMargins(value):
      		self.l.setNonplayableMargins(int(value))
      
      	def itemsDistances(value):
      		self.itemsDistances = int(value)
      		self.l.setItemsDistances(self.itemsDistances)
      	if self.skinAttributes is not None:
      		for (attrib, value) in list(self.skinAttributes):
      			try:
      				locals().get(attrib)(value)
      				self.skinAttributes.remove((attrib, value))
      			except Exception:
      				pass
      	rc = GUIComponent.applySkin(self, desktop, parent)
      	self.listHeight = self.instance.size().height()
      	self.listWidth = self.instance.size().width()
      	self.setItemsPerPage()
      	self.setFontsize()
      	return rc
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (11) and inherited methods (66)

      Inherited methods

      ServiceList

      Service-list component with legacy appearance options and modern templates. Its applySkin handles additional service-specific attributes before forwarding native list options.

      lib/python/Components/ServiceList.py, line 896 ↗

      Class: Components.ServiceList.ServiceList. Bases: ServiceListBase, ServiceListTemplateParser.

      Native root: eListbox (63 current central attribute names).

      Names explicitly handled in this class's applySkin: 8. colorServiceWithAdvertisment, fieldMargins, itemsDistances, listMarginLeft, listMarginRight, nonplayableMargins, picServiceEventProgressbar, serviceItemHeight These can override central meanings.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eListbox — Components.ServiceList.ServiceListBase

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      ServiceList.__init__(self, serviceList)

      Implementation, line 898 ↗

      def __init__(self, serviceList):
      	ServiceListBase.__init__(self, serviceList)
      	ServiceListTemplateParser.__init__(self, config.crash.debugScreens.value)
      
      	self.session = serviceList.session
      	self.l = eListboxPythonServiceContent()
      	self.l.setBuildFunc(self.buildEntry)
      	self.list = []
      	self.size = 0
      	self.ItemHeight = 20
      	self.service_center = eServiceCenter.getInstance()
      	self.numberoffset = 0
      	self.PlayableIgnoreService = eServiceReference()
      	self.recordingList = {}
      	if self.session:
      		self.session.nav.RecordTimer.on_state_change.append(self.onTimerEntryStateChange)
      	config.channelSelection.showTimers.addNotifier(self.getRecordingList, initial_call=True)
      
      	self.desktopWidth = getDesktop(0).size().width()
      	self.reloadTimer = eTimer()
      	self.reloadTimer.callback.append(self.doReload)
      	self.skinAttributes = None
      
      ServiceListBase.__init__(self, serviceList)

      Implementation, line 316 ↗

      def __init__(self, serviceList):
      	self.serviceList = serviceList
      	GUIComponent.__init__(self)
      	self.onSelectionChanged = []
      	self.root = None
      	self.mode = self.MODE_OTHER
      	self.picFolder = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/folder.png"))
      	self.picMarker = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/marker.png"))
      	self.picDVB_S = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-s.png"))
      	self.picDVB_C = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-c.png"))
      	self.picDVB_T = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dvb-t.png"))
      	self.picServiceGroup = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_service_group.png"))
      	self.picCrypto = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/icon_crypt.png"))
      	self.picRecord = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/record.png"))
      	self.picStream = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_stream.png"))
      	self.picDAB = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_dab-plus.png"))
      	self.picCatchup = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/ico_catchup.png"))
      	self.picFavorites = LoadPixmap(path=resolveFilename(SCOPE_GUISKIN, "icons/epgclock_primetime.png"))  # TODO
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      ServiceListTemplateParser.__init__(self, debug=False)

      Implementation, line 61 ↗

      def __init__(self, debug=False):
      	TemplateParser.__init__(self, debug=debug)
      	self.listHeight = 0
      	self.listWidth = 0
      	self.recordIndicatorMode = config.channelSelection.recordIndicatorMode.value
      	self.widgetAttributes = {}
      	self.widgetColors = ("recordColor", "streamColor", "pseudoColor", "serviceNotAvailColor", "fallbackColor", "recordColorSelected", "streamColorSelected", "pseudoColorSelected", "serviceNotAvailColorSelected", "fallbackColorSelected")
      
      ServiceList.applySkin(self, desktop, parent)

      Implementation, line 1144 ↗

      def applySkin(self, desktop, parent):
      	if self.skinAttributes is None:
      		return GUIComponent.applySkin(self, desktop, parent)
      	attribs = []
      
      	attributeMapping = {
      		"foregroundColorServiceNotAvail": "serviceNotAvailColor",
      		"colorServiceRecording": "recordColor",
      		"colorServiceRecorded": "recordColor",
      		"colorServicePseudoRecorded": "pseudoColor",
      		"colorServiceStreamed": "streamColor",
      		"colorFallbackItem": "fallbackColor",
      		"colorServiceSelectedFallback": "fallbackColorSelected"
      	}
      
      	self.widgetAttributes["recordColor"] = "#00b40431"
      	self.widgetAttributes["streamColor"] = "#00f56712"
      	self.widgetAttributes["pseudoColor"] = "#0041b1ec"
      	self.widgetAttributes["serviceNotAvailColor"] = "#00bbbbbb"
      
      	self.widgetAttributes["recordColorSelected"] = "#00b40431"
      	self.widgetAttributes["streamColorSelected"] = "#00f56712"
      	self.widgetAttributes["pseudoColorSelected"] = "#0041b1ec"
      	self.widgetAttributes["serviceNotAvailColorSelected"] = "#00bbbbbb"
      
      	for (attrib, value) in self.skinAttributes:
      		# Color attributes
      		newattrib = attributeMapping.get(attrib, attrib)
      
      		if newattrib in ("foregroundColorMarked", "foregroundColorMarkedSelected", "backgroundColorMarked", "backgroundColorMarkedSelected") + self.widgetColors:
      			self.widgetAttributes[newattrib] = value
      			continue
      
      		# LEGACY attributes will be ignored
      		if attrib.startswith("colorEventProgressbar"):
      			continue
      
      		if attrib.startswith("progressBar"):
      			continue
      
      		if attrib.startswith("foregroundColorEvent"):
      			continue
      
      		if attrib.startswith("colorServiceDescription"):
      			continue
      
      		if attrib.endswith("Font"):
      			continue
      
      		if attrib in ("listMarginLeft", "listMarginRight", "fieldMargins", "itemsDistances", "nonplayableMargins", "serviceItemHeight", "picServiceEventProgressbar", "colorServiceWithAdvertisment"):
      			continue
      		else:
      			attribs.append((attrib, value))
      
      	self.skinAttributes = attribs
      	rc = GUIComponent.applySkin(self, desktop, parent)
      	self.listHeight = self.instance.size().height()
      	self.listWidth = self.instance.size().width()
      	self.readTemplate(config.channelSelection.widgetStyle.value)
      	return rc
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (23) and inherited methods (70)

      Inherited methods

      ServicePosition

      lib/python/Components/ServicePosition.py, line 7 ↗

      Class: Components.ServicePosition.ServicePosition. Bases: PerServiceDisplay.

      Native root: eLabel (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eLabel — Components.PerServiceDisplay.PerServiceDisplay

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Class-level constants and option maps
      TYPE_LENGTH = 0
      TYPE_POSITION = 1
      TYPE_REMAINING = 2
      TYPE_RELATIVE = 3
      ServicePosition.__init__(self, navcore, type)

      Implementation, line 13 ↗

      def __init__(self, navcore, type):
      	PerServiceDisplay.__init__(self, navcore,
      		{
      			iPlayableService.evStart: self.newService,
      			iPlayableService.evEnd: self.stopEvent
      		})
      	self.updateTimer = eTimer()
      	self.updateTimer.callback.append(self.update)
      	self.type = type
      	self.relative_base = 0
      
      PerServiceDisplay.__init__(self, navcore, eventmap)

      Implementation, line 66 ↗

      def __init__(self, navcore, eventmap):
      	GUIComponent.__init__(self)
      	VariableText.__init__(self)
      	PerServiceBase.__init__(self, navcore, eventmap)
      
      PerServiceBase.__init__(self, navcore, eventmap, with_event=False)

      Implementation, line 21 ↗

      def __init__(self, navcore, eventmap, with_event=False):
      	self.navcore = navcore
      	self.eventmap = eventmap  #NOSONAR
      	self.poll_timer = eTimer()
      	self.with_event = with_event
      
      	self.poll_timer.callback.append(self.poll)
      
      	EventMap = PerServiceBase.EventMap
      	if not len(EventMap):
      		self.navcore.event.append(PerServiceBase.event)
      
      	EventMap = EventMap.setdefault
      	for x in eventmap.items():
      		EventMap(x[0], []).append((with_event, x[1]))
      
      	# start with stopped state, so simulate that
      	evEndEntry = eventmap.get(iPlayableService.evEnd)
      	if evEndEntry:
      		if with_event:
      			evEndEntry(iPlayableService.evEnd)
      		else:
      			evEndEntry()
      
      VariableText.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	object.__init__(self)
      	self.message = ""
      	self.instance = None
      	self.onChanged = []
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (7) and inherited methods (29)

      Inherited methods

      ServicePositionGauge

      lib/python/Components/ServicePosition.py, line 89 ↗

      Class: Components.ServicePosition.ServicePositionGauge. Bases: PerServiceBase, GUIComponent.

      Native root: ePositionGauge (18 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (4) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = ePositionGauge — Components.ServicePosition.ServicePositionGauge

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      ServicePositionGauge.__init__(self, navcore)

      Implementation, line 90 ↗

      def __init__(self, navcore):
      	GUIComponent.__init__(self)
      	PerServiceBase.__init__(self, navcore,
      		{
      			iPlayableService.evStart: self.newService,
      			iPlayableService.evEnd: self.stopEvent,
      			iPlayableService.evCuesheetChanged: self.newCuesheet
      		})
      	self.instance = None
      	self.__seek_position = 0
      
      PerServiceBase.__init__(self, navcore, eventmap, with_event=False)

      Implementation, line 21 ↗

      def __init__(self, navcore, eventmap, with_event=False):
      	self.navcore = navcore
      	self.eventmap = eventmap  #NOSONAR
      	self.poll_timer = eTimer()
      	self.with_event = with_event
      
      	self.poll_timer.callback.append(self.poll)
      
      	EventMap = PerServiceBase.EventMap
      	if not len(EventMap):
      		self.navcore.event.append(PerServiceBase.event)
      
      	EventMap = EventMap.setdefault
      	for x in eventmap.items():
      		EventMap(x[0], []).append((with_event, x[1]))
      
      	# start with stopped state, so simulate that
      	evEndEntry = eventmap.get(iPlayableService.evEnd)
      	if evEndEntry:
      		if with_event:
      			evEndEntry(iPlayableService.evEnd)
      		else:
      			evEndEntry()
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (12) and inherited methods (23)

      Inherited methods

      Slider

      lib/python/Components/Slider.py, line 7 ↗

      Class: Components.Slider.Slider. Bases: VariableValue, GUIComponent.

      Native root: eSlider (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eSlider — Components.Slider.Slider

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Slider.__init__(self, min, max)

      Implementation, line 8 ↗

      def __init__(self, min, max):
      	VariableValue.__init__(self)
      	GUIComponent.__init__(self)
      
      	self.min = min
      	self.max = max
      
      VariableValue.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	self.__value = 0
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (2) and inherited methods (23)

      Inherited methods

      TunerInfo

      lib/python/Components/TunerInfo.py, line 8 ↗

      Class: Components.TunerInfo.TunerInfo. Bases: GUIComponent.

      Created by createWidget(): eLabel, eSlider. The constructor may choose a widget by mode.

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      Class-level constants and option maps
      SNR = 0
      SNR_DB = 1
      AGC = 2
      BER = 3
      SNR_PERCENTAGE = 0
      AGC_PERCENTAGE = 2
      BER_VALUE = 3
      SNR_BAR = 4
      AGC_BAR = 5
      BER_BAR = 6
      LOCK_STATE = 7
      SYNC_STATE = 8
      LOCK = 9
      TunerInfo.__init__(self, type, servicefkt=None, frontendfkt=None, statusDict=None)

      Implementation, line 23 ↗

      def __init__(self, type, servicefkt=None, frontendfkt=None, statusDict=None):
      	GUIComponent.__init__(self)
      	self.instance = None
      	self.message = None
      	self.value = None
      	self.servicefkt = servicefkt
      	self.frontendfkt = frontendfkt
      	self.statusDict = statusDict
      	self.type = type
      	self.update()
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      TunerInfo.createWidget(self, parent)

      Implementation, line 124 ↗

      def createWidget(self, parent):
      	if self.SNR_PERCENTAGE <= self.type <= self.BER_VALUE or self.type == self.LOCK_STATE:
      		return eLabel(parent)
      	elif self.SNR_BAR <= self.type <= self.BER_BAR:
      		self.g = eSlider(parent)
      		self.g.setRange(0, 100)
      		return self.g
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (8) and inherited methods (20)

      Inherited methods

      VideoWindow

      lib/python/Components/VideoWindow.py, line 5 ↗

      Class: Components.VideoWindow.VideoWindow. Bases: GUIComponent.

      Native root: eVideoWidget (31 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (2) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eVideoWidget — Components.VideoWindow.VideoWindow

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      VideoWindow.__init__(self, decoder=1, fb_width=720, fb_height=576)

      Implementation, line 6 ↗

      def __init__(self, decoder=1, fb_width=720, fb_height=576):
      	GUIComponent.__init__(self)
      	self.decoder = decoder
      	self.fb_width = fb_width
      	self.fb_height = fb_height
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (2) and inherited methods (21)

      Inherited methods

      VolumeBar

      lib/python/Components/VolumeBar.py, line 7 ↗

      Class: Components.VolumeBar.VolumeBar. Bases: VariableValue, GUIComponent.

      Native root: eSlider (30 current central attribute names).

      Names explicitly handled in this class's applySkin: 0. No named comparisons or local-handler dispatch found here; check inherited handling below. These can override central meanings.

      Effective Python properties (3) and value/range constants

      These are Python descriptors, including inherited ones. Their usefulness as renderer outputs depends on the selected mode. Internal properties such as suspended manage lifecycle.

      GUI_WIDGET = eSlider — Components.VolumeBar.VolumeBar

      Arguments, defaults and skin parsing — exact implementation

      Read the selected class first, then any base constructor or applySkin it calls. This preserves separators, defaults, validation and conditional behaviour. It is source code for reference, not a desktop Python example.

      VolumeBar.__init__(self)

      Implementation, line 8 ↗

      def __init__(self):
      	VariableValue.__init__(self)
      	GUIComponent.__init__(self)
      
      VariableValue.__init__(self)

      Implementation, line 4 ↗

      def __init__(self):
      	self.__value = 0
      
      GUIComponent.__init__(self)

      Implementation, line 9 ↗

      def __init__(self):
      	self.onVisibilityChange = []
      	self.instance = None
      	self.visiblity = False
      	self.visible = True
      	self.skinAttributes = None
      	self.deprecationInfo = None
      
      GUIComponent.applySkin(self, desktop, parent)

      Implementation, line 32 ↗

      def applySkin(self, desktop, parent):  # This only works with normal widgets, if you don't have a self.instance override this method.
      	if not self.visible:
      		self.instance.hide()
      	if self.skinAttributes is None:
      		result = False
      	else:
      		# // Workaround for values from attributes the not be set.
      		#
      		# The order of some attributes is crucial if they are applied. Also, an attribute may be responsible that another does not take effect and occurs at different skins.
      		# It was noticed at "scrollbarSliderBorderWidth" and "scrollbarSliderForegroundColor".
      		#
      		# if config.skin.primary_skin.value.split("/")[0] not in ("DMConcinnity-HD"):
      		# 	self.skinAttributes.sort()
      		#
      		# NOTE: The code above is invalid. It always returns False! It is being removed until it's need is confirmed.
      		# To be correct the code could/should be one of, depending on the original intention:
      		# 	if config.skin.primary_skin.value.split("/")[0] != "DMConcinnity-HD":
      		# 	if config.skin.primary_skin.value.split("/")[0] == "DMConcinnity-HD":
      		#
      		# //
      		applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
      		result = True
      	return result
      
      GUIComponent.createWidget(self, parent)

      Implementation, line 119 ↗

      def createWidget(self, parent):  # Default for argument less widget constructor.
      	return self.GUI_WIDGET(parent)
      
      GUIComponent.GUIcreate(self, parent)

      Implementation, line 111 ↗

      def GUIcreate(self, parent):  # Default implementation for only one widget per component.  Feel free to override!
      	self.instance = self.createWidget(parent)
      	self.postWidgetCreate(self.instance)
      
      Declared methods (2) and inherited methods (23)

      Inherited methods

      For the list-specific rendering APIs, continue with classic service lists, modern channel templates and network list templates. A tuple field index in a template is data binding, not an attribute on the outer listbox.