import sys try: import pygtk pygtk.require("2.0") except: pass try: import gtk import gtk.glade except: sys.exit(1) import os import threading import time import gobject class HellowWorldGTK: """This is an Hello World GTK application""" def __init__(self): #Set the Glade file self.gladefile = "afarrr/afarrr.glade" self.wTree = gtk.glade.XML(self.gladefile) dic = { "on_closeButton_clicked" : gtk.main_quit, "on_findButton_clicked" : self.findButton_clicked, "on_findAndReplaceButton_clicked" : self.findAndReplaceButton_clicked, "on_afar_dialog_close" : gtk.main_quit } self.wTree.signal_autoconnect(dic) self.dialog = self.wTree.get_widget("afar-dialog") #Tree Result self.treeview=self.wTree.get_widget("resultsTreeView") self.treemodel=gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING) self.treeview.set_model(self.treemodel) self.treeview.set_headers_visible(True) renderer=gtk.CellRendererText() column=gtk.TreeViewColumn("Path",renderer,text=0) column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) column.set_fixed_width(250) column.set_resizable(True) self.treeview.append_column(column) renderer=gtk.CellRendererText() column=gtk.TreeViewColumn("Line",renderer,text=1) column.set_resizable(True) self.treeview.append_column(column) self.treeview.show() #Directory Chooser self.dirchooser = self.wTree.get_widget("directoryChooser") #Results Expander self.resultsExpander = self.wTree.get_widget("resultsExpander") #Find Entry self.findEntry = self.wTree.get_widget("findEntry") #Replace with Entry self.replaceEntry = self.wTree.get_widget("replaceEntry") def closeButton_clicked(self, widget): gtk.Widget.destroy def findButton_clicked(self, widget): self.find_in_directory() def findAndReplaceButton_clicked(self, widget): self.find_in_directory(True) def add_result(self,parent,pathColumn,lineColumn): model = self.treemodel myiter=model.insert_after(parent,None) model.set_value(myiter,0,pathColumn) model.set_value(myiter,1,lineColumn) return myiter def find_in_directory(self,replace=False): self.resultsExpander.set_expanded(True) self.treemodel.clear() dirChooser = self.dirchooser findEntry = self.findEntry replaceEntry = self.replaceEntry #self.add_result(None,dirChooser.get_filename(),None) if findEntry.get_buffer().get_char_count() == 0: self.add_result(None,"I dont know what is need to be found" ,None) findEntry.grab_focus() return elif replace == True and replaceEntry.get_buffer().get_char_count() == 0: self.add_result(None,"I dont know what is used to be replacment",None) replaceEntry.grab_focus() return dirPath = dirChooser.get_filename() findString = findEntry.get_buffer().get_text(*findEntry.get_buffer().get_bounds()) replaceString = replaceEntry.get_buffer().get_text(*replaceEntry.get_buffer().get_bounds()) t = MyThread(self,dirPath,findString,replaceString) t.start() #os.path.walk(dirPath, self.myfun, 3) #print dirPath def myfun(self,dummy, dir, files): for fileEntry in files: self.add_result(None, dir+os.sep+fileEntry,None) class MyThread(threading.Thread): def __init__(self, klass, dirPath, findString, replaceString): super(MyThread, self).__init__() self.klass = klass self.dirPath = dirPath self.findString = findString self.replaceString = replaceString self.quit = False def update_result(self, path, line): #self.result.set_text("Counter: %i" % counter) print path return False def run(self): gobject.idle_add(os.path.walk, self.dirPath, self.myfun, 3) def myfun(self,dummy, dir, files): for fileEntry in files: self.update_result(dir+os.sep+fileEntry, None) #self.add_result(None, dir+os.sep+fileEntry,None) if __name__ == "__main__": gobject.threads_init() hwg = HellowWorldGTK() gtk.main()