Source code for i3pystatus.group

from i3pystatus import IntervalModule, Status, Module
from i3pystatus.core import util
from i3pystatus.core.imputil import ClassFinder


[docs]class Group(Module, Status): """ Module for grouping modules together Cycles trough groups by means of scrolling .. code-block:: python group = Group() group.register("network", interface="eth0", divisor=1024, start_color='white', format_up="{bytes_recv}K / {bytes_sent}K" ) group.register("network", interface="eth0", color_up='#FFFFFF', format_up="{v4}" ) status.register(group) """ on_upscroll = ['cycle_module', 1] on_downscroll = ['cycle_module', -1] def __init__(self, *args, **kwargs): Module.__init__(self, *args, **kwargs) self.modules = util.ModuleList(self, ClassFinder(Module)) self.active = 0 self.__name__ = 'Group' def get_active_module(self): if self.active > len(self.modules): return return self.modules[self.active] def run(self): activemodule = self.get_active_module() if not activemodule: return self.output = activemodule.output def register(self, *args, **kwargs): module = Status.register(self, *args, **kwargs) if module: module.on_change = self.run return module def cycle_module(self, increment=1): active = self.active + increment if active >= len(self.modules): active = 0 elif active < 0: active = len(self.modules) - 1 self.active = active
[docs] def on_click(self, button, **kwargs): """ Capture scrollup and scorlldown to move in groups Pass everthing else to the module itself """ if button in (4, 5): return super().on_click(button, **kwargs) else: activemodule = self.get_active_module() if not activemodule: return return activemodule.on_click(button, **kwargs)