Source code for pyxbmct.addonskin
# coding: utf-8
# Module: skin
# Created on: 04.03.2016
# Author: Roman Miroshnychenko aka Roman V.M. (romanvm@yandex.ua)
# Licence: GPL v.3 <http://www.gnu.org/licenses/gpl.html>
"""Classes for defining the appearance of PyXBMCt Windows and Controls"""
import os
from abc import ABC, abstractmethod
import xbmcvfs
from xbmcaddon import Addon
ADDON_DIR = xbmcvfs.translatePath(Addon('script.module.pyxbmct').getAddonInfo('path'))
[docs]
class BaseSkin(ABC):
"""
Abstract class for creating fully customized skins
.. warning:: This class is meant for subclassing and cannot be instantiated directly!
A sublcass must implement all the following properties.
"""
[docs]
@abstractmethod
def images(self):
"""
Get the base directory for image files
:rtype: str
"""
return
[docs]
@abstractmethod
def x_margin(self):
"""
Get horizontal adjustment for the header background
if the main background has transparent edges.
:rtype: int
"""
return
[docs]
@abstractmethod
def y_margin(self):
"""
Get vertical adjustment for the header background
if the main background has transparent edges.
:rtype: int
"""
return
[docs]
@abstractmethod
def title_bar_x_shift(self):
"""
Get horizontal adjustment for title bar texture
:rtype: int
"""
return
[docs]
@abstractmethod
def title_bar_y_shift(self):
"""
Get vertical adjustment for title bar texture
:rtype: int
"""
return
[docs]
@abstractmethod
def title_back_y_shift(self):
"""
Get header position adjustment
if the main background has visible borders.
:rtype: int
"""
return
[docs]
@abstractmethod
def close_btn_width(self):
"""
Get the width of the top-right close button
:rtype: int
"""
return
[docs]
@abstractmethod
def close_btn_height(self):
"""
Get the height of the top-right close button
:rtype: int
"""
return
[docs]
@abstractmethod
def close_btn_x_offset(self):
"""
Get close button horizontal adjustment
:rtype: int
"""
return
[docs]
@abstractmethod
def close_btn_y_offset(self):
"""
Get close button vertical adjustment
:rtype: int
"""
return
[docs]
@abstractmethod
def background_img(self):
"""
Get dialog background texture
:rtype: str
"""
return
[docs]
@abstractmethod
def title_background_img(self):
"""
Get title bar background texture
:rtype: str
"""
return
[docs]
@abstractmethod
def main_bg_img(self):
"""
Get fullscreen background for
:class:`AddonFullWindow<pyxbmct.addonwindow.AddonFullWindow>` class
:rtype: str
"""
return
[docs]
class Skin(BaseSkin):
"""
Skin class
Defines parameters that control
the appearance of PyXBMCt windows and controls.
"""
def __init__(self):
self._estuary = True
self._texture_dir = os.path.join(ADDON_DIR,
'lib', 'pyxbmct', 'textures')
@property
def estuary(self):
"""
Get or set a boolean property that defines the look of PyXBMCt elements:
- ``True`` -- use Estuary skin appearance
- ``False`` -- use Confluence skin appearance.
:rtype: bool
"""
return self._estuary
@estuary.setter
def estuary(self, value):
if not isinstance(value, bool):
raise TypeError('estuary property value must be bool!')
self._estuary = value
@property
def images(self):
if self.estuary:
return os.path.join(self._texture_dir, 'estuary')
else:
return os.path.join(self._texture_dir, 'confluence')
@property
def x_margin(self):
if self.estuary:
return 0
else:
return 5
@property
def y_margin(self):
if self.estuary:
return 0
else:
return 5
@property
def title_bar_x_shift(self):
if self.estuary:
return 20
else:
return 0
@property
def title_bar_y_shift(self):
if self.estuary:
return 8
else:
return 4
@property
def title_back_y_shift(self):
if self.estuary:
return 0
else:
return 4
@property
def header_height(self):
if self.estuary:
return 45
else:
return 35
@property
def close_btn_width(self):
if self.estuary:
return 35
else:
return 60
@property
def close_btn_height(self):
if self.estuary:
return 30
else:
return 30
@property
def close_btn_x_offset(self):
if self.estuary:
return 50
else:
return 70
@property
def close_btn_y_offset(self):
if self.estuary:
return 7
else:
return 4
@property
def header_align(self):
if self.estuary:
return 0
else:
return 6
@property
def header_text_color(self):
if self.estuary:
return ''
else:
return '0xFFFFA500'
@property
def background_img(self):
return os.path.join(self.images, 'AddonWindow', 'ContentPanel.png')
@property
def title_background_img(self):
return os.path.join(self.images, 'AddonWindow', 'dialogheader.png')
@property
def close_button_focus(self):
return os.path.join(self.images, 'AddonWindow', 'DialogCloseButton-focus.png')
@property
def close_button_no_focus(self):
return os.path.join(self.images, 'AddonWindow', 'DialogCloseButton.png')
@property
def main_bg_img(self):
return os.path.join(self.images, 'AddonWindow', 'SKINDEFAULT.jpg')