Esempio n. 1
0
    def add_tag_to_bar(self, text):
        tag = QFrame()
        tag.setStyleSheet(
            'border:1px solid rgb(192, 192, 192); border-radius: 4px;')
        tag.setContentsMargins(2, 2, 2, 2)
        tag.setFixedHeight(28)

        hbox = QHBoxLayout()
        hbox.setContentsMargins(4, 4, 4, 4)
        hbox.setSpacing(10)

        tag.setLayout(hbox)

        label = QLabel(text)
        label.setStyleSheet('border:0px')
        label.setFixedHeight(16)
        hbox.addWidget(label)

        x_button = QPushButton('x')
        x_button.setFixedSize(20, 20)
        x_button.setStyleSheet('border:0px; font-weight:bold')
        x_button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
        x_button.clicked.connect(partial(self.delete_tag, text))
        hbox.addWidget(x_button)

        tag.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)

        self.hLayout.addWidget(tag)
Esempio n. 2
0
 def horizontal_line():
     line = QFrame()
     line.setFrameShape(QFrame.HLine)
     line.setFrameShadow(QFrame.Sunken)
     line.setFixedHeight(2)
     line.setContentsMargins(0, 30, 0, 0)
     return line
Esempio n. 3
0
    def _init_widgets(self):
        layout = QHBoxLayout()
        frame = QFrame()
        frame.setFixedWidth(30)
        frame.setFixedHeight(15)

        def update_color(**kwargs):  # pylint:disable=unused-argument
            r, g, b, a = self.color.getRgb()
            frame.setStyleSheet(f"background-color: rgba({r},{g},{b},{a});")

        update_color()
        self.color.am_subscribe(update_color)

        text = QLabel(self.label)

        layout.addWidget(frame)
        layout.addWidget(text)
        self.setLayout(layout)
