示例#1
0
class TerminalWidget(QWidget):
    def __init__(self, mainloop, addr, title, parent=None):
        QWidget.__init__(self, parent)
        self.mainloop = mainloop
        self.addr = addr
        self.title = QLabel(title)
        self.title.setFont(QFont('Monospace', 16))
        self.message = QLabel('')
        self.message.setFont(QFont('Monospace', 13))
        self.bt_open = self.init_button('arrow-up-icon.png', QSize(50, 50))
        self.bt_close = self.init_button('arrow-down-icon.png', QSize(50, 50))

        info_layout = QVBoxLayout()
        info_layout.addWidget(self.title)

        layout = QHBoxLayout()
        layout.addLayout(info_layout)
        layout.addSpacerItem(QSpacerItem(0, 0, QSizePolicy.Expanding))

        self.options_layout = QHBoxLayout()
        layout.addLayout(self.options_layout)

        layout.addWidget(self.bt_open)
        layout.addWidget(self.bt_close)

        self.setLayout(layout)

        self.bt_open.clicked.connect(self.open)
        self.bt_close.clicked.connect(self.close)

        self.grabGesture(Qt.TapAndHoldGesture)

    def update_config(self):
        self.mainloop.update_config(self.addr)
        self.clear_config_layout()

    def init_config_layout(self):
        if self.options_layout.isEmpty():
            config_bt = self.init_button('settings-icon.png', QSize(50, 50))
            config_bt.clicked.connect(self.update_config)
            self.options_layout.addWidget(config_bt)

    def clear_config_layout(self):
        for i in reversed(range(self.options_layout.count())):
            self.options_layout.itemAt(i).widget().setParent(None)

    def gesture_event(self, event):
        #if event.gestureType() == self.tap_and_hold_type:
        #    self.init_config_layout()
        #    return True
        if event.gestureType() == Qt.TapAndHoldGesture:
            self.init_config_layout()
            return True
        return False

    def event(self, event):
        if event.type() == QEvent.Gesture:
            print self.addr, event
            for g in event.gestures():
                if g.state() != Qt.GestureFinished:
                    continue
                if self.gesture_event(g):
                    return event.setAccepted(g, True)

        return QWidget.event(self, event)

    def init_button(self, icon_filename, size):
        button = QPushButton(self)
        button.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        button.setAutoFillBackground(True)
        button.setMinimumSize(size)
        button.setIcon(QIcon(icon_filename))
        button.setIconSize(size)
        return button

    def show_message(self, msg):
        print unicode(msg).encode('utf8')
        self.message.setText(msg)

    def set_style_color(self, color):
        return self.setStyleSheet("""
        TerminalWidget {
            background-color: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, fx:0.7, fy:0.7, stop:0 %s, stop:1 white);
        }""" % (color,))

    def set_state(self, state):
        if not self.isEnabled():
            return
        if state == 'active':
            self.set_style_color('green')
        elif state == 'inactive':
            self.set_style_color('red')
        elif state == 'disabled':
            self.set_style_color('gray')
        else:
            self.set_style_color('white')
        self.setAutoFillBackground(True)

    def open(self):
        self.mainloop.terminal_open(self.addr)

    def close(self):
        self.mainloop.terminal_close(self.addr)