Source code for omc3_gui.utils.counter

""" 
Counter
-------

Classes to do some automatic counting and filling. 
"""
from __future__ import annotations

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from qtpy import QtWidgets


[docs] class Counter: """ Simple class to count up integers. Similar to itertools.count """ def __init__(self, start=0, end=None): self.count = start self._end = end self._start = start def reset(self): self.count = self._start def __next__(self): self.count += 1 if self._end is not None and self.count >= self._end: raise StopIteration return self.count def __iter__(self): return self def next(self): return next(self) def current(self): return self.count
[docs] class HorizontalGridLayoutFiller: """ Fills a grid-layout with widgets, without having to give row and col positions, but allows giving a col-span. """ def __init__(self, layout: QtWidgets.QGridLayout, cols: int, rows: int = None): self._layout = layout self._cols = cols self._rows = rows self._current_col = 0 self._current_row = 0 def add(self, widget, col_span=1): self._layout.addWidget(widget, self._current_row, self._current_col, 1, col_span) self._current_col += col_span if self._current_col > self._cols: raise ValueError("Span too large for given columns.") if self._current_col == self._cols: self._current_col = 0 self._current_row += 1 if self._rows is not None and self._current_row >= self._rows: raise ValueError("Grid is already full.") addWidget = add