#  SPDX-License-Identifier: MPL-2.0
#    Copyright (c) 2022 Philipp Le <philipp@philipple.de>.
#  This Source Code Form is subject to the terms of the Mozilla Public
#  License, v. 2.0. If a copy of the MPL was not distributed with this
#  file, You can obtain one at https://mozilla.org/MPL/2.0/.

from typing import List, Type
from . import base

from .ch02_phasor import Ch02PhasorWindow


def get_windows() -> List[Type[base.Window]]:
    return [
        Ch02PhasorWindow,
    ]


def get_groups() -> List[Type[base.Group]]:
    return base.get_groups(get_windows())


def get_win_of_group(grp: Type[base.Group]) -> List[Type[base.Window]]:
    return base.get_win_of_group(get_windows(), grp)
