Source code for plopp.widgets.box

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2023 Scipp contributors (https://github.com/scipp)

from ipywidgets import HBox, VBox, Widget


class Bar:
    """
    A simple mixin to provide add and remove helper methods for HBox/VBox containers.
    """

    def __len__(self):
        return len(self.children)

    def add(self, obj: Widget):
        """
        Append a widget to the list of children.
        """
        self.children = [*self.children, obj]

    def remove(self, obj: Widget):
        """
        Remove a widget from the list of children.
        """
        children = list(self.children)
        children.remove(obj)
        self.children = children


[docs] class VBar(VBox, Bar): """ Vertical bar container. """ def __getitem__(self, ind): if isinstance(ind, int): return self.children[ind] elif isinstance(ind, slice): return VBar(self.children[ind])
[docs] class HBar(HBox, Bar): """ Horizontal bar container. """ def __getitem__(self, ind): if isinstance(ind, int): return self.children[ind] elif isinstance(ind, slice): return HBar(self.children[ind])
[docs] class Box(VBar): """ Container widget that accepts a list of items. For each item in the list, if the item is itself a list, it will be made into a horizontal row of the underlying items, if not, the item will span then entire row. Finally, all the rows will be placed inside a vertical box container. Parameters ---------- widgets: List of widgets to place in the box. """
[docs] def __init__(self, widgets): children = [ HBar(view) if isinstance(view, list | tuple) else view for view in widgets ] super().__init__(children)