def _remove_search_result(self, index): try: (id_path, _search_text, _found, path, index, _endidx, _linenr, _line) = self.search_results.pop(index) pkg, _rpath = package_name(os.path.dirname(path)) itemstr = '%s [%s]' % (os.path.basename(path), pkg) found_items = self.found_files_list.findItems( itemstr, Qt.MatchExactly) for item in found_items: for chi in range(item.childCount()): child = item.child(chi) if child.whatsThis(0) == id_path: item.removeChild(child) break # delete top level item if it is now empty for topidx in range(self.found_files_list.topLevelItemCount()): if self.found_files_list.topLevelItem( topidx).childCount() == 0: self.found_files_list.takeTopLevelItem(topidx) break # create new set with files contain the search text new_path_set = set(path for _id, _st, _fd, path, _idx, _endidx, _lnr, _lntxt in self.search_results) self.search_results_fileset = new_path_set # self.found_files_list.setVisible(len(self.search_results_fileset) > 0) except Exception: import traceback print(traceback.format_exc())
def dropEvent(self, e): if self.isReadOnly(): return cursor = self.cursorForPosition(e.pos()) if not cursor.isNull(): text = e.mimeData().text() # the files will be included if text.startswith('grpc://'): # find the package name containing the included file (package, path) = package_name(os.path.dirname(text)) if text.endswith('.launch'): if package: cursor.insertText('<include file="$(find %s)%s" />' % (package, text.replace(path, ''))) else: cursor.insertText('<include file="%s" />' % text) else: if package: cursor.insertText( '<rosparam file="$(find %s)%s" command="load" />' % (package, text.replace(path, ''))) else: cursor.insertText( '<rosparam file="%s" command="load" />' % text) else: cursor.insertText(e.mimeData().text()) e.accept()
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 on_search_result(self, search_text, found, path, startpos, endpos, linenr, line): ''' Slot to handle the signals for search result. This signals are forwarded used found_signal. ''' if found and search_text == self.current_search_text: id_path = "%d|%s" % (startpos, path) self.search_results_fileset.add(path) item = (search_text, found, path, startpos) if item not in self.search_results: self.search_results.append((id_path, search_text, found, path, startpos, endpos, linenr, line)) if hasattr(self, '_wait_for_result') and self._wait_for_result: self._search_result_index += 1 if startpos >= self._tabwidget.currentWidget().textCursor( ).position() or self._tabwidget.currentWidget( ).filename != path: self._wait_for_result = False self.found_signal.emit(search_text, found, path, startpos, endpos, linenr, line) self.replace_button.setEnabled(True) pkg, _rpath = package_name(os.path.dirname(path)) itemstr = '%s [%s]' % (os.path.basename(path), pkg) if not self.found_files_list.findItems(itemstr, Qt.MatchExactly): list_item = QTreeWidgetItem(self.found_files_list) list_item.setText(0, itemstr) list_item.setToolTip(0, path) self.found_files_list.insertTopLevelItem(0, list_item) self.found_files_list.expandAll() for i in range(self.found_files_list.topLevelItemCount()): top_item = self.found_files_list.topLevelItem(i) if top_item.text(0) == itemstr: sub_item_str = "%d: %s" % (linenr, line) list_item2 = QTreeWidgetItem() list_item2.setText(0, sub_item_str) list_item2.setWhatsThis(0, id_path) top_item.addChild(list_item2) self._update_label()
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 _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
def __getTabName(self, lfile): base = os.path.basename(lfile).replace('.launch', '') (package, _) = package_name(os.path.dirname(lfile)) return '%s [%s]' % (base, package)