diff options
Diffstat (limited to 'qutebrowser/mainwindow/statusbar/bar.py')
-rw-r--r-- | qutebrowser/mainwindow/statusbar/bar.py | 80 |
1 files changed, 47 insertions, 33 deletions
diff --git a/qutebrowser/mainwindow/statusbar/bar.py b/qutebrowser/mainwindow/statusbar/bar.py index 46cf083bd..ae33a386a 100644 --- a/qutebrowser/mainwindow/statusbar/bar.py +++ b/qutebrowser/mainwindow/statusbar/bar.py @@ -31,7 +31,7 @@ from qutebrowser.keyinput import modeman from qutebrowser.utils import usertypes, log, objreg, utils from qutebrowser.mainwindow.statusbar import (backforward, command, progress, keystring, percentage, url, - tabindex, textbase) + tabindex, textbase, clock) @dataclasses.dataclass @@ -199,6 +199,7 @@ class StatusBar(QWidget): self.tabindex = tabindex.TabIndex() self.keystring = keystring.KeyString() self.prog = progress.Progress(self) + self.clock = clock.Clock() self._text_widgets = [] self._draw_widgets() @@ -208,6 +209,31 @@ class StatusBar(QWidget): def __repr__(self): return utils.get_repr(self) + def _get_widget_from_config(self, key): + """Return the widget that fits with config string key.""" + if key == 'url': + return self.url + elif key == 'scroll': + return self.percentage + elif key == 'scroll_raw': + return self.percentage + elif key == 'history': + return self.backforward + elif key == 'tabs': + return self.tabindex + elif key == 'keypress': + return self.keystring + elif key == 'progress': + return self.prog + elif key.startswith('text:'): + new_text_widget = textbase.TextBase() + self._text_widgets.append(new_text_widget) + return new_text_widget + elif key.startswith('clock:') or key == 'clock': + return self.clock + else: + raise utils.Unreachable(key) + @pyqtSlot(str) def _on_config_changed(self, option): if option == 'statusbar.show': @@ -225,47 +251,35 @@ class StatusBar(QWidget): # Read the list and set widgets accordingly for segment in config.val.statusbar.widgets: - if segment == 'url': - self._hbox.addWidget(self.url) - self.url.show() - elif segment == 'scroll': - self._hbox.addWidget(self.percentage) - self.percentage.show() - elif segment == 'scroll_raw': - self._hbox.addWidget(self.percentage) - self.percentage.set_raw() - self.percentage.show() - elif segment == 'history': - self._hbox.addWidget(self.backforward) - self.backforward.enabled = True - if tab: - self.backforward.on_tab_changed(tab) - elif segment == 'tabs': - self._hbox.addWidget(self.tabindex) - self.tabindex.show() - elif segment == 'keypress': - self._hbox.addWidget(self.keystring) - self.keystring.show() - elif segment == 'progress': - self._hbox.addWidget(self.prog) - self.prog.enabled = True + cur_widget = self._get_widget_from_config(segment) + self._hbox.addWidget(cur_widget) + + if segment == 'scroll_raw': + cur_widget.set_raw() + elif segment in ('history', 'progress'): + cur_widget.enabled = True if tab: - self.prog.on_tab_changed(tab) + cur_widget.on_tab_changed(tab) + + # Do not call .show() for these widgets. + return elif segment.startswith('text:'): - cur_widget = textbase.TextBase() - self._text_widgets.append(cur_widget) cur_widget.setText(segment.split(':', maxsplit=1)[1]) - self._hbox.addWidget(cur_widget) - cur_widget.show() - else: - raise utils.Unreachable(segment) + elif segment.startswith('clock:') or segment == 'clock': + split_segment = segment.split(':', maxsplit=1) + if len(split_segment) == 2 and split_segment[1]: + cur_widget.format = split_segment[1] + else: + cur_widget.format = '%X' + + cur_widget.show() def _clear_widgets(self): """Clear widgets before redrawing them.""" # Start with widgets hidden and show them when needed for widget in [self.url, self.percentage, self.backforward, self.tabindex, - self.keystring, self.prog, *self._text_widgets]: + self.keystring, self.prog, self.clock, *self._text_widgets]: assert isinstance(widget, QWidget) widget.hide() self._hbox.removeWidget(widget) |