Example #1
0
    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())
Example #2
0
 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()
Example #3
0
 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
Example #4
0
 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()
Example #5
0
 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()
Example #6
0
 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()
Example #7
0
 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
Example #8
0
 def __getTabName(self, lfile):
     base = os.path.basename(lfile).replace('.launch', '')
     (package, _) = package_name(os.path.dirname(lfile))
     return '%s [%s]' % (base, package)