def __init__(self, parent=None, pth=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_Form() self.ui.setupUi(self) self.IDE = parent self.ui.fr_settings.hide() # Set Default Path if pth == None: pth = os.path.expanduser('~') self.ui.le_path.setText(pth) # Set default extensions if 'default_ext' in self.IDE.settings['plugins']['find_files']: self.ui.le_ext.setText( self.IDE.settings['plugins']['find_files']['default_ext']) if parent != None: # IDE specific code if self.IDE.currentWorkspace != None and self.IDE.workspaces[ self.IDE.currentWorkspace]['basefolder'] != None: self.ui.le_path.setText(self.IDE.workspaces[ self.IDE.currentWorkspace]['basefolder']) else: self.ui.tr_results.setStyleSheet('') # Signals self.ui.b_search.clicked.connect(self.search_click) self.ui.b_browse.clicked.connect(self.browse) self.ui.tr_results.itemDoubleClicked.connect(self.itmDClick) self.ui.tr_results.resizeColumnToContents(1) self.ui.tr_results.sortByColumn(0, 0)
class Find_Files(QtGui.QWidget): def __init__(self, parent=None, pth=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_Form() self.ui.setupUi(self) self.IDE = parent self.ui.fr_settings.hide() # Set Default Path if pth == None: pth = os.path.expanduser('~') self.ui.le_path.setText(pth) # Set default extensions if 'default_ext' in self.IDE.settings['plugins']['find_files']: self.ui.le_ext.setText( self.IDE.settings['plugins']['find_files']['default_ext']) if parent != None: # IDE specific code if self.IDE.currentWorkspace != None and self.IDE.workspaces[ self.IDE.currentWorkspace]['basefolder'] != None: self.ui.le_path.setText(self.IDE.workspaces[ self.IDE.currentWorkspace]['basefolder']) else: self.ui.tr_results.setStyleSheet('') # Signals self.ui.b_search.clicked.connect(self.search_click) self.ui.b_browse.clicked.connect(self.browse) self.ui.tr_results.itemDoubleClicked.connect(self.itmDClick) self.ui.tr_results.resizeColumnToContents(1) self.ui.tr_results.sortByColumn(0, 0) def search_click(self): if self.ui.b_search.isChecked(): self.ui.b_search.setIcon(QtGui.QIcon('style/img/stop.png')) self.search() else: self.ui.b_search.setIcon(QtGui.QIcon('style/img/search.png')) def search(self): pth = str(self.ui.le_path.text()) ext = tuple(str(self.ui.le_ext.text()).split(',')) stxt = str(self.ui.le_search.text()) # Check Type search_type = 0 if self.ui.ckbx_reg.isChecked(): search_type = 2 elif self.ui.ckbx_case.isChecked(): search_type = 1 else: stxt = stxt.lower() # no case match self.ui.tr_results.clear() if not os.path.exists(pth): QtGui.QMessageBox.warning(self, 'Invalid Path', 'The path is invalid<br><br>' + pth) else: for root, dirnames, filenames in os.walk(pth): self.ui.l_cur_file.setText(root) QtGui.QApplication.processEvents() if not self.ui.b_search.isChecked(): break for filename in filenames: filepath = os.path.join(root, filename) self.ui.l_cur_file.setText(filepath) QtGui.QApplication.processEvents() if not self.ui.b_search.isChecked(): break # Search in file if filename.endswith(ext): self.searchFile(filepath, stxt, search_type) self.ui.l_cur_file.setText('') self.ui.b_search.setChecked(0) self.ui.tr_results.resizeColumnToContents(0) self.ui.tr_results.resizeColumnToContents(2) self.ui.b_search.setIcon(QtGui.QIcon('style/img/search.png')) def searchFile(self, filepath, search_text, search_type): stxt = search_text itm = None if stxt in filepath: itm = self.addFileItem(filepath) # Check in file cnt = 0 line_cnt = 0 try: with open(filepath, 'rU') as searchfile: for line in searchfile: cnt += 1 found = 0 if search_type == 0: # no options if stxt in line.lower(): found = 1 elif search_type == 1: # match case if stxt in line: found = 1 elif search_type == 2: # regular expression m = re.search(stxt, line) if m != None: found = 1 if found: line_cnt += 1 if itm == None: itm = self.addFileItem(filepath) l = line.replace('\n', '').replace('\r', '') litm = QtGui.QTreeWidgetItem(['', str(cnt), l]) for i in range(3): litm.setBackground( i, QtGui.QBrush(QtGui.QColor(30, 30, 30))) litm.setForeground( 2, QtGui.QBrush(QtGui.QColor(255, 255, 255))) litm.setForeground( 1, QtGui.QBrush(QtGui.QColor(150, 150, 150))) litm.setTextAlignment(1, 2) itm.addChild(litm) if not self.ui.b_search.isChecked(): break except: print('ERROR opening: ' + filepath) if itm != None: itm.setText(1, str(line_cnt)) def addFileItem(self, filename, lines=0): pth, f = os.path.split(filename) itm = QtGui.QTreeWidgetItem([f, str(lines), pth]) # Set icon if self.IDE != None: ext = f.split('.')[-1] if ext in ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'ico']: ipth = filename elif ext in self.IDE.settings['extensions']: ext = self.IDE.settings['extensions'][ext] ipth = self.IDE.iconPath + 'files/' + ext + '.png' else: ipth = self.IDE.iconPath + 'files/blank.png' itm.setIcon(0, QtGui.QIcon(ipth)) self.ui.tr_results.addTopLevelItem(itm) return itm def browse(self): npth = QtGui.QFileDialog.getExistingDirectory( self, 'Select directory to search', self.ui.le_path.text()) if not npth.isEmpty(): self.ui.le_path.setText(npth) #---IDE Functions def itmDClick(self, itm, col): if self.IDE != None: if itm.parent() != None: pth = os.path.join(str(itm.parent().text(2)), str(itm.parent().text(0))) ok = self.IDE.openFile(pth) if ok: self.IDE.currentEditor().gotoLine( int(str(itm.text(1))) - 1) elif col > 0: pth = os.path.join(str(itm.text(2)), str(itm.text(0))) self.IDE.openFile(pth) def changeWorkspace(self, wksp): if wksp != 'None': wksp = str(wksp) if self.IDE.workspaces[wksp]['basefolder'] != None: self.ui.le_path.setText( self.IDE.workspaces[wksp]['basefolder'])