def _refill_tree(self, included_from, includes, create_tree=True): deep = 0 file_dsrc = self._root_path try: file_dsrc = os.path.basename(self._root_path) except Exception: pass self.setWindowTitle("Include Graph - %s" % file_dsrc) if not self._created_tree and create_tree: with CHACHE_MUTEX: if self._root_path in GRAPH_CACHE: pkg, _ = package_name(os.path.dirname(self._root_path)) itemstr = '%s [%s]' % (os.path.basename(self._root_path), pkg) inc_item = QStandardItem('%s' % itemstr) inc_item.setData(self._root_path, self.DATA_FILE) inc_item.setData(-1, self.DATA_LINE) inc_item.setData(self._root_path, self.DATA_INC_FILE) inc_item.setData(deep, self.DATA_LEVEL) self._append_items(inc_item, deep + 1) self.graphTreeView.model().appendRow(inc_item) # self.graphTreeView.expand(self.graphTreeView.model().indexFromItem(inc_item)) self._created_tree = True items = self.graphTreeView.model().match(self.graphTreeView.model().index(0, 0), self.DATA_INC_FILE, self._current_path, 10, Qt.MatchRecursive) first = True self.graphTreeView.selectionModel().clearSelection() for item in items: if first: self._current_deep = item.data(self.DATA_LEVEL) self.graphTreeView.selectionModel().select(item, QItemSelectionModel.SelectCurrent) first = False else: self.graphTreeView.selectionModel().select(item, QItemSelectionModel.Select) self.graphTreeView.expandAll()
def setData(self, value, role=Qt.EditRole): if role == Qt.EditRole: self._value = value if hasattr(self._settings, self._attrname): setattr(self._settings, self._attrname, value) if self._need_restart: MessageBox.information(None, "restart Node Manager", "This parameter change is only valid after restart!") return QStandardItem.setData(self, value, role)
def setData(self, value, role=Qt.EditRole): if role == Qt.EditRole: # rename the file or folder if self.name != value and self.id in [self.RECENT_FILE, self.LAUNCH_FILE, self.CFG_FILE, self.FOLDER]: new_path = os.path.join(os.path.dirname(self.path), value) if not os.path.exists(new_path): os.rename(self.path, new_path) self.name = value self.path = new_path else: WarningMessageBox(QMessageBox.Warning, "Path already exists", "`%s` already exists!" % value, "Complete path: %s" % new_path).exec_() return QStandardItem.setData(self, value, role)
def _append_items(self, item, deep): path = item.data(self.DATA_INC_FILE) if not path: path = item.data(self.DATA_FILE) if path in GRAPH_CACHE: for inc_lnr, inc_path in GRAPH_CACHE[path]: pkg, _ = package_name(os.path.dirname(inc_path)) itemstr = '%s [%s]' % (os.path.basename(inc_path), pkg) inc_item = QStandardItem('%d: %s' % (inc_lnr + 1, itemstr)) inc_item.setData(path, self.DATA_FILE) inc_item.setData(inc_lnr + 1, self.DATA_LINE) inc_item.setData(inc_path, self.DATA_INC_FILE) inc_item.setData(deep, self.DATA_LEVEL) self._append_items(inc_item, deep + 1) item.appendRow(inc_item)
def setData(self, value, role=Qt.EditRole): if role == Qt.EditRole: # rename the file or folder if self.name != value and self.id in [self.RECENT_FILE, self.LAUNCH_FILE, self.RECENT_PROFILE, self.PROFILE, self.CFG_FILE, self.FOLDER]: new_path = os.path.join(os.path.dirname(self.path), value) if not os.path.exists(new_path): os.rename(self.path, new_path) if self.name != value and self.id in [self.RECENT_FILE, self.RECENT_PROFILE]: # update in history nm.settings().launch_history_add(new_path, replace=self.path) self.name = value self.path = new_path else: MessageBox.warning(self, "Path already exists", "`%s` already exists!" % value, "Complete path: %s" % new_path) return QStandardItem.setData(self, value, role)
def _refill_tree(self, included_from, includes, create_tree=True): deep = 0 file_dsrc = self._root_path try: file_dsrc = os.path.basename(self._root_path) except Exception: pass self.setWindowTitle("Include Graph - %s" % file_dsrc) if not self._created_tree and create_tree: with CHACHE_MUTEX: if self._root_path in GRAPH_CACHE: pkg, _ = package_name(os.path.dirname(self._root_path)) itemstr = '%s [%s]' % (os.path.basename( self._root_path), pkg) inc_item = QStandardItem('%s' % itemstr) inc_item.setData(self._root_path, self.DATA_FILE) inc_item.setData(-1, self.DATA_LINE) inc_item.setData(self._root_path, self.DATA_INC_FILE) inc_item.setData(deep, self.DATA_LEVEL) self._append_items(inc_item, deep + 1) self.graphTreeView.model().appendRow(inc_item) # self.graphTreeView.expand(self.graphTreeView.model().indexFromItem(inc_item)) self._created_tree = True items = self.graphTreeView.model().match( self.graphTreeView.model().index(0, 0), self.DATA_INC_FILE, self._current_path, 10, Qt.MatchRecursive) first = True self.graphTreeView.selectionModel().clearSelection() for item in items: if first: self._current_deep = item.data(self.DATA_LEVEL) self.graphTreeView.selectionModel().select( item, QItemSelectionModel.SelectCurrent) first = False else: self.graphTreeView.selectionModel().select( item, QItemSelectionModel.Select) self.graphTreeView.expandAll()
def _refill_tree(self, tree, create_tree=True): deep = 0 file_dsrc = self._root_path try: file_dsrc = os.path.basename(self._root_path) except Exception: pass self.setWindowTitle("Include Graph - %s" % file_dsrc) if not self._created_tree and create_tree: has_none_packages = False self.graphTreeView.model().clear() pkg, _ = package_name(os.path.dirname(self._root_path)) if pkg is None: has_none_packages = True itemstr = '%s [%s]' % (os.path.basename(self._root_path), pkg) inc_item = QStandardItem('%s' % itemstr) inc_item.setData(self._root_path, self.DATA_FILE) inc_item.setData(-1, self.DATA_LINE) inc_item.setData(self._root_path, self.DATA_INC_FILE) inc_item.setData(deep, self.DATA_LEVEL) self._append_items(inc_item, deep, tree) self.graphTreeView.model().appendRow(inc_item) # self.graphTreeView.expand(self.graphTreeView.model().indexFromItem(inc_item)) self._created_tree = True self.has_none_packages = has_none_packages items = self.graphTreeView.model().match( self.graphTreeView.model().index(0, 0), self.DATA_INC_FILE, self._current_path, 10, Qt.MatchRecursive) first = True self.graphTreeView.selectionModel().clear() for item in items: if first: self._current_deep = item.data(self.DATA_LEVEL) first = False self.graphTreeView.selectionModel().select( item, QItemSelectionModel.Select) self.graphTreeView.expandAll() self.finished_signal.emit()
def setData(self, value, role=Qt.EditRole): if role == Qt.EditRole: # rename the file or folder if (self.name != value or self._isnew) and self.id in [ self.RECENT_FILE, self.LAUNCH_FILE, self.RECENT_PROFILE, self.PROFILE, self.CFG_FILE, self.FOLDER ]: if self.name != value: # some sanity checks if self.model()._exists(value): result = MessageBox.question( self.model().viewobj, "File exists", "File '%s' exists. Override?" % value, buttons=MessageBox.Yes | MessageBox.No) if result == MessageBox.No: return QStandardItem.setData(self, value, role) if self.id not in [self.FOLDER]: _filename, file_extension = os.path.splitext(value) if file_extension not in nm.settings( ).launch_view_file_ext: result = MessageBox.question( self.model().viewobj, "Unknown extension", "New name has unknown extension '%s'. Rename anyway?" % file_extension, buttons=MessageBox.Yes | MessageBox.No) if result == MessageBox.No: return QStandardItem.setData(self, value, role) new_path = os.path.join(os.path.dirname(self.path), value) try: # save a new file or rename existing file? content = b'' new_id = self._identify_path_on_ext(new_path, self.id) if self._isnew: if new_id in [self.FOLDER]: nm.nmd().file.new(new_path, 1) elif new_id in [self.LAUNCH_FILE]: content = ( b'<launch>\n' b' <arg name="robot_ns" default="my_robot"/>\n' b' <group ns="$(arg robot_ns)">\n' b' <node pkg="my_pkg" type="my_node" name="my_name" >\n' b' <param name="capability_group" value="MY_GROUP"/>\n' b' </node>\n' b' </group>\n' b'</launch>\n') nm.nmd().file.save_file(new_path, content, 0) else: nm.nmd().file.new(new_path, 0) self._isnew = False else: nm.nmd().file.rename(self.path, new_path) # check for new file extension if new_id != self.id: self.id = new_id self._update_icon() if self.name != value and self.id in [ self.RECENT_FILE, self.RECENT_PROFILE ]: # update in history nm.settings().launch_history_add(new_path, replace=self.path) self.name = value self._path = new_path except Exception as err: import traceback rospy.logwarn("Error while save new file: %s" % traceback.format_exc()) MessageBox.warning(None, "Rename failed", utf8(err)) return QStandardItem.setData(self, value, role)
def _append_items(self, item, deep, items=[]): sub_items = [] inc_item = None for inc_file in items: if inc_file.rec_depth == deep: if inc_item is not None: if sub_items: self._append_items(inc_item, deep + 1, sub_items) sub_items = [] item.appendRow(inc_item) inc_item = None if inc_item is None: pkg, _ = package_name(os.path.dirname(inc_file.inc_path)) size_color = 'gray' if inc_file.size == 0 or inc_file.size > 1000000: size_color = 'orange' itemstr = '%s <span style="color:%s;"><em>%s</em></span> [%s]' % (os.path.basename(inc_file.inc_path), size_color, sizeof_fmt(inc_file.size), pkg) inc_item = QStandardItem('%d: %s' % (inc_file.line_number, itemstr)) inc_item.setData(self.ITEM_TYPE_INC_FILE, self.ITEM_TYPE) inc_item.setData(inc_file.path_or_str, self.DATA_FILE) inc_item.setData(inc_file.line_number, self.DATA_LINE) inc_item.setData(inc_file.inc_path, self.DATA_INC_FILE) inc_item.setData(inc_file.rec_depth + 1, self.DATA_LEVEL) inc_item.setData(inc_file.size, self.DATA_SIZE) inc_item.setData(inc_file.raw_inc_path, self.DATA_RAW) inc_item.setData(inc_file.args, self.DATA_ARGS) inc_item.setData(inc_file.unset_default_args, self.DATA_DEF_ARGS_NOT_SET) # add included arguments if inc_file.unset_default_args or inc_file.args: arg_item = QStandardItem('arguments') arg_item.setData(self.ITEM_TYPE_INC_GROUP_ARG, self.ITEM_TYPE) if inc_file.unset_default_args: self.has_warnings = True arg_item.setIcon(self._info_icon) for da_name, da_value in inc_file.unset_default_args.items(): da_item = QStandardItem('<arg_not_set>%s: %s' % (da_name, da_value)) da_item.setData(self.ITEM_TYPE_INC_ARG, self.ITEM_TYPE) da_item.setData(inc_file.path_or_str, self.DATA_FILE) da_item.setData(inc_file.inc_path, self.DATA_INC_FILE) da_item.setData(da_name, self.DATA_ARG_NAME) da_item.setToolTip("This argument is definded as default, but no set while include.") arg_item.appendRow(da_item) if inc_file.args: for da_name, da_value in inc_file.args.items(): da_item = QStandardItem('<arg>%s: %s' % (da_name, da_value)) da_item.setData(self.ITEM_TYPE_INC_ARG, self.ITEM_TYPE) da_item.setData(inc_file.path_or_str, self.DATA_FILE) da_item.setData(inc_file.inc_path, self.DATA_INC_FILE) da_item.setData(da_name, self.DATA_ARG_NAME) arg_item.appendRow(da_item) inc_item.appendRow(arg_item) elif inc_file.rec_depth > deep: sub_items.append(inc_file) if inc_item is not None: if sub_items: self._append_items(inc_item, deep + 1, sub_items) sub_items = [] item.appendRow(inc_item) inc_item = None
def _refill_tree(self, tree, create_tree=True): deep = 0 file_dsrc = self._root_path try: file_dsrc = os.path.basename(self._root_path) except Exception: pass self.setWindowTitle("Include Graph - %s" % file_dsrc) if not self._created_tree and create_tree: has_none_packages = False self.graphTreeView.model().clear() pkg, _ = package_name(os.path.dirname(self._root_path)) if pkg is None: has_none_packages = True itemstr = '%s [%s]' % (os.path.basename(self._root_path), pkg) inc_item = QStandardItem('%s' % itemstr) inc_item.setData(self.ITEM_TYPE_INC_FILE, self.ITEM_TYPE) inc_item.setData(self._root_path, self.DATA_FILE) inc_item.setData(-1, self.DATA_LINE) inc_item.setData(self._root_path, self.DATA_INC_FILE) inc_item.setData(deep, self.DATA_LEVEL) # add included arguments for root file launch_args = nm.nmd().launch.launch_args(self._root_path) if launch_args: arg_item = QStandardItem('arguments') arg_item.setData(self.ITEM_TYPE_INC_GROUP_ARG, self.ITEM_TYPE) for da_name, da_value in launch_args.items(): da_item = QStandardItem('<arg>%s: %s' % (da_name, da_value)) da_item.setData(self.ITEM_TYPE_INC_ARG, self.ITEM_TYPE) da_item.setData(self._root_path, self.DATA_FILE) da_item.setData(da_name, self.DATA_ARG_NAME) arg_item.appendRow(da_item) inc_item.appendRow(arg_item) self._append_items(inc_item, deep, tree) self.graphTreeView.model().appendRow(inc_item) # self.graphTreeView.expand(self.graphTreeView.model().indexFromItem(inc_item)) self._created_tree = True self.has_none_packages = has_none_packages items = self.graphTreeView.model().match(self.graphTreeView.model().index(0, 0), self.DATA_INC_FILE, self._current_path, 10, Qt.MatchRecursive) first = True self.graphTreeView.selectionModel().clear() for item in items: if first: self._current_deep = item.data(self.DATA_LEVEL) first = False self.graphTreeView.selectionModel().select(item, QItemSelectionModel.Select) self.graphTreeView.expandAll() # collapse argument nodes proxy = self.graphTreeView.model() for row in range(proxy.rowCount()): index = proxy.index(row, 0) item = proxy.itemFromIndex(index) self._collapse_args(item) self.finished_signal.emit()
def setData(self, value, role=Qt.EditRole): if role == Qt.EditRole: self._value = value if hasattr(self._settings, self._attrname): setattr(self._settings, self._attrname, value) return QStandardItem.setData(self, value, role)
def _append_items(self, item, deep, items=[]): sub_items = [] inc_item = None for inc_file in items: if inc_file.rec_depth == deep: if inc_item is not None: if sub_items: self._append_items(inc_item, deep + 1, sub_items) sub_items = [] item.appendRow(inc_item) inc_item = None if inc_item is None: pkg, _ = package_name(os.path.dirname(inc_file.inc_path)) size_color = 'gray' if inc_file.size == 0 or inc_file.size > 1000000: size_color = 'orange' itemstr = '%s <span style="color:%s;"><em>%s</em></span> [%s]' % ( os.path.basename(inc_file.inc_path), size_color, sizeof_fmt(inc_file.size), pkg) inc_item = QStandardItem('%d: %s' % (inc_file.line_number, itemstr)) inc_item.setData(inc_file.path_or_str, self.DATA_FILE) inc_item.setData(inc_file.line_number, self.DATA_LINE) inc_item.setData(inc_file.inc_path, self.DATA_INC_FILE) inc_item.setData(inc_file.rec_depth + 1, self.DATA_LEVEL) inc_item.setData(inc_file.size, self.DATA_SIZE) inc_item.setData(inc_file.raw_inc_path, self.DATA_RAW) inc_item.setData(inc_file.args, self.DATA_ARGS) elif inc_file.rec_depth > deep: sub_items.append(inc_file) if inc_item is not None: if sub_items: self._append_items(inc_item, deep + 1, sub_items) sub_items = [] item.appendRow(inc_item) inc_item = None