Remove generated stylesheets again
We can just use jinja logic instead...
This commit is contained in:
parent
1f011bdd5f
commit
e3581a50ca
@ -46,7 +46,7 @@ def get_stylesheet(template_str):
|
||||
config=objreg.get('config'))
|
||||
|
||||
|
||||
def set_register_stylesheet(obj, *, generator=None):
|
||||
def set_register_stylesheet(obj):
|
||||
"""Set the stylesheet for an object based on it's STYLESHEET attribute.
|
||||
|
||||
Also, register an update when the config is changed.
|
||||
@ -54,23 +54,20 @@ def set_register_stylesheet(obj, *, generator=None):
|
||||
Args:
|
||||
obj: The object to set the stylesheet for and register.
|
||||
Must have a STYLESHEET attribute.
|
||||
generator: If set, call the given function to dynamically generate a
|
||||
stylesheet instead.
|
||||
"""
|
||||
stylesheet = generator() if generator is not None else obj.STYLESHEET
|
||||
qss = get_stylesheet(stylesheet)
|
||||
qss = get_stylesheet(obj.STYLESHEET)
|
||||
log.config.vdebug("stylesheet for {}: {}".format(
|
||||
obj.__class__.__name__, qss))
|
||||
obj.setStyleSheet(qss)
|
||||
objreg.get('config').changed.connect(
|
||||
functools.partial(_update_stylesheet, obj, generator=generator))
|
||||
functools.partial(_update_stylesheet, obj))
|
||||
|
||||
|
||||
def _update_stylesheet(obj, *, generator):
|
||||
def _update_stylesheet(obj):
|
||||
"""Update the stylesheet for obj."""
|
||||
get_stylesheet.cache_clear()
|
||||
if not sip.isdeleted(obj):
|
||||
stylesheet = generator() if generator is not None else obj.STYLESHEET
|
||||
obj.setStyleSheet(get_stylesheet(stylesheet))
|
||||
obj.setStyleSheet(get_stylesheet(obj.STYLESHEET))
|
||||
|
||||
|
||||
class ColorDict(collections.UserDict):
|
||||
|
@ -77,6 +77,30 @@ class PromptContainer(QWidget):
|
||||
_win_id: The window ID this object is associated with.
|
||||
"""
|
||||
|
||||
STYLESHEET = """
|
||||
QWidget#Prompt {
|
||||
{% if config.get('ui', 'status-position') == 'top' %}
|
||||
border-bottom-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
{% else %}
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
QWidget {
|
||||
/* FIXME
|
||||
font: {{ font['keyhint'] }};
|
||||
FIXME
|
||||
*/
|
||||
color: {{ color['statusbar.fg.prompt'] }};
|
||||
background-color: {{ color['statusbar.bg.prompt'] }};
|
||||
}
|
||||
|
||||
QLineEdit {
|
||||
border: 1px solid grey;
|
||||
}
|
||||
"""
|
||||
update_geometry = pyqtSignal()
|
||||
|
||||
def __init__(self, win_id, parent=None):
|
||||
@ -86,8 +110,7 @@ class PromptContainer(QWidget):
|
||||
self._layout = QVBoxLayout(self)
|
||||
self._layout.setContentsMargins(10, 10, 10, 10)
|
||||
self._prompt = None
|
||||
style.set_register_stylesheet(self,
|
||||
generator=self._generate_stylesheet)
|
||||
style.set_register_stylesheet(self)
|
||||
|
||||
# FIXME review this
|
||||
self._shutting_down = False
|
||||
@ -99,35 +122,6 @@ class PromptContainer(QWidget):
|
||||
return utils.get_repr(self, loops=len(self._loops),
|
||||
queue=len(self._queue), prompt=self._prompt)
|
||||
|
||||
def _generate_stylesheet(self):
|
||||
"""Generate a stylesheet with the right edge rounded."""
|
||||
stylesheet = """
|
||||
QWidget#Prompt {
|
||||
border-POSITION-left-radius: 10px;
|
||||
border-POSITION-right-radius: 10px;
|
||||
}
|
||||
|
||||
QWidget {
|
||||
/* FIXME
|
||||
font: {{ font['keyhint'] }};
|
||||
FIXME
|
||||
*/
|
||||
color: {{ color['statusbar.fg.prompt'] }};
|
||||
background-color: {{ color['statusbar.bg.prompt'] }};
|
||||
}
|
||||
|
||||
QLineEdit {
|
||||
border: 1px solid grey;
|
||||
}
|
||||
"""
|
||||
position = config.get('ui', 'status-position')
|
||||
if position == 'top':
|
||||
return stylesheet.replace('POSITION', 'bottom')
|
||||
elif position == 'bottom':
|
||||
return stylesheet.replace('POSITION', 'top')
|
||||
else:
|
||||
raise ValueError("Invalid position {}!".format(position))
|
||||
|
||||
def _pop_later(self):
|
||||
"""Helper to call self._pop as soon as everything else is done."""
|
||||
QTimer.singleShot(0, self._pop)
|
||||
|
@ -45,6 +45,19 @@ class KeyHintView(QLabel):
|
||||
update_geometry: Emitted when this widget should be resized/positioned.
|
||||
"""
|
||||
|
||||
STYLESHEET = """
|
||||
QLabel {
|
||||
font: {{ font['keyhint'] }};
|
||||
color: {{ color['keyhint.fg'] }};
|
||||
background-color: {{ color['keyhint.bg'] }};
|
||||
padding: 6px;
|
||||
{% if config.get('ui', 'status-position') == 'top' %}
|
||||
border-bottom-right-radius: 6px;
|
||||
{% else %}
|
||||
border-top-right-radius: 6px;
|
||||
{% endif %}
|
||||
}
|
||||
"""
|
||||
update_geometry = pyqtSignal()
|
||||
|
||||
def __init__(self, win_id, parent=None):
|
||||
@ -56,8 +69,7 @@ class KeyHintView(QLabel):
|
||||
self._show_timer = usertypes.Timer(self, 'keyhint_show')
|
||||
self._show_timer.setInterval(500)
|
||||
self._show_timer.timeout.connect(self.show)
|
||||
style.set_register_stylesheet(self,
|
||||
generator=self._generate_stylesheet)
|
||||
style.set_register_stylesheet(self)
|
||||
|
||||
def __repr__(self):
|
||||
return utils.get_repr(self, win_id=self._win_id)
|
||||
@ -67,22 +79,6 @@ class KeyHintView(QLabel):
|
||||
self.update_geometry.emit()
|
||||
super().showEvent(e)
|
||||
|
||||
def _generate_stylesheet(self):
|
||||
"""Generate a stylesheet with the right edge rounded."""
|
||||
stylesheet = """
|
||||
QLabel {
|
||||
font: {{ font['keyhint'] }};
|
||||
color: {{ color['keyhint.fg'] }};
|
||||
background-color: {{ color['keyhint.bg'] }};
|
||||
padding: 6px;
|
||||
border-EDGE-radius: 6px;
|
||||
}
|
||||
"""
|
||||
if config.get('ui', 'status-position') == 'top':
|
||||
return stylesheet.replace('EDGE', 'bottom-right')
|
||||
else:
|
||||
return stylesheet.replace('EDGE', 'top-right')
|
||||
|
||||
@pyqtSlot(str)
|
||||
def update_keyhint(self, modename, prefix):
|
||||
"""Show hints for the given prefix (or hide if prefix is empty).
|
||||
|
@ -59,24 +59,6 @@ class Obj(QObject):
|
||||
self.rendered_stylesheet = stylesheet
|
||||
|
||||
|
||||
class GeneratedObj(QObject):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.rendered_stylesheet = None
|
||||
self._generated = False
|
||||
|
||||
def setStyleSheet(self, stylesheet):
|
||||
self.rendered_stylesheet = stylesheet
|
||||
|
||||
def generate(self):
|
||||
if not self._generated:
|
||||
self._generated = True
|
||||
return 'one'
|
||||
else:
|
||||
return 'two'
|
||||
|
||||
|
||||
@pytest.mark.parametrize('delete', [True, False])
|
||||
def test_set_register_stylesheet(delete, qtbot, config_stub, caplog):
|
||||
config_stub.data = {'fonts': {'foo': 'bar'}, 'colors': {}}
|
||||
@ -105,15 +87,6 @@ def test_set_register_stylesheet(delete, qtbot, config_stub, caplog):
|
||||
assert obj.rendered_stylesheet == expected
|
||||
|
||||
|
||||
def test_set_register_stylesheet_generator(qtbot, config_stub):
|
||||
config_stub.data = {'fonts': {}, 'colors': {}}
|
||||
obj = GeneratedObj()
|
||||
style.set_register_stylesheet(obj, generator=obj.generate)
|
||||
assert obj.rendered_stylesheet == 'one'
|
||||
config_stub.changed.emit('foo', 'bar')
|
||||
assert obj.rendered_stylesheet == 'two'
|
||||
|
||||
|
||||
class TestColorDict:
|
||||
|
||||
@pytest.mark.parametrize('key, expected', [
|
||||
|
Loading…
Reference in New Issue
Block a user