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)