예제 #1
0
파일: ui.py 프로젝트: kevin-lam/Posdit
class StatusWindow(QWidget):
    """
    The status window which features a log that displays request results and application status.
    """

    def __init__(self, parent=None):
        super(StatusWindow, self).__init__(parent)
        self.parent = parent
        self.set_up_status_layout()

    def set_up_status_layout(self):
        status_label = QLabel("Status: ")
        self.status_condition = QLabel()
        font = QFont()
        font.setPointSize(10)
        font.setBold(True)
        self.status_condition.setFont(font)
        self.set_status("Down", "red")

        info_spacer = QSpacerItem(50, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)

        self.settings = QPushButton("Settings")
        self.settings.clicked.connect(self.parent.switch_layout_settings)
        self.settings.setMaximumHeight(20)

        info_container = QHBoxLayout()
        info_container.setContentsMargins(20, 0, 0, 0)
        info_container.addWidget(status_label)
        info_container.addWidget(self.status_condition)
        info_container.addItem(info_spacer)
        info_container.addWidget(self.settings)

        requests = self.parent.settings_widget.request_table.requests
        self.log = LogViewer()
        self.parent.log = self.log
        self.log.introduction()
        self.log.entries(len(requests))

        log_container = QVBoxLayout()
        log_container.addWidget(self.log)

        self.status_disable_checkbox = QCheckBox("Disable")
        self.status_disable_checkbox.stateChanged.connect(self.toggle_status)

        link = "https://github.com/kevin-lam/Posttid"
        help_link = QLabel('<a href="{}">Help</a>'.format(link))
        help_link.setAlignment(Qt.AlignRight)
        help_link.linkActivated.connect(lambda: self.parent.link(link))

        status_bottom_container = QHBoxLayout()
        status_bottom_container.setContentsMargins(10, 0, 20, 0)
        status_bottom_container.addWidget(self.status_disable_checkbox)
        status_bottom_container.addWidget(help_link)

        status_layout = QVBoxLayout()
        status_layout.addLayout(info_container)
        status_layout.addLayout(log_container)
        status_layout.addLayout(status_bottom_container)

        self.setLayout(status_layout)

    def toggle_status(self):
        """
        Called when the checkbox is marked to disable/enable the running program.
        """
        if self.status_disable_checkbox.isChecked():
            self.parent.worker.disable = True
            self.log.disabled()
            self.set_status("Down", "red")
        else:
            self.parent.worker.disable = False
            self.log.enabled()
            if self.parent.settings_widget.email_edit.text():
                self.set_status("Up", "green")

    def set_status(self, condition, color):
        """
        Sets the status of the program on the label
        :param condition: down or up status
        :param color: red or green
        :return:
        """
        self.status_condition.setText(condition)
        style = "QLabel { color : %s; }" % color
        self.status_condition.setStyleSheet(style)