def _on_path_select_clicked(self): # Workaround for QFileDialog.getExistingDirectory because it do not # select the configuration folder in the dialog self.dialog = QFileDialog(self, caption='Select a new settings folder') self.dialog.setOption(QFileDialog.HideNameFilterDetails, True) self.dialog.setFileMode(QFileDialog.Directory) self.dialog.setDirectory(self.path) if self.dialog.exec_(): fileNames = self.dialog.selectedFiles() path = fileNames[0] if os.path.isfile(path): path = os.path.basename(path) self._lineedit.setText(path) self.path = dir self.editing_finished_signal.emit()
def load_file(self): filename = QFileDialog.getOpenFileName(self, self.tr("Open File"), "../", self.tr("Yaml (*.yaml)")) self.filelist.append(filename[0]) self.filenames.append(os.path.basename(filename[0])) self.fileLabel.setText('Files: ' + str(self.filenames)) self.fileLabel.setWordWrap(True)
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fh = open(file_name, 'rb') dotcode = fh.read() fh.close() except IOError: return # disable controls customizing fetched ROS graph self._widget.depth_combo_box.setEnabled(False) self._widget.directions_combo_box.setEnabled(False) self._widget.package_type_combo_box.setEnabled(False) self._widget.filter_line_edit.setEnabled(False) self._widget.with_stacks_check_box.setEnabled(False) self._widget.mark_check_box.setEnabled(False) self._widget.colorize_check_box.setEnabled(False) self._widget.hide_transitives_check_box.setEnabled(False) self._update_graph(dotcode) self._redraw_graph_scene()
def browseForLocation(self): location = QFileDialog.getOpenFileName(filter="*.bag;;*", directory=os.path.dirname(self.demoLocation.text()))[0] if len(location) == 0: return self.demoLocation.setText(location) self.loadLocation()
def _handle_record_clicked(self): if self._recording: self._timeline.toggle_recording() return # TODO verify master is still running filename = QFileDialog.getSaveFileName( self, self.tr('Select prefix for new Bag File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': prefix = filename[0].strip() # Get filename to record to record_filename = time.strftime('%Y-%m-%d-%H-%M-%S.bag', time.localtime(time.time())) if prefix.endswith('.bag'): prefix = prefix[:-len('.bag')] if prefix: record_filename = '%s_%s' % (prefix, record_filename) rospy.loginfo('Recording to %s.' % record_filename) #TODO Implement recording of topic subsets, regex limiting and by number of messages per topic self.load_button.setEnabled(False) self._recording = True self._timeline.record_bag(record_filename)
def get_profile_file(self): # save the profile (path, _) = QFileDialog.getSaveFileName( self, "New profile file", nm.settings().current_dialog_path, "node manager profile files (*.nmprofile);;All files (*)" ) # _:=filter if path: if not path.endswith('.nmprofile'): path = "%s.nmprofile" % path nm.settings().current_dialog_path = os.path.dirname(path) try: (pkg, _) = package_name(os.path.dirname(path)) # _:=pkg_path if pkg is None: ret = WarningMessageBox( QMessageBox.Warning, "New File Error", 'The new file is not in a ROS package', buttons=QMessageBox.Ok | QMessageBox.Cancel).exec_() if ret == QMessageBox.Cancel: return None return path except EnvironmentError as e: WarningMessageBox(QMessageBox.Warning, "New File Error", 'Error while create a new file', str(e)).exec_() return None
def _on_import_perspective(self): file_name, _ = QFileDialog.getOpenFileName( self._menu_manager.menu, self.tr('Import perspective from file'), None, self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return perspective_name = os.path.basename(file_name) suffix = '.perspective' if perspective_name.endswith(suffix): perspective_name = perspective_name[:-len(suffix)] if perspective_name in self.perspectives: perspective_name = self._choose_new_perspective_name(False) if perspective_name is None: return self._create_perspective(perspective_name, clone_perspective=False) # read perspective from file file_handle = open(file_name, 'r') #data = eval(file_handle.read()) data = json.loads(file_handle.read()) self._convert_values(data, self._import_value) new_settings = self._get_perspective_settings(perspective_name) self._set_dict_on_settings(data, new_settings) self.switch_perspective(perspective_name, settings_changed=True, save_before=True)
def get_profile_file(self): ''' Opens file manager dialog to save to select a new file for node manager profile. :return: path to profile file :rtype: str ''' # save the profile (path, _) = QFileDialog.getSaveFileName( self, "New profile file", nm.settings().current_dialog_path, "node manager profile files (*.nmprofile);;All files (*)" ) # _:=filter if path: if not path.endswith('.nmprofile'): path = "%s.nmprofile" % path nm.settings().current_dialog_path = os.path.dirname(path) try: # we need a grpc url for local node manager daemon nmd_url = nmdurl.nmduri() (pkg, _) = package_name( nmdurl.join(nmd_url, os.path.dirname(path))) # _:=pkg_path if pkg is None: ret = MessageBox.warning( self, "New File Error", 'The new file is not in a ROS package', buttons=MessageBox.Ok | MessageBox.Cancel) if ret == MessageBox.Cancel: return None return path except EnvironmentError as e: MessageBox.warning(self, "New File Error", 'Error while create a new file', utf8(e)) return None
def browseForFolder(self): location = QFileDialog.getExistingDirectory(directory=os.path.dirname(self.demoLocation.text())) if len(location) == 0: return self.demoLocation.setText(location) self.loadLocation()
def _handle_save_clicked(self, checked): filename = QFileDialog.getSaveFileName(self, 'Save to File', '.', self.tr('rqt_console msg file {.csv} (*.csv)')) if filename[0] != '': filename = filename[0] if filename[-4:] != '.csv': filename += '.csv' try: handle = open(filename, 'w') except IOError as e: qWarning(str(e)) return try: handle.write(';'.join(MessageDataModel.columns) + '\n') for index in range(self._proxy_model.rowCount()): row = self._proxy_model.mapToSource(self._proxy_model.index(index, 0)).row() msg = self._model._messages[row] data = {} data['message'] = msg.message.replace('"', '\\"') data['severity'] = str(msg.severity) data['node'] = msg.node data['stamp'] = str(msg.stamp[0]) + '.' + str(msg.stamp[1]).zfill(9) data['topics'] = ','.join(msg.topics) data['location'] = msg.location line = [] for column in MessageDataModel.columns: line.append('"%s"' % data[column]) handle.write(';'.join(line) + '\n') except Exception as e: qWarning('File save failed: %s' % str(e)) return False finally: handle.close() return True
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fh = open(file_name, 'rb') dotcode = fh.read() fh.close() except IOError: return # disable controls customizing fetched ROS graph self._widget.graph_type_combo_box.setEnabled(False) self._widget.filter_line_edit.setEnabled(False) self._widget.topic_filter_line_edit.setEnabled(False) self._widget.namespace_cluster_check_box.setEnabled(False) self._widget.actionlib_check_box.setEnabled(False) self._widget.dead_sinks_check_box.setEnabled(False) self._widget.leaf_topics_check_box.setEnabled(False) self._widget.quiet_check_box.setEnabled(False) self._update_graph_view(dotcode)
def save_trajectory_callback(self): self.blockSignals(True) print "Save gains" # Save data to file that we can read in # TODO - invalid file names fileName = QFileDialog.getSaveFileName() #if fileName[0] checks to ensure that the file dialog has not been canceled if fileName[0]: if self.calculate_trajectory(): print self.robot_command; newFileptr = open(fileName[0], 'w') # Suggested format for files to make it easy to combine different outputs newFileptr.write('# Trajectory \n') newFileptr.write(self.robot_command) newFileptr.write('\n') newFileptr.close() else: print "Trajectory calculation failure - do not save!" else: print "Save cancelled." newFilePtr.close() self.blockSignals(False)
def load_directory(self): directory = QFileDialog.getExistingDirectory(self, self.tr("Open Directory"), "../") self.filenames.extend(os.listdir(directory)) temp = [directory + '/' + filepath for filepath in os.listdir(directory)] self.filelist.extend(temp) self.fileLabel.setText('Files: ' + str(self.filenames)) self.fileLabel.setWordWrap(True)
def newLocation(self): location = QFileDialog.getSaveFileName(filter="*.bag;;*", directory=os.path.dirname(self.demoLocation.text()))[0] if len(location) == 0: return self.demoLocation.setText(location) self.playDemoButton.setEnabled(False) self.zeroMarker.clear() self.zeroMarker.setEnabled(False) self.startTrajectoryButton.setEnabled(True) self.startButton.setEnabled(True) self.addButton.setEnabled(True) self.openHandButton.setEnabled(True) self.closeHandButton.setEnabled(True) self.endButton.setEnabled(True) try: os.remove(location) self._showStatus("Deleted existing save file.") except OSError: pass if not self.kinesthetic_interaction: self._showWarning("Record keyframe demo server unreachable", "Record keyframe demo server isn't loaded. Run `roslaunch hlpr_record_demonstration start_record_services.launch` and restart the GUI.") return saveFile = self.kinesthetic_interaction.init_demo(location=location, timestamp=self.shouldTimestamp.isChecked()) self.demoLocation.setText(saveFile) self.demoName.setText(os.path.basename(saveFile)) self.keyframeCount.setText("") self.playbackTree.clear()
def loadDatabase(self, unused=None): # Load database filename = QFileDialog.getOpenFileName( self.widget, caption="Load track database", filter="*.tracks", directory=self.defaultDatabaseDirectory)[0] self.loadGivenDatabase(filename)
def browseForFolder(self): location = QFileDialog.getExistingDirectory( directory=os.path.dirname(self.demoLocation.text())) if len(location) == 0: return self.demoLocation.setText(location) self.loadLocation()
def _handle_save_clicked(self): filename = QFileDialog.getSaveFileName( self, self.tr('Save to file...'), '.', self.tr('YAML files {.yaml} (*.yaml)')) if filename[0] != '': with open(filename[0], 'w') as outfile: outfile.write( yaml.dump(self.places_dict, default_flow_style=False))
def on_open_xml_clicked(self): (fileName, _) = QFileDialog.getOpenFileName( self, "Load launch file", self.__current_path, "Config files (*.launch);;All files (*)") if fileName: self.__current_path = os.path.dirname(fileName) nm.settings().launch_history_add(fileName) self.load_signal.emit(fileName, [], None)
def on_open_xml_clicked(self): (fileName, _) = QFileDialog.getOpenFileName(self, "Load launch file", self.__current_path, "Config files (*.launch);;All files (*)") if fileName: self.__current_path = os.path.dirname(fileName) nm.settings().launch_history_add(fileName) self.load_signal.emit(fileName, [], None)
def load_file(self): filename = QFileDialog.getOpenFileName(self, self.tr("Open File"), "../", self.tr("Yaml (*.yaml)")) if os.path.basename(filename[0].encode("ascii")) == "": return self.filelist.append(filename[0]) self.filenames.append(os.path.basename(filename[0].encode("ascii"))) self.fileLabel.setText('Files: ' + str(self.filenames)) self.fileLabel.setWordWrap(True)
def browseForLocation(self): location = QFileDialog.getOpenFileName( filter="*.bag;;*", directory=os.path.dirname(self.demoLocation.text()))[0] if len(location) == 0: return self.demoLocation.setText(location) self.loadLocation()
def _on_export_perspective(self): file_name, _ = QFileDialog.getSaveFileName(self._menu_manager.menu, self.tr('Export perspective to file'), self._current_perspective + '.perspective', self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return # trigger save of perspective before export self._callback = self._on_export_perspective_continued self._callback_args = [file_name] self.save_settings_signal.emit(self._global_settings, self._perspective_settings)
def on_open_xml_clicked(self): (fileName, _) = QFileDialog.getOpenFileName(self, "Load launch file", self.__current_path, "Config files (*.launch);;All files (*)") if fileName: self.__current_path = os.path.dirname(fileName) self.launchlist_model.add2LoadHistory(fileName) self.load_signal.emit(fileName)
def save_FileDialog(self): filename = QFileDialog.getSaveFileName(self.parent, 'Save file', os.path.expanduser('~')) self.parent.filename = filename[0] if self.parent.jpeg_data is None: print 'no image data' else: f = open(self.parent.filename.encode(), 'wb') f.write(self.parent.jpeg_data) f.close()
def _save_image(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as image'), 'rosgraph.png', self.tr('Image (*.bmp *.jpg *.png *.tiff)')) if file_name is None or file_name == '': return img = QImage((self._scene.sceneRect().size() * 2.0).toSize(), QImage.Format_ARGB32_Premultiplied) painter = QPainter(img) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end() img.save(file_name)
def _save_dot(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as DOT'), 'rosgraph.dot', self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return handle = QFile(file_name) if not handle.open(QIODevice.WriteOnly | QIODevice.Text): return handle.write(self._current_dotcode) handle.close()
def _save_dot(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as DOT'), 'rospackgraph.dot', self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return handle = QFile(file_name) if not handle.open(QIODevice.WriteOnly | QIODevice.Text): return handle.write(self._current_dotcode) handle.close()
def saveDatabaseAs(self, unused=None): self.databaseFilename = QFileDialog.getSaveFileName( self.widget, caption="Save track database", filter="*.tracks", directory=self.defaultDatabaseDirectory)[0] if self.databaseFilename: if not self.databaseFilename.endswith(".tracks"): self.databaseFilename += ".tracks" self._onDatabaseFilenameChanged() self.saveDatabase()
def _save_image(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as image'), 'rospackgraph.png', self.tr('Image (*.bmp *.jpg *.png *.tiff)')) if file_name is None or file_name == '': return img = QImage((self._scene.sceneRect().size() * 2.0).toSize(), QImage.Format_ARGB32_Premultiplied) painter = QPainter(img) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end() img.save(file_name)
def load_directory(self): directory = QFileDialog.getExistingDirectory(self, self.tr("Open Directory"), "../") self.filenames.extend(os.listdir(directory)) temp = [ directory + '/' + filepath for filepath in os.listdir(directory) ] self.filelist.extend(temp) self.fileLabel.setText('Files: ' + str(self.filenames)) self.fileLabel.setWordWrap(True)
def _import(self): file_path, _ = QFileDialog.getOpenFileName(self, self.tr('Import custom graph'), None, self.tr('DOT graph (*.dot)')) if file_path is None or file_path == '': return custom_graph = Graph(self._dot_processor, file_path, file_path) self.decision_graphs[custom_graph.source] = custom_graph self._current_graph = custom_graph self.decision_graphs_combo_box.addItem(custom_graph.source) self.decision_graphs_combo_box.setCurrentIndex(self.decision_graphs_combo_box.findText(custom_graph.source))
def _on_export_perspective(self): file_name, _ = QFileDialog.getSaveFileName( self._menu_manager.menu, self.tr('Export perspective to file'), self._current_perspective + '.perspective', self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return # trigger save of perspective before export self._callback = self._on_export_perspective_continued self._callback_args = [file_name] self.save_settings_signal.emit(self._global_settings, self._perspective_settings)
def _handle_load_clicked(self, checked): filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('rqt_console message file {.csv} (*.csv)')) if filename[0] != '': try: handle = open(filename[0]) except IOError as e: qWarning(str(e)) return self.pause_button.setChecked(True) self._handle_pause_clicked(True) self._datamodel.load_from_file(handle) handle.close() self.update_status()
def _save_svg(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as SVG'), 'rosgraph.svg', self.tr('Scalable Vector Graphic (*.svg)')) if file_name is None or file_name == '': return generator = QSvgGenerator() generator.setFileName(file_name) generator.setSize((self._scene.sceneRect().size() * 2.0).toSize()) painter = QPainter(generator) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end()
def _save_svg(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as SVG'), 'rospackgraph.svg', self.tr('Scalable Vector Graphic (*.svg)')) if file_name is None or file_name == '': return generator = QSvgGenerator() generator.setFileName(file_name) generator.setSize((self._scene.sceneRect().size() * 2.0).toSize()) painter = QPainter(generator) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end()
def _handle_save_clicked(self, checked): filename = QFileDialog.getSaveFileName(self, 'Save to File', '.', self.tr('rqt_console msg file {.csv} (*.csv)')) if filename[0] != '': filename = filename[0] if filename[-4:] != '.csv': filename += '.csv' try: handle = open(filename, 'w') except IOError as e: qWarning(str(e)) return self._proxymodel.save_to_file(handle) handle.close() self.update_status()
def _export(self): file_name, _ = QFileDialog.getSaveFileName( self, self.tr("Save as image"), "graph.png", self.tr("Image (*.bmp *.jpg *.png *.tiff)") ) if file_name is None or file_name == "": return img = QImage((self._scene.sceneRect().size() * 2.0).toSize(), QImage.Format_ARGB32_Premultiplied) painter = QPainter(img) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end() img.save(file_name)
def _on_import_perspective(self): file_name, _ = QFileDialog.getOpenFileName(self._menu_manager.menu, self.tr('Import perspective from file'), None, self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return perspective_name = os.path.basename(file_name) suffix = '.perspective' if perspective_name.endswith(suffix): perspective_name = perspective_name[:-len(suffix)] if perspective_name in self.perspectives: perspective_name = self._choose_new_perspective_name(False) if perspective_name is None: return self.import_perspective_from_file(file_name, perspective_name)
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open tree from DOT file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fhandle = open(file_name, 'rb') dotcode = fhandle.read() fhandle.close() except IOError: return self._update_graph_view(dotcode)
class PathEditor(QWidget): ''' This is a path editor used as ItemDeligate in settings view. This editor provides an additional button for directory selection dialog. ''' editing_finished_signal = Signal() def __init__(self, path, parent=None): QWidget.__init__(self, parent) self.path = path self._layout = QHBoxLayout(self) self._layout.setContentsMargins(0, 0, 0, 0) self._layout.setSpacing(0) self._button = QPushButton('...') self._button.setMaximumSize(QSize(24, 20)) self._button.clicked.connect(self._on_path_select_clicked) self._layout.addWidget(self._button) self._lineedit = QLineEdit(path) self._lineedit.returnPressed.connect(self._on_editing_finished) self._layout.addWidget(self._lineedit) self.setLayout(self._layout) self.setFocusProxy(self._button) self.setAutoFillBackground(True) def _on_path_select_clicked(self): # Workaround for QFileDialog.getExistingDirectory because it do not # select the configuration folder in the dialog self.dialog = QFileDialog(self, caption='Select a new settings folder') self.dialog.setOption(QFileDialog.HideNameFilterDetails, True) self.dialog.setFileMode(QFileDialog.Directory) self.dialog.setDirectory(self.path) if self.dialog.exec_(): fileNames = self.dialog.selectedFiles() path = fileNames[0] if os.path.isfile(path): path = os.path.basename(path) self._lineedit.setText(path) self.path = dir self.editing_finished_signal.emit() def _on_editing_finished(self): if self._lineedit.text(): self.path = self._lineedit.text() self.editing_finished_signal.emit()
def _on_import_perspective(self): file_name, _ = QFileDialog.getOpenFileName( self._menu_manager.menu, self.tr('Import perspective from file'), None, self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return perspective_name = os.path.basename(file_name) suffix = '.perspective' if perspective_name.endswith(suffix): perspective_name = perspective_name[:-len(suffix)] if perspective_name in self.perspectives: perspective_name = self._choose_new_perspective_name(False) if perspective_name is None: return self.import_perspective_from_file(file_name, perspective_name)
def _load_bag(self, file_name=None): """Load a bag from file. If no file name is given, a dialogue will pop up and the user will be asked to select a file. If the bag file selected doesn't have any valid topic, nothing will happen. If there are valid topics, we load the bag and add a timeline for managing it. """ if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open trees from bag file'), None, self.tr('ROS bag (*.bag)')) if file_name is None or file_name == "": return rospy.loginfo("Reading bag from {0}".format(file_name)) bag = rosbag.Bag(file_name, 'r') # ugh... topics = list(bag.get_type_and_topic_info()[1].keys()) types = [] for i in range(0, len(bag.get_type_and_topic_info()[1].values())): types.append(list(bag.get_type_and_topic_info()[1].values())[i][0]) tree_topics = [] # only look at the first matching topic for ind, tp in enumerate(types): if tp == 'py_trees_msgs/BehaviourTree': tree_topics.append(topics[ind]) if len(tree_topics) == 0: rospy.logerr('Requested bag did not contain any valid topics.') return self.message_list = [] self._viewing_bag = True rospy.loginfo('Reading behaviour trees from topic {0}'.format( tree_topics[0])) for unused_topic, msg, unused_t in bag.read_messages( topics=[tree_topics[0]]): self.message_list.append(msg) self.current_topic = tree_topics[0] self._set_timeline_buttons(first_snapshot=True, previous_snapshot=True, next_snapshot=False, last_snapshot=False) self._set_bag_timeline(bag) self._refresh_view.emit()
def accept(self): if self.textedit.isVisible(): try: tmp_file = os.path.join(nm.screen().LOG_PATH, 'tmp_sync_interface.sync') with open(tmp_file, 'w+') as f: f.write(self.textedit.toPlainText()) from master_discovery_fkie.common import read_interface read_interface(tmp_file) if not self._new_iface and self.interface_field.currentText( ) in self._interfaces_files: fileName = self._interfaces_files[ self.interface_field.currentText()] else: fileName, _ = QFileDialog.getSaveFileName( self, 'Save sync interface', '/home', "Sync Files (*.sync)") if fileName: with open(fileName, 'w+') as f: self._interface_filename = fileName f.write(self.textedit.toPlainText()) if self._new_iface: self.interface_field.clear() self._interfaces_files = None self._on_select_interface_clicked() # QDialog.accept(self) # self.resetView() except Exception as e: WarningMessageBox(QMessageBox.Warning, "Create sync interface", "Error while create interface", str(e)).exec_() elif self.interface_field.isVisible(): interface = self.interface_field.currentText() if self._interfaces_files and interface in self._interfaces_files: self._interface_filename = self._interfaces_files[interface] self._sync_args = [] self._sync_args.append(''.join(['_interface_url:=', interface])) QDialog.accept(self) self.resetView() else: QDialog.accept(self) self.resetView()
def _handle_load_clicked(self): filename = QFileDialog.getOpenFileName( self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': bag = rosbag.Bag(filename[0]) self.play_button.setEnabled(True) self.thumbs_button.setEnabled(True) self.zoom_in_button.setEnabled(True) self.zoom_out_button.setEnabled(True) self.zoom_all_button.setEnabled(True) self.faster_button.setEnabled(True) self.slower_button.setEnabled(True) self.begin_button.setEnabled(True) self.end_button.setEnabled(True) self.save_button.setEnabled(True) self.record_button.setEnabled(False) self._timeline.add_bag(bag)
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fhandle = open(file_name, 'rb') dotcode = fhandle.read() fhandle.close() except IOError: return self._update_graph_view(dotcode)
def _on_record_settings_selected(self, all_topics, selected_topics): # TODO verify master is still running filename = QFileDialog.getSaveFileName(self, self.tr('Select prefix for new Bag File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': prefix = filename[0].strip() # Get filename to record to record_filename = time.strftime('%Y-%m-%d-%H-%M-%S.bag', time.localtime(time.time())) if prefix.endswith('.bag'): prefix = prefix[:-len('.bag')] if prefix: record_filename = '%s_%s' % (prefix, record_filename) rospy.loginfo('Recording to %s.' % record_filename) self.load_button.setEnabled(False) self._recording = True self._timeline.record_bag(record_filename, all_topics, selected_topics)
def _on_record_settings_selected(self, all_topics, selected_topics): # TODO verify master is still running filename = QFileDialog.getSaveFileName( self, self.tr("Select prefix for new Bag File"), ".", self.tr("Bag files {.bag} (*.bag)") ) if filename[0] != "": prefix = filename[0].strip() # Get filename to record to record_filename = time.strftime("%Y-%m-%d-%H-%M-%S.bag", time.localtime(time.time())) if prefix.endswith(".bag"): prefix = prefix[: -len(".bag")] if prefix: record_filename = "%s_%s" % (prefix, record_filename) rospy.loginfo("Recording to %s." % record_filename) self.load_button.setEnabled(False) self._recording = True self._timeline.record_bag(record_filename, all_topics, selected_topics)
def _handle_record_clicked(self): if self._recording: self._timeline.toggle_recording() return # TODO verify master is still running filename = QFileDialog.getSaveFileName(self, self.tr('Select prefix for new Bag File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': prefix = filename[0].strip() # Get filename to record to record_filename = time.strftime('%Y-%m-%d-%H-%M-%S.bag', time.localtime(time.time())) if prefix.endswith('.bag'): prefix = prefix[:-len('.bag')] if prefix: record_filename = '%s_%s' % (prefix, record_filename) rospy.loginfo('Recording to %s.' % record_filename) #TODO Implement recording of topic subsets, regex limiting and by number of messages per topic self.load_button.setEnabled(False) self._recording = True self._timeline.record_bag(record_filename)
def on_new_xml_clicked(self): ''' Creates a new launch file. ''' # get new file from open dialog, use last path if one exists open_path = self.__current_path if self.launchlist_model.currentPath is not None: open_path = self.launchlist_model.currentPath (fileName, _) = QFileDialog.getSaveFileName(self, "New launch file", open_path, "Config files (*.launch *.yaml);;All files (*)") if fileName: try: (pkg, _) = package_name(os.path.dirname(fileName)) # _:=pkg_path if pkg is None: WarningMessageBox(QMessageBox.Warning, "New File Error", 'The new file is not in a ROS package').exec_() return with open(fileName, 'w+') as f: f.write("<launch>\n" " <arg name=\"robot_ns\" default=\"my_robot\"/>\n" " <group ns=\"$(arg robot_ns)\">\n" " <param name=\"tf_prefix\" value=\"$(arg robot_ns)\"/>\n" "\n" " <node pkg=\"my_pkg\" type=\"my_node\" name=\"my_name\" >\n" " <param name=\"capability_group\" value=\"MY_GROUP\"/>\n" " </node>\n" " </group>\n" "</launch>\n" ) self.__current_path = os.path.dirname(fileName) self.launchlist_model.setPath(self.__current_path) self.edit_signal.emit([fileName]) except EnvironmentError as e: WarningMessageBox(QMessageBox.Warning, "New File Error", 'Error while create a new file', '%s' % e).exec_()
def get_profile_file(self): # save the profile (path, _) = QFileDialog.getSaveFileName(self, "New profile file", nm.settings().current_dialog_path, "node manager profile files (*.nmprofile);;All files (*)") # _:=filter if path: if not path.endswith('.nmprofile'): path = "%s.nmprofile" % path nm.settings().current_dialog_path = os.path.dirname(path) try: (pkg, _) = package_name(os.path.dirname(path)) # _:=pkg_path if pkg is None: ret = MessageBox.warning(self, "New File Error", 'The new file is not in a ROS package', buttons=MessageBox.Ok | MessageBox.Cancel) if ret == MessageBox.Cancel: return None return path except EnvironmentError as e: MessageBox.warning(self, "New File Error", 'Error while create a new file', utf8(e)) return None
def accept(self): if self.textedit.isVisible(): try: tmp_file = os.path.join(nm.screen().LOG_PATH, 'tmp_sync_interface.sync') with open(tmp_file, 'w+') as f: f.write(self.textedit.toPlainText()) from master_discovery_fkie.common import read_interface read_interface(tmp_file) if not self._new_iface and self.interface_field.currentText() in self._interfaces_files: fileName = self._interfaces_files[self.interface_field.currentText()] else: fileName, _ = QFileDialog.getSaveFileName(self, 'Save sync interface', '/home', "Sync Files (*.sync)") if fileName: with open(fileName, 'w+') as f: self._interface_filename = fileName f.write(self.textedit.toPlainText()) if self._new_iface: self.interface_field.clear() self._interfaces_files = None self._on_select_interface_clicked() # QDialog.accept(self) # self.resetView() except Exception as e: MessageBox.warning(self, "Create sync interface", "Error while create interface", utf8(e)) elif self.interface_field.isVisible(): interface = self.interface_field.currentText() if self._interfaces_files and interface in self._interfaces_files: self._interface_filename = self._interfaces_files[interface] self._sync_args = [] self._sync_args.append(''.join(['_interface_url:=', interface])) QDialog.accept(self) self.resetView() else: QDialog.accept(self) self.resetView()
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fh = open(file_name, 'rb') dotcode = fh.read() fh.close() except IOError: return # disable controls customizing fetched ROS graph self._widget.graph_type_combo_box.setEnabled(False) self._widget.filter_line_edit.setEnabled(False) self._widget.topic_filter_line_edit.setEnabled(False) self._widget.namespace_cluster_check_box.setEnabled(False) self._widget.actionlib_check_box.setEnabled(False) self._widget.dead_sinks_check_box.setEnabled(False) self._widget.leaf_topics_check_box.setEnabled(False) self._widget.quiet_check_box.setEnabled(False) self._update_graph_view(dotcode)
def _handle_save_clicked(self): filename = QFileDialog.getSaveFileName( self, self.tr("Save selected region to file..."), ".", self.tr("Bag files {.bag} (*.bag)") ) if filename[0] != "": self._timeline.copy_region_to_bag(filename[0])
def _handle_save_clicked(self): filename = QFileDialog.getSaveFileName(self, self.tr('Save selected region to file...'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': self._timeline.copy_region_to_bag(filename[0])
def _handle_load_clicked(self): filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': self.load_bag(filename[0])