rendered paste bodyimport 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()