def __init__(self, parent=None): QLineEdit.__init__(self, parent=None) self.process_active = False # create a reload button with icon self.button_reload = button_reload = QToolButton(self) icon = QIcon.fromTheme("view-refresh", nm.settings().icon('oxygen_view_refresh.png')) button_reload.setIcon(icon) button_reload.setCursor(Qt.ArrowCursor) button_reload.setStyleSheet( "QToolButton { border: none; padding: 0px; }") # create a stop button with icon self.button_stop = button_stop = QToolButton(self) icon = QIcon.fromTheme("process-stop", nm.settings().icon('oxygen_view_refresh.png')) button_stop.setIcon(icon) button_stop.setCursor(Qt.ArrowCursor) button_stop.setStyleSheet( "QToolButton { border: none; padding: 0px; }") button_stop.hide() # signals, clear lineEdit if btn pressed; change btn visibility on input button_reload.clicked.connect(self._emit_refresh_text) self.textChanged[str].connect(self.update_close_button) button_stop.clicked.connect(self._process_stop) frameWidth = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth) self.setStyleSheet("QLineEdit { padding-right: %dpx; } " % (button_reload.sizeHint().width() + frameWidth + 1)) msz = self.minimumSizeHint() self.setMinimumSize( max(msz.width(), button_reload.sizeHint().height() + frameWidth * 2 + 2), max(msz.height(), button_reload.sizeHint().height() + frameWidth * 2 + 2)) self._timer = QTimer(self) self._timer.setSingleShot(True) self._timer.setInterval(500) self._timer.timeout.connect(self._emit_refresh_text)
def __init__(self, parent=None): QLineEdit.__init__(self, parent) # Create a clear button with icon self.clearBtn = clearBtn = QToolButton(self) icon = QIcon.fromTheme("edit-clear", QIcon(":/icons/crystal_clear_button_close.png")) clearBtn.setIcon(icon) clearBtn.setCursor(Qt.ArrowCursor) clearBtn.setStyleSheet("QToolButton { border: none; padding: 0px; }") clearBtn.hide() # signals, clear lineEdit if btn pressed; change btn visibility on input clearBtn.clicked.connect(self.clear) self.textChanged[str].connect(self.update_close_button) frameWidth = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth) self.setStyleSheet("QLineEdit { padding-right: %dpx; } " % (clearBtn.sizeHint().width() + frameWidth + 1)) msz = self.minimumSizeHint() self.setMinimumSize(max(msz.width(), clearBtn.sizeHint().height() + frameWidth * 2 + 2), max(msz.height(), clearBtn.sizeHint().height() + frameWidth * 2 + 2))
def __init__(self, topic, msg_type, show_only_rate=False, masteruri=None, use_ssh=False, parent=None): ''' Creates an input dialog. @param topic: the name of the topic @type topic: C{str} @param msg_type: the type of the topic @type msg_type: C{str} @raise Exception: if no topic class was found for the given type ''' QDialog.__init__(self, parent=parent) self._masteruri = masteruri masteruri_str = '' if masteruri is None else '[%s]' % masteruri self.setObjectName(' - '.join(['EchoDialog', topic, masteruri_str])) self.setAttribute(Qt.WA_DeleteOnClose, True) self.setWindowFlags(Qt.Window) self.setWindowTitle('%s %s %s' % ('Echo --- ' if not show_only_rate else 'Hz --- ', topic, masteruri_str)) self.resize(728, 512) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout.setContentsMargins(1, 1, 1, 1) self.mIcon = QIcon(":/icons/crystal_clear_prop_run_echo.png") self.setWindowIcon(self.mIcon) self.topic = topic self.show_only_rate = show_only_rate self.lock = threading.RLock() self.last_printed_count = 0 self.msg_t0 = -1. self.msg_tn = 0 self.times = [] self.message_count = 0 self._rate_message = '' self._scrapped_msgs = 0 self._scrapped_msgs_sl = 0 self._last_received_ts = 0 self.receiving_hz = self.MESSAGE_HZ_LIMIT self.line_limit = self.MESSAGE_LINE_LIMIT self.field_filter_fn = None options = QWidget(self) if not show_only_rate: hLayout = QHBoxLayout(options) hLayout.setContentsMargins(1, 1, 1, 1) self.no_str_checkbox = no_str_checkbox = QCheckBox('Hide strings') no_str_checkbox.toggled.connect(self.on_no_str_checkbox_toggled) hLayout.addWidget(no_str_checkbox) self.no_arr_checkbox = no_arr_checkbox = QCheckBox('Hide arrays') no_arr_checkbox.toggled.connect(self.on_no_arr_checkbox_toggled) hLayout.addWidget(no_arr_checkbox) self.combobox_reduce_ch = QComboBox(self) self.combobox_reduce_ch.addItems( [str(self.MESSAGE_LINE_LIMIT), '0', '80', '256', '1024']) self.combobox_reduce_ch.activated[str].connect( self.combobox_reduce_ch_activated) self.combobox_reduce_ch.setEditable(True) self.combobox_reduce_ch.setToolTip( "Set maximum line width. 0 disables the limit.") hLayout.addWidget(self.combobox_reduce_ch) # reduce_ch_label = QLabel('ch', self) # hLayout.addWidget(reduce_ch_label) # add spacer spacerItem = QSpacerItem(515, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) hLayout.addItem(spacerItem) # add combobox for displaying frequency of messages self.combobox_displ_hz = QComboBox(self) self.combobox_displ_hz.addItems([ str(self.MESSAGE_HZ_LIMIT), '0', '0.1', '1', '50', '100', '1000' ]) self.combobox_displ_hz.activated[str].connect( self.on_combobox_hz_activated) self.combobox_displ_hz.setEditable(True) hLayout.addWidget(self.combobox_displ_hz) displ_hz_label = QLabel('Hz', self) hLayout.addWidget(displ_hz_label) # add combobox for count of displayed messages self.combobox_msgs_count = QComboBox(self) self.combobox_msgs_count.addItems( [str(self.MAX_DISPLAY_MSGS), '0', '50', '100']) self.combobox_msgs_count.activated[str].connect( self.on_combobox_count_activated) self.combobox_msgs_count.setEditable(True) self.combobox_msgs_count.setToolTip( "Set maximum displayed message count. 0 disables the limit.") hLayout.addWidget(self.combobox_msgs_count) displ_count_label = QLabel('#', self) hLayout.addWidget(displ_count_label) # add topic control button for unsubscribe and subscribe self.topic_control_button = QToolButton(self) self.topic_control_button.setText('stop') self.topic_control_button.setIcon( QIcon(':/icons/deleket_deviantart_stop.png')) self.topic_control_button.clicked.connect( self.on_topic_control_btn_clicked) hLayout.addWidget(self.topic_control_button) # add clear button clearButton = QToolButton(self) clearButton.setText('clear') clearButton.clicked.connect(self.on_clear_btn_clicked) hLayout.addWidget(clearButton) self.verticalLayout.addWidget(options) self.display = QTextBrowser(self) self.display.setReadOnly(True) self.verticalLayout.addWidget(self.display) self.display.document().setMaximumBlockCount(500) self.max_displayed_msgs = self.MAX_DISPLAY_MSGS self._blocks_in_msg = None self.display.setOpenLinks(False) self.display.anchorClicked.connect(self._on_display_anchorClicked) self.status_label = QLabel('0 messages', self) self.verticalLayout.addWidget(self.status_label) # subscribe to the topic errmsg = '' try: self.__msg_class = message.get_message_class(msg_type) if not self.__msg_class: errmsg = "Cannot load message class for [%s]. Did you build messages?" % msg_type # raise Exception("Cannot load message class for [%s]. Did you build messages?"%msg_type) except Exception as e: self.__msg_class = None errmsg = "Cannot load message class for [%s]. Did you build messagest?\nError: %s" % ( msg_type, e) # raise Exception("Cannot load message class for [%s]. Did you build messagest?\nError: %s"%(msg_type, e)) # variables for Subscriber self.msg_signal.connect(self._append_message) self.sub = None # vairables for SSH connection self.ssh_output_file = None self.ssh_error_file = None self.ssh_input_file = None self.text_signal.connect(self._append_text) self.text_hz_signal.connect(self._append_text_hz) self._current_msg = '' self._current_errmsg = '' self.text_error_signal.connect(self._append_error_text) # decide, which connection to open if use_ssh: self.__msg_class = None self._on_display_anchorClicked(QUrl(self._masteruri)) elif self.__msg_class is None: errtxt = '<pre style="color:red; font-family:Fixedsys,Courier,monospace; padding:10px;">\n%s</pre>' % ( errmsg) self.display.setText('<a href="%s">open using SSH</a>' % (masteruri)) self.display.append(errtxt) else: self.sub = rospy.Subscriber(self.topic, self.__msg_class, self._msg_handle) self.print_hz_timer = QTimer() self.print_hz_timer.timeout.connect(self._on_calc_hz) self.print_hz_timer.start(1000)
def __init__(self, parent=None): QDialog.__init__(self, parent) # self.host = host self.setWindowIcon(QIcon(":/icons/irondevil_sync.png")) self.setWindowTitle('Sync') self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setObjectName("verticalLayout") self.resize(350, 190) self.toolButton_SyncAll = QToolButton(self) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(2) sizePolicy.setHeightForWidth( self.toolButton_SyncAll.sizePolicy().hasHeightForWidth()) self.toolButton_SyncAll.setSizePolicy(sizePolicy) self.toolButton_SyncAll.setObjectName("toolButton_SyncAll") self.verticalLayout.addWidget(self.toolButton_SyncAll) self.toolButton_SyncAll.setText(self._translate("Sync All")) self.toolButton_SyncAll.clicked.connect(self._on_sync_all_clicked) # self.toolButton_SyncAllAnyMsg = QToolButton(self) # sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # sizePolicy.setHorizontalStretch(0) # sizePolicy.setVerticalStretch(1) # sizePolicy.setHeightForWidth(self.toolButton_SyncAllAnyMsg.sizePolicy().hasHeightForWidth()) # self.toolButton_SyncAllAnyMsg.setSizePolicy(sizePolicy) # self.toolButton_SyncAllAnyMsg.setObjectName("toolButton_SyncAllAnyMsg") # self.verticalLayout.addWidget(self.toolButton_SyncAllAnyMsg) # self.toolButton_SyncAllAnyMsg.setText(self._translate("Sync all (+AnyMsg)")) # self.toolButton_SyncAllAnyMsg.clicked.connect(self._on_sync_all_anymsg_clicked) self.toolButton_SyncTopicOnDemand = QToolButton(self) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.toolButton_SyncTopicOnDemand.sizePolicy().hasHeightForWidth()) self.toolButton_SyncTopicOnDemand.setSizePolicy(sizePolicy) self.toolButton_SyncTopicOnDemand.setObjectName( "toolButton_SyncTopicOnDemand") self.verticalLayout.addWidget(self.toolButton_SyncTopicOnDemand) self.toolButton_SyncTopicOnDemand.setText( self._translate("Sync only topics on demand")) self.toolButton_SyncTopicOnDemand.clicked.connect( self._on_sync_topics_on_demand_clicked) self.toolButton_SelectInterface = QToolButton(self) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.toolButton_SelectInterface.sizePolicy().hasHeightForWidth()) self.toolButton_SelectInterface.setSizePolicy(sizePolicy) self.toolButton_SelectInterface.setObjectName( "toolButton_SelectInterface") self.verticalLayout.addWidget(self.toolButton_SelectInterface) self.toolButton_SelectInterface.setText( self._translate("Select an interface")) self.toolButton_SelectInterface.clicked.connect( self._on_select_interface_clicked) self.interface_field = QComboBox(self) self.interface_field.setInsertPolicy(QComboBox.InsertAlphabetically) self.interface_field.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)) self.interface_field.setEditable(True) self.interface_field.setVisible(False) self.interface_field.setObjectName("interface_field") self.verticalLayout.addWidget(self.interface_field) self.interface_field.currentIndexChanged[str].connect( self._on_interface_selected) self.toolButton_EditInterface = QToolButton(self) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.toolButton_EditInterface.sizePolicy().hasHeightForWidth()) self.toolButton_EditInterface.setSizePolicy(sizePolicy) self.toolButton_EditInterface.setObjectName("toolButton_EditInterface") self.verticalLayout.addWidget(self.toolButton_EditInterface) self.toolButton_EditInterface.setText( self._translate("Edit selected interface")) self.toolButton_EditInterface.clicked.connect( self._on_edit_interface_clicked) self.toolButton_EditInterface.setVisible(False) self.toolButton_CreateInterface = QToolButton(self) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.toolButton_CreateInterface.sizePolicy().hasHeightForWidth()) self.toolButton_CreateInterface.setSizePolicy(sizePolicy) self.toolButton_CreateInterface.setObjectName( "toolButton_CreateInterface") self.verticalLayout.addWidget(self.toolButton_CreateInterface) self.toolButton_CreateInterface.setText( self._translate("Create an interface")) self.toolButton_CreateInterface.clicked.connect( self._on_create_interface_clicked) self.toolButton_CreateInterface.setVisible(False) self.textedit = TextEdit('', self) self.hl = SyncHighlighter(self.textedit.document()) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.textedit.setSizePolicy(sizePolicy) self.textedit.setObjectName("syncedit") self.verticalLayout.addWidget(self.textedit) self.textedit.setVisible(False) self._fill_interface_thread = None self._interfaces_files = None self._sync_args = [] self._interface_filename = None self.buttonBox = QDialogButtonBox(self) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self._new_iface = True