Esempio n. 4
0
class AppMainWindow(QMainWindow):
    """ The main window the app will be displayed in. """
    def __init__(self, min_size: QSize = QSize(10, 10), lang: LangEnum = LangEnum.ENG,
                 log_handlers: [StreamHandler] = None):
        self._logger = getLogger(__name__)
        if log_handlers:
            for h in log_handlers:
                self._logger.addHandler(h)
        self._logger.debug("Initializing")
        super().__init__()

        self._cf_height = 138

        self._icon = QIcon(image_file_path + "rs_icon.png")
        font = QFont()
        font.setPointSize(10)
        self.setFont(font)
        self.setMinimumSize(min_size)
        self.setWindowIcon(self._icon)
        self.setCentralWidget(CentralWidget(self))
        self.centralWidget().layout().setMargin(0)

        self._control_frame = QFrame(self)
        self._control_frame.setFrameShape(QFrame.NoFrame)
        self._control_frame.setFixedHeight(self._cf_height)
        self._control_layout = QHBoxLayout(self._control_frame)
        self._splitter = QSplitter(Qt.Vertical, self)
        self.centralWidget().layout().addWidget(self._splitter)
        self._splitter.addWidget(self._control_frame)
        self._splitter.setChildrenCollapsible(False)

        self.close_check = False
        self._checker = QMessageBox()
        self._close_callback = None
        self._help_window = None

        self._close_override = False
        self._strings = dict()
        self.set_lang(lang)
        self._setup_checker_buttons()
        self._restore_window()
        self._logger.debug("Initialized")

    def set_lang(self, lang: LangEnum) -> None:
        """
        Set the language of this view item.
        :param lang: The language enum to use.
        :return None:
        """
        self._strings = strings[lang]
        self._set_texts()

    def set_close_check(self, check: bool) -> None:
        """
        Set whether to check with user before closing app.
        :param check:
        :return:
        """
        self.close_check = check

    def closeEvent(self, event: QCloseEvent) -> None:
        """
        Check if user really wants to close the app and only if so alert close and close.
        :param event: The close event.
        :return: None.
        """
        self._logger.debug("running")
        if self._close_override:
            self._logger.debug("done with event.accept()")
            event.accept()
            return
        if self.close_check:
            user_input = self._checker.exec_() == QMessageBox.Yes
            if not user_input:
                event.ignore()
                self._logger.debug("done with event.ignore()")
                return
        self._save_window_settings()
        if self._close_callback:
            self._close_callback()
        event.ignore()
        self._logger.debug("done with event.ignore()")

    def set_close_override(self, override: bool) -> None:
        """
        Set this window to close without checking anything.
        :param override: Whether to just close or do checks first.
        :return None:
        """
        self._logger.debug("running")
        self._close_override = override
        self._logger.debug("done")

    def add_mdi_area(self, mdi_area: QMdiArea) -> None:
        """
        Add MDI area to the main window.
        :param mdi_area: The MDI area to add.
        :return: None.
        """
        self._logger.debug("running")
        self._splitter.addWidget(mdi_area)
        self._logger.debug("done")

    def add_control_bar_widget(self, widget, stretch: int=0) -> None:
        """
        Add widget to the control layout.
        :param widget: The widget to add.
        :param stretch: stretch factor
        :return: None.
        """
        self._logger.debug("running")
        self._control_layout.addWidget(widget, stretch)
        self._logger.debug("done")

    def add_spacer_item(self, stretch) -> None:
        """
        Add spacer item to maintain control bar format.
        :return: None.
        """
        self._logger.debug("running")
        self._control_layout.addStretch(stretch)
        self._logger.debug("done")

    def add_close_handler(self, func: classmethod) -> None:
        """
        Add handler to handle close events.
        :param func: The handler.
        :return: None.
        """
        self._logger.debug("running")
        self._close_callback = func
        self._logger.debug("done")

    def add_menu_bar(self, widget) -> None:
        """
        Add menu bar to main window.
        :param widget: The menu bar.
        :return: None.
        """
        self._logger.debug("running")
        self.setMenuBar(widget)
        self._logger.debug("done")

    def show_help_window(self, title, msg) -> None:
        """
        Show a pop up message window.
        :param title: The title of the window.
        :param msg: The message to be shown.
        :return: None
        """
        self._logger.debug("running")
        self._help_window = HelpWindow(title, msg)
        self._help_window.setWindowIcon(self._icon)
        self._help_window.show()
        self._logger.debug("done")

    def _save_window_settings(self) -> None:
        """
        Save this window's current state for next time app is used.
        :return None:
        """
        self._logger.debug("running")
        settings = QSettings(settings_info[0], settings_info[1])
        settings.setValue(window_geometry, self.saveGeometry())
        settings.setValue(window_state, self.saveState())
        self._logger.debug("done")

    def _restore_window(self) -> None:
        """
        Restore window state and geometry from previous session if exists.
        :return None:
        """
        settings = QSettings(settings_info[0], settings_info[1])
        if not settings.contains(window_geometry):
            settings.setValue(window_geometry, self.saveGeometry())
        if not settings.contains(window_state):
            settings.setValue(window_state, self.saveState())
        self.restoreGeometry(settings.value(window_geometry))
        self.restoreState(settings.value(window_state))

    def _set_texts(self) -> None:
        """
        Set the texts for the main window.
        :return: None.
        """
        self._logger.debug("running")
        self.setWindowTitle(self._strings[StringsEnum.TITLE])
        self._checker.setWindowTitle(self._strings[StringsEnum.CLOSE_TITLE])
        self._checker.setText(self._strings[StringsEnum.CLOSE_APP_CONFIRM])
        self._logger.debug("done")

    def _setup_checker_buttons(self) -> None:
        """
        Setup window for close check.
        :return: None.
        """
        self._logger.debug("running")
        self._checker.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
        self._checker.setDefaultButton(QMessageBox.Cancel)
        self._checker.setEscapeButton(QMessageBox.Cancel)
        self._logger.debug("done")