import glob from os import path from PyQt5 import QtWidgets, QtGui from chatimusmaximus.gui import CentralWidget, StatusBar, MenuBar from chatimusmaximus.gui.models.settings_model import SettingsModel def _get_icon_dict(): icon_path = path.join(path.dirname(__file__), 'resources', 'icons', '') filepaths = glob.glob(str(icon_path) + '*.png') filenames = [path.basename(f).split('.')[0] for f in filepaths] file_platform = zip(filepaths, filenames) icon_dict = {name: QtGui.QImage(path) for (path, name) in file_platform} return icon_dict class MainWindow(QtWidgets.QMainWindow): def __init__(self, settings: dict=None, parent=None): """ MainWindow uses a QTextEdit to display chat """ # initialize parent class. Req'd for PyQt subclasses super().__init__(parent) # set title window to `CHATIMUSMAXIMUS` self.setWindowTitle("CHATIMUSMAXIMUS") self.setStyleSheet('background: black;') # Create the central widget self.central_widget = CentralWidget(parent=self) # duck type for easier access in `main` self.command_line_signal = self.central_widget.command_line_signal self.chat_slot = self.central_widget.chat_slot self.setCentralWidget(self.central_widget) self.status_bar = StatusBar(parent=self) self.set_widget_state = self.status_bar.set_widget_status self.setStatusBar(self.status_bar) self.settings_model = SettingsModel() self._set_settings(self.settings_model.root) # alias for pep8 msg_area = self.central_widget.message_area msg_area.time_signal.connect(self.status_bar.time_label.setText) self.menu_bar = MenuBar(self.settings_model, parent=self) self.setMenuBar(self.menu_bar) icon_dict = _get_icon_dict() for platform, icon_path in icon_dict.items(): msg_area.set_icon(icon_path, platform) def _set_settings(self, settings): # FIXME: not used # display = settings.get('display') for service, platform in settings['services'].items(): if not service == 'youtube': for platform_name, settings in platform.items(): if settings['display_missing']: self.status_bar.set_up_helper(platform_name.title()) else: if platform['display_missing']: self.status_bar.set_up_helper(service.title()) def set_command_prompt(self, prompt): self.central_widget.command_line.button.setText(prompt)