bumblebee-status/core/theme.py
Tobias Witek 26ae63b5ad [core/theme] Add preliminary cycling support
Add support for cycling values in a theme, for now as long as the cycle
size is 0 :P
2020-02-16 14:02:21 +01:00

48 lines
1.4 KiB
Python

import os
import io
import json
THEME_BASE_DIR=os.path.dirname(os.path.realpath(__file__))
PATHS=[
'.',
os.path.join(THEME_BASE_DIR, '../themes'),
os.path.expanduser('~/.config/bumblebee-status/themes'),
]
class Theme(object):
def __init__(self, name='default', iconset=None, raw_data=None):
self.name = name
if raw_data:
self._data = raw_data
else:
self._data = self.load(name)
def load(self, name):
for path in PATHS:
theme_file = os.path.join(path, '{}.json'.format(name))
if os.path.isfile(theme_file):
with io.open(theme_file, encoding='utf-8') as data:
return json.load(data)
raise RuntimeError('unable to find theme {}'.format(name))
def fg(self, widget=None):
return self.__get(widget, 'fg')
def bg(self, widget=None):
return self.__get(widget, 'bg')
def default_separators(self, widget=None):
return self.__get(widget, 'default-separators', True)
def __get(self, widget, key, default=None):
value = default
for option in ['defaults', 'cycle']:
if option in self._data:
tmp = self._data[option]
if isinstance(tmp, list):
tmp = tmp[0]
value = tmp.get(key, value)
return value
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4