blob: a955249dd05ebe836ffcf7ccf897e41aa0599711 [file] [log] [blame]
# 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 dcs.frames import get_groups, get_win_of_group
from dcs.frames.base import Group, Window
import logging
from tkinter import ttk, Tk, BOTTOM, BOTH
from typing import Type, Dict, Any
import webbrowser
class MainWindow(ttk.Frame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.wdg_treeview = ttk.Treeview(self)
self.wdg_treeview.pack(expand=True, fill=BOTH)
self.wdg_treeview.bind('<Double-Button-1>', self._on_double_click)
self.group_ids: Dict[Type[Group], Any] = {}
self.win_ids: Dict[Type[Window], Any] = {}
for grp in get_groups():
self.group_ids[grp] = self.wdg_treeview.insert('', 'end', None, text=grp.NAME)
for win in get_win_of_group(grp):
self.win_ids[win] = self.wdg_treeview.insert(self.group_ids[grp], 'end', None, text=win.TITLE)
self.frm_copyright = ttk.Frame(self, height=35)
self.frm_copyright.pack(side=BOTTOM, expand=False)
ttk.Label(self.frm_copyright, text='Copyright (c) 2022 Philipp Le').pack()
self.wdg_license = ttk.Button(self.frm_copyright, text='Mozilla Public License v2.0',
command=self._view_license)
self.wdg_license.pack()
def find_win(self, iid) -> Type[Window]:
for win, win_iid in self.win_ids.items():
if win_iid == iid:
return win
raise KeyError
def _on_double_click(self, event):
item_id = event.widget.focus()
try:
win = self.find_win(item_id)
win.make_window(self)
except KeyError:
pass
def _view_license(self):
webbrowser.open('https://mozilla.org/MPL/2.0/', new=1)
def main():
logging.basicConfig(level=logging.INFO)
root = Tk()
root.title('Digital Communication Systemes - Interactive')
root.geometry('800x600')
win = MainWindow(root)
win.pack(expand=True, fill=BOTH)
root.mainloop()
if __name__ == '__main__':
main()