# Programmer: Franz Steinhaeusler
# E-mail: francescoa@users.sourceforge.net
# Note: You must reply to the verification e-mail to get through.
#
# Copyright 2004-2005 Franz Steinhaeusler
#
# Distributed under the terms of the GPL (GNU Public License)
#
# DrPython is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#Plugin
#FindFiles
#10.08.2004 initial version 0.0.0
#07.09.2004 version 0.0.1
#28.08.2004 version 0.0.2
#03.10.2004 version 0.0.3
#11.10.2004 version 0.0.4
#until 20.10.2004 version 0.0.5
#26.10.2004 version 0.0.6
#27.10.2004 version 0.0.7
#Bugfix: Thanks Dan Pozmanter: if there was no history file, then an exception occured.
#until 23.11.2004 version 0.0.8
#until 21.01.2005 version 0.0.9
#08.04.2007 version 0.1.0
#for changes please view the changelog file
#for pychecker
#import sys
#sys.path.append('c:/Eigene Dateien/python/drpython')
import wx
import drScrolledMessageDialog
import os
import re
import drPrefsFile
import wx.lib.mixins.listctrl as listmix
import cStringIO
def OnAbout(DrFrame):
Version = "0.1.0"
NameAndVersion = "FindFiles:\n\nVersion: " + Version + "\n"
AboutString = NameAndVersion + "By Franz Steinhaeusler\n\nReleased under the GPL."
drScrolledMessageDialog.ShowMessage(DrFrame, AboutString, "About")
def OnHelp(DrFrame):
drScrolledMessageDialog.ShowMessage(DrFrame, "FindFiles", "Help")
def OnPreferences(DrFrame):
d = FindFilesPrefsDialog(DrFrame, -1)
d.ShowModal()
d.Destroy()
class FindFilesPrefsDialog(wx.Dialog):
def __init__(self, parent, id):
wx.Dialog.__init__(self, parent, id, "FindFiles Preferences", wx.Point(50, 50), \
wx.Size(220, 160), wx.DEFAULT_DIALOG_STYLE | wx.MAXIMIZE_BOX | wx.THICK_FRAME | wx.RESIZE_BORDER)
self.parent = parent
self.chkSaveSizePosition = wx.RadioBox(self, -1, "Size/Position", \
choices = ["Do not save", "Save manually", "Save automatically"],\
style = wx.RA_SPECIFY_ROWS)
self.chkSaveSizePosition.SetSelection(self.parent.FindFiles_savesizeposition)
self.theSizer = wx.FlexGridSizer(5, 3, 5, 10)
self.theSizer.Add(self.chkSaveSizePosition, 1, wx.GROW)
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
self.SetAutoLayout(True)
self.SetSizer(self.theSizer)
self.buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
self.btnCancel = wx.Button(self, wx.ID_CANCEL, "&Close")
self.btnSave = wx.Button(self, wx.ID_OK, "&Save")
self.btnSave.SetDefault()
self.buttonSizer.Add(self.btnCancel, 1, wx.SHAPED)
self.buttonSizer.Add(self.btnSave, 1, wx.GROW)
self.theSizer.Add(self.buttonSizer, 0, wx.SHAPED | wx.ALIGN_CENTER)
self.theSizer.Add(wx.StaticText(self, -1, " "), 0, wx.SHAPED | wx.ALIGN_CENTER)
self.theSizer.Add(wx.StaticText(self, -1, " "), 0, wx.SHAPED | wx.ALIGN_CENTER)
if parent.PLATFORM_IS_WIN:
self.SetSizerAndFit(self.theSizer)
self.Bind(wx.EVT_BUTTON, self.OnbtnClose, id = wx.ID_CANCEL)
self.Bind(wx.EVT_BUTTON, self.OnbtnSave, id = wx.ID_OK)
self.Bind(wx.EVT_RADIOBOX, self.OnSizePos, id = -1)
def OnSizePos (self, event):
if event.GetSelection() == 0:
if os.path.exists (self.parent.pluginsdatdirectory + '/FindFiles.sizepos.dat'):
answer = wx.MessageBox("Delete sizeandposition entries?", "Warning", wx.YES_NO | wx.ICON_QUESTION)
if answer == wx.YES:
os.remove(self.parent.pluginsdatdirectory + '/FindFiles.sizepos.dat')
def OnbtnClose(self, event):
self.EndModal(0)
def OnbtnSave (self, event):
self.parent.FindFiles_savesizeposition = int(self.chkSaveSizePosition.GetSelection())
f = file(self.parent.pluginspreferencesdirectory + "/FindFiles.preferences.dat", 'w')
f.write("<findfiles.savesizeposition>" + str(self.parent.FindFiles_savesizeposition) + "</findfiles.savesizeposition>\n")
f.close()
def Plugin(DrFrame):
class DirComboBox (wx.ComboBox):
def __init__(self, parent, id, name, pos, size):
wx.ComboBox.__init__(self, parent, id, name, pos, size, style=wx.CB_DROPDOWN)
self.SetBackgroundColour(wx.Colour(244, 244, 232))
self.parent = parent
self.focuschanged = False
self.focusstate = False
self.refresh = False
self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
self.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus)
self.Bind(wx.EVT_IDLE, self.OnIdle)
#workaround for wxPython-bug (at least on wxMSW)
def OnIdle(self, event):
if self.focuschanged:
if self.focusstate == True:
pass
else:
if self.refresh:
self.OnKillFocusAction(event)
self.focuschanged = False
event.Skip()
def OnKillFocus (self, event):
if self.parent.allow:
#on gtk, the event is always fired properly
#otherwise this circumstantial code is needed for windows
if DrFrame.PLATFORM_IS_WIN:
self.focuschanged = True
self.focusstate = False
self.refresh = True
focuswindow = wx.Window.FindFocus()
#this findfocus returen on gkt ALWAYS None, so don't care for it
if isinstance (focuswindow, wx.Button):
if focuswindow.GetLabel() == "&Browse":
self.refresh = False
else:
if focuswindow is None:
#changed to another app
self.refresh = False
else:
self.OnKillFocusAction(event)
event.Skip()
event.Skip()
def OnSetFocus (self, event):
if self.parent.allow:
self.focuschanged = True
self.focusstate = True
event.Skip()
def OnKillFocusAction(self, event):
self.parent.OnDirectorySelect(event)
#self.parent.btnOk.SetDefault()
class FileTextCtrl (wx.TextCtrl):
def __init__(self, parent, id, name, pos, size):
wx.TextCtrl.__init__(self, parent, id, name, pos, size)
self.SetBackgroundColour(wx.Colour(244, 244, 232))
self.parent = parent
self.Bind(wx.EVT_CHAR, self.OnChar)
def OnChar(self, event):
listctrlkeys = [wx.WXK_DOWN, wx.WXK_UP, wx.WXK_NEXT, wx.WXK_PRIOR]
kcode = event.GetKeyCode()
if kcode in listctrlkeys:
keyindex = listctrlkeys.index (kcode)
singlestep = False
pagestep = False
#singlestep
if keyindex < 2:
singlestep = True
singleinc = False
if keyindex == 0:
singleinc = True
else:
#pagestep
if keyindex < 4:
pagestep = True
pageinc = False
if keyindex == 2:
pageinc = True
else:
if keyindex < 6:
if event.ControlDown():
to_end = False
if keyindex == 4:
to_end = True
else:
sortfname = False
if keyindex == 6:
sortfname = True
self.parent.results.SetFocus()
if keyindex < 6:
index = -1
olditem = -1
itemcount = self.parent.results.GetItemCount()
#deselect all former selected items
for i in range (itemcount):
index = self.parent.results.GetNextItem(index, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED)
if index == -1:
break
self.parent.results.SetItemState(index, wx.LIST_STATE_FOCUSED , wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED)
olditem = index
if itemcount > 0:
if singlestep:
if singleinc:
newindex = olditem + 1
if newindex >= itemcount:
newindex = 0
else:
newindex = olditem - 1
if newindex < 0:
newindex = itemcount - 1
else:
if pagestep:
singleitemhight = self.parent.results.GetItemRect(0)[3]
clienthight = self.parent.results.GetClientSize()[1] - 3# on windows -3
#todo: does it fit on gkt? not so accurate, doesn't matter, should function so halfway
visibleitems = (clienthight - singleitemhight) / singleitemhight
to_jump = visibleitems -1
if to_jump < 1:
to_jump = 1
if not pageinc:
to_jump = - to_jump
newindex = olditem + to_jump
if newindex >= itemcount:
newindex = itemcount - 1
if newindex < 0:
newindex = 0
else:
if to_end:
newindex = itemcount - 1
else:
newindex = 0
self.parent.results.SetItemState(newindex, wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED , wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED)
self.parent.results.EnsureVisible(newindex)
else:
event.Skip()
self.SetFocus()
class FileListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
def __init__(self, parent, ID, pos, size, style):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
self.SetBackgroundColour(wx.Colour(244, 244, 232))
listmix.ListCtrlAutoWidthMixin.__init__(self)
class EditDlg(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, (400, 400), #wx.DefaultSize,
wx.DEFAULT_DIALOG_STYLE | wx.MAXIMIZE_BOX | wx.THICK_FRAME | wx.RESIZE_BORDER)
self.parent = parent
self.filtertxtControl = wx.TextCtrl (self, -1, self.parent.parent.FindFiles_filterfilemask)
self.historyentries = wx.ListBox (self, -1, style = wx.LB_SINGLE)
self.btnOk = wx.Button (self, 5001, "&Ok")
self.btnDelete = wx.Button (self, 5002, "&Delete")
topSizer = wx.FlexGridSizer(10, 2, 10, 10)
topSizer.AddGrowableCol(1)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(wx.StaticText(self, -1, "example (without quotes): 'cpp;h;py;pyw;txt;log;bat;dat'"), 0)
topSizer.Add(wx.StaticText(self, -1, "File Extensions:"), 0)
topSizer.Add(self.filtertxtControl, 1, wx.GROW)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(wx.StaticText(self, -1, "History Entries: "), 0)
topSizer.Add(self.historyentries, 1, wx.GROW)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(self.btnOk, 1, 0)
topSizer.Add(self.btnDelete, 1, wx.GROW)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
topSizer.Add(wx.StaticText(self, -1, " "), 0)
self.SetSizer(topSizer)
if self.parent.parent.DirectoryHistory:
for i in self.parent.parent.DirectoryHistory:
self.historyentries.Append (i)
self.Bind(wx.EVT_BUTTON, self.OnbtnDelete, id = 5002)
self.Bind(wx.EVT_BUTTON, self.OnbtnOk, id = 5001)
def OnbtnDelete (self, event):
if self.historyentries.GetCount():
sel = self.historyentries.GetStringSelection ()
if sel:
if sel == self.parent.txtDirectory.GetValue():
self.parent.parent.ShowMessage("You cannot delete the currently selected item\nit is selected now", "Error")
return
answer = wx.MessageBox("Are you sure?", "Delete Entry?", wx.YES_NO | wx.ICON_QUESTION)
if answer == wx.NO:
return
index = self.parent.parent.DirectoryHistory.index (sel)
self.parent.parent.DirectoryHistory.pop (index)
#also from list
for i in range (len (self.parent.parent.FindFiles_AllFiles)):
if sel in self.parent.parent.FindFiles_AllFiles[i][0]:
self.parent.parent.FindFiles_AllFiles.pop (i)
break
self.historyentries.Clear()
if self.parent.parent.DirectoryHistory:
for i in self.parent.parent.DirectoryHistory:
self.historyentries.Append (i)
self.parent.WriteSavedFiles ()
#von parent auch aus history entfernen
for i in range (self.parent.txtDirectory.GetCount()):
if self.parent.txtDirectory.GetString(i) == sel:
self.parent.txtDirectory.Delete (i)
break
def OnbtnOk (self, event):
self.parent.parent.FindFiles_filterfilemask = self.filtertxtControl.GetValue()
self.Destroy()
class drFindFilesDialog(wx.Dialog):
def __init__(self, parent, id, title):
self.ID_REFRESH = 1001
self.ID_CHKSUBDIR = 1002
self.ID_CHKFILTER = 1003
self.ID_EDIT = 1004
self.ID_BROWSE = 1005
self.ID_SETTINGS = 1006
self.ID_ABOUT = 1007
self.ID_HELP = 1008
self.ID_CBOXDIRECTORY_FOCUS = 1009
self.ID_CBOXFILENAME_FOCUS = 1010
self.ID_RESULTS_FOCUS = 1011
self.ID_PREFERENCES = 1012
self.ID_SORTNAME_FOCUS = 1013
self.ID_SORTPATH_FOCUS = 1014
self.parent = parent
self.allow = False
self.maxhistoryentries = 10
self.oldsortcolumn = -1
self.listfiles = []
wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, (760, 438),\
wx.DEFAULT_DIALOG_STYLE | wx.MAXIMIZE_BOX | wx.THICK_FRAME | wx.RESIZE_BORDER)
self.txtDirectory = DirComboBox(self, 5001, "", wx.DefaultPosition, (550, -1))
self.txtFileName = FileTextCtrl(self, 5002, "", wx.DefaultPosition, (550, -1))
self.results = FileListCtrl (self, -1, wx.DefaultPosition, (550, 300), wx.LC_REPORT|wx.SUNKEN_BORDER )
self.results.InsertColumn(0, "Filename", wx.LIST_FORMAT_LEFT, 150)
self.results.InsertColumn(1, "Path", wx.LIST_FORMAT_LEFT,400)
self.btnBrowse = wx.Button(self, self.ID_BROWSE, "&Browse", size = (90, -1))
self.btnRefresh = wx.Button(self, self.ID_REFRESH, "&Refresh", size = (90, -1))
self.chksubdir = wx.CheckBox(self, self.ID_CHKSUBDIR, "Sub&Dirs:", style = wx.ALIGN_RIGHT)
self.chkfilter = wx.CheckBox(self, self.ID_CHKFILTER, "&Filter:", style = wx.ALIGN_RIGHT)
self.btnEdit = wx.Button(self, self.ID_EDIT, "&Edit", size = (90, -1))
self.btnOk = wx.Button(self, wx.ID_OK, "Selec&t", size = (90, -1))
self.btnSaveSize = wx.Button(self, self.ID_SETTINGS, "Sa&ve Size", size = (90, -1))
self.btnPreferences = wx.Button(self, self.ID_PREFERENCES, "&Preferences", size = (90, -1))
self.btnAbout = wx.Button(self, self.ID_ABOUT, "&About", size = (90, -1))
self.btnHelp = wx.Button(self, self.ID_HELP, "&Help", size = (90, -1))
self.btnClose = wx.Button(self, wx.ID_CANCEL, "&Close", size = (90, -1))
self.savefile = DrFrame.pluginsdatdirectory + "/FindFilesSavedFiles.log"
self.historyfile = DrFrame.pluginsdatdirectory + "/FindFilesHistory.log"
self.il = wx.ImageList(16, 16)
try:
self.sm_up = self.il.Add(self.getSmallUpArrowBitmap())
except:
self.sm_up = -1
try:
self.sm_dn = self.il.Add(self.getSmallDnArrowBitmap())
except:
self.sm_dn = -1
try:
self.loaded = self.il.Add(self.getFileLoadedBitmap())
except:
self.loaded = -1
try:
self.modified = self.il.Add(self.getFileModifiedBitmap())
except:
self.modified = -1
self.results.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
if not DrFrame.FindFiles_fileloaded:
DrFrame.FindFiles_AllFiles = []
DrFrame.DirectoryHistory = []
self.LoadSavedFiles()
DrFrame.FindFiles_fileloaded = True
else:
if DrFrame.DirectoryHistory:
for i in DrFrame.DirectoryHistory:
self.txtDirectory.Append (i)
self.txtDirectory.SetValue (DrFrame.DirectoryHistory[0])
self.cur_index = 0
try:
for l in range (len(DrFrame.FindFiles_AllFiles)):
if DrFrame.FindFiles_AllFiles[l][0] == DrFrame.DirectoryHistory[0]:
self.cur_index = l
break
except:
pass
self.chkfilter.SetValue (DrFrame.FindFiles_filter)
self.chksubdir.SetValue (DrFrame.FindFiles_subdir)
self.btnSaveSize.Enable (self.parent.FindFiles_savesizeposition == 1)
if DrFrame.FindFiles_AllFiles:
self.OnRefreshFileList()
self.olddir = ''
if DrFrame.DirectoryHistory:
self.olddir = DrFrame.DirectoryHistory[0]
commandSizer = wx.BoxSizer(wx.VERTICAL)
commandSizer.Add((0, 5), 0, wx.ALL, 0)
commandSizer.Add(self.btnBrowse, 0, wx.ALL, 0)
commandSizer.Add((0, 8), 0, wx.ALL, 0)
commandSizer.Add(self.btnRefresh, 0, wx.ALL, 0)
commandSizer.Add((0, 20), 0, wx.ALL, 0)
commandSizer.Add(self.chksubdir, 0, wx.ALL, 0)
commandSizer.Add((0, 20), 0, wx.ALL, 0)
commandSizer.Add(self.chkfilter, 0, wx.ALL, 0)
commandSizer.Add((0, 10), 0, wx.ALL, 0)
commandSizer.Add(self.btnEdit, 0, wx.ALL, 0)
commandSizer.Add((0, 15), 0, wx.ALL, 0)
commandSizer.Add(self.btnOk, 0, wx.ALL, 0)
commandSizer.Add((0, 15), 0, wx.ALL, 0)
commandSizer.Add(self.btnSaveSize, 0, wx.ALL, 0)
commandSizer.Add((0, 15), 0, wx.ALL, 0)
commandSizer.Add(self.btnPreferences, 0, wx.ALL, 0)
commandSizer.Add((0, 15), 0, wx.ALL, 0)
commandSizer.Add(self.btnAbout, 0, wx.ALL, 0)
commandSizer.Add((0, 15), 0, wx.ALL, 0)
commandSizer.Add(self.btnHelp, 0, wx.ALL, 0)
commandSizer.Add((0, 15), 0, wx.ALL, 0)
commandSizer.Add(self.btnClose, 0, wx.ALL, 0)
topSizer = wx.FlexGridSizer(2, 2, 10, 10)
topSizer.AddGrowableCol(1)
topSizer.Add(wx.StaticText(self, -1, "Director&y:"), 0)
topSizer.Add(self.txtDirectory, 1, wx.GROW)
topSizer.Add(wx.StaticText(self, -1, "File&Name: "), 0)
topSizer.Add(self.txtFileName, 1, wx.GROW)
leftSizer = wx.BoxSizer(wx.VERTICAL)
leftSizer.Add(topSizer, 0, wx.EXPAND | wx.ALL, 5)
leftSizer.Add(self.results, 1, wx.EXPAND | wx.ALL, 5)
newSizer = wx.BoxSizer(wx.HORIZONTAL)
newSizer.Add(leftSizer,1, wx.EXPAND | wx.ALL, 10)
newSizer.Add(commandSizer,0, wx.ALIGN_TOP | wx.ALL, 10)
self.SetSizer(newSizer)
self.results.SetItemState(0, wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED , wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED)
self.SetSizeHints(500, 438)
self.txtFileName.SetFocus()
wx.CallAfter(self.txtDirectory.SetMark, 0, 0)
self.btnOk.SetDefault()
tbl = wx.AcceleratorTable([(wx.ACCEL_ALT, ord('Y'), self.ID_CBOXDIRECTORY_FOCUS)
,(wx.ACCEL_ALT, ord('N'), self.ID_CBOXFILENAME_FOCUS)
,(wx.ACCEL_ALT, ord('L'), self.ID_RESULTS_FOCUS)
,(wx.ACCEL_NORMAL, wx.WXK_F3, self.ID_SORTNAME_FOCUS)
,(wx.ACCEL_NORMAL, wx.WXK_F2, self.ID_SORTPATH_FOCUS)])
self.SetAcceleratorTable(tbl)
self.Bind(wx.EVT_BUTTON, self.OnbtnRefresh, id = self.ID_REFRESH)
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemSelected, id = -1)
self.Bind(wx.EVT_TEXT, self.OnKeyDown, id = 5002)
self.Bind(wx.EVT_BUTTON, self.OnbtnClose, id = wx.ID_CANCEL)
self.Bind(wx.EVT_BUTTON, self.OnItemSelected, id = wx.ID_OK)
self.Bind(wx.EVT_CHECKBOX, self.OnCheckSubDir, id = self.ID_CHKSUBDIR)
self.Bind(wx.EVT_CHECKBOX, self.OnCheckFilter, id = self.ID_CHKFILTER)
self.Bind(wx.EVT_BUTTON, self.OnEdit, id = self.ID_EDIT)
self.Bind(wx.EVT_BUTTON, self.OnBrowse, id = self.ID_BROWSE)
self.Bind(wx.EVT_BUTTON, self.OnSettings, id = self.ID_SETTINGS)
self.Bind(wx.EVT_BUTTON, self.OnPreferences, id = self.ID_PREFERENCES)
self.Bind(wx.EVT_BUTTON, self.OnAbout, id = self.ID_ABOUT)
self.Bind(wx.EVT_BUTTON, self.OnHelp, id = self.ID_HELP)
self.Bind(wx.EVT_MENU, self.OnCBoxSearchDirectoryFocus, id = self.ID_CBOXDIRECTORY_FOCUS)
self.Bind(wx.EVT_MENU, self.OnCBoxFileNameSetFocus, id = self.ID_CBOXFILENAME_FOCUS)
self.Bind(wx.EVT_MENU, self.OnResultsSetFocus, id = self.ID_RESULTS_FOCUS)
self.Bind(wx.EVT_MENU, self.OnSortName, id = self.ID_SORTNAME_FOCUS)
self.Bind(wx.EVT_MENU, self.OnSortPath, id = self.ID_SORTPATH_FOCUS)
self.Bind(wx.EVT_LIST_COL_CLICK, self.OnHeaderClick, id = -1)
if self.parent.FindFiles_savesizeposition:
self.parent.LoadDialogSizeAndPosition(self, 'FindFiles.sizepos.dat', self.parent.pluginsdatdirectory)
self.allow = True
if DrFrame.FindFiles_lastentered != '':
self.txtFileName.SetValue (DrFrame.FindFiles_lastentered)
self.txtFileName.SetSelection (0, len(DrFrame.FindFiles_lastentered))
self.OnRefreshFileList()
def OnSortName (self, event):
self.nCol = 0
self.SortHeader()
def OnSortPath (self, event):
self.nCol = 1
self.SortHeader()
def OnHeaderClick(self, event):
self.nCol = event.GetColumn()
self.SortHeader()
event.Skip()
def columnSorter(self, key1, key2):
#lowercase is best solution
if not self.sort_asc:
#isn't this cool?
key1, key2 = key2, key1
item1 = self.listfiles[key1][self.nCol].lower()
item2 = self.listfiles[key2][self.nCol].lower()
if item1 == item2:
return 0
elif item1 < item2:
return -1
else:
return 1
def SortHeader(self, newsort = True):
self.reorderd = True
if newsort:
if self.oldsortcolumn != -1:
self.results.ClearColumnImage(self.oldsortcolumn)
if self.oldsortcolumn != self.nCol:
self.sort_asc = True
self.oldsortcolumn = self.nCol
else:
self.sort_asc = not self.sort_asc
if self.sort_asc:
idx = self.sm_up
else:
idx = self.sm_dn
self.results.SetColumnImage(self.nCol, idx)
else:
if self.oldsortcolumn == -1:
return
self.results.SortItems(self.columnSorter)
nItem = self.results.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED)
self.results.EnsureVisible(nItem)
def getSmallUpArrowBitmap(self):
return wx.BitmapFromImage(self.getSmallUpArrowImage())
def getSmallUpArrowImage(self):
stream = cStringIO.StringIO(self.getSmallUpArrowData())
return wx.ImageFromStream(stream)
def getSmallDnArrowBitmap(self):
return wx.BitmapFromImage(self.getSmallDnArrowImage())
def getSmallDnArrowImage(self):
stream = cStringIO.StringIO(self.getSmallDnArrowData())
return wx.ImageFromStream(stream)
def getFileLoadedBitmap(self):
return wx.BitmapFromImage(self.getFileLoadedImage())
def getFileLoadedImage(self):
stream = cStringIO.StringIO(self.getFileLoadedData())
return wx.ImageFromStream(stream)
def getFileModifiedBitmap(self):
return wx.BitmapFromImage(self.getFileModifiedImage())
def getFileModifiedImage(self):
stream = cStringIO.StringIO(self.getFileModifiedData())
return wx.ImageFromStream(stream)
def OnPreferences(self, event):
OnPreferences(self.parent)
self.btnSaveSize.Enable (self.parent.FindFiles_savesizeposition == 1)
def OnCloseW (self, event):
if self.parent.FindFiles_savesizeposition == 2:
self.parent.SaveDialogSizeAndPosition(self, 'FindFiles.sizepos.dat', self.parent.pluginsdatdirectory)
DrFrame.Raise()
DrFrame.SetFocus()
DrFrame.txtDocument.SetFocus()
if event is not None:
event.Skip()
def OnCBoxSearchDirectoryFocus(self, event):
self.txtDirectory.SetFocus()
def OnCBoxFileNameSetFocus(self, event):
self.txtFileName.SetFocus()
def OnResultsSetFocus(self, event):
self.results.SetFocus()
def OnHelp (self, event):
OnHelp(DrFrame)
def OnAbout (self, event):
OnAbout(DrFrame)
def OnBrowse (self, event):
path = self.txtDirectory.GetValue().strip()
paths = path.split(';')
lastdir = ""
while len (paths) > 0:
lastdir = paths.pop()
if os.path.exists(lastdir):
break
d = wx.DirDialog(self, "Add Directory:", lastdir, style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON|wx.MAXIMIZE_BOX|wx.THICK_FRAME)
if d.ShowModal() == wx.ID_OK:
if path:
path += ';'
newpath = d.GetPath()
newpath = newpath.replace ('\\', "/")
path += newpath
self.txtDirectory.SetValue(path)
wx.CallAfter(self.txtDirectory.SetMark, len (path), len (path))
self.txtDirectory.SetFocus()
def OnSettings (self, event):
if self.parent.FindFiles_savesizeposition == 1:
self.parent.SaveDialogSizeAndPosition(self, 'FindFiles.sizepos.dat', self.parent.pluginsdatdirectory)
def SaveDialogSizePosColumn(self, dialog, dialogfile):
f = file(self.parent.pluginsdatdirectory + '/' + dialogfile, 'w')
x, y = dialog.GetSizeTuple()
px, py = dialog.GetPositionTuple()
f.write("<findfiles.SizePos>\n")
f.write(str(x) + '\n' + str(y) + '\n' + str(px) + '\n' + str(py) + '\n')
f.write("</findfiles.SizePos>\n")
f.close()
def OnCheckSubDir (self, event):
DrFrame.FindFiles_subdir = event.IsChecked()
self.OnRefreshFileList ()
def OnCheckFilter (self, event):
DrFrame.FindFiles_filter = event.IsChecked()
self.OnRefreshFileList ()
def OnEdit (self, event):
d = EditDlg(self, -1, "Edit")
answer = d.ShowModal()
def OnbtnClose(self, event):
focuswindow = self.FindFocus()
if DrFrame.PLATFORM_IS_WIN: #don't know what I meant with that
p = focuswindow.GetParent()
if p.GetTitle() == "Edit":
p.Destroy()
return
self.WriteHistoryFile()
self.OnCloseW(None)
self.Destroy()
def OnDirectorySelect (self, event, str = ''):
if not str:
cdir = self.txtDirectory.GetValue().strip()
else:
cdir = str
cdir = cdir.replace("\\", "/")
if cdir != self.olddir:
self.olddir = cdir
for l in range (len(DrFrame.FindFiles_AllFiles)):
if cdir == DrFrame.FindFiles_AllFiles[l][0]:
self.cur_index = l
self.OnRefreshFileList()
break
else:
self.OnbtnRefresh(None)
if self.results.GetItemCount () < 1:
return
if cdir in DrFrame.DirectoryHistory:
index = DrFrame.DirectoryHistory.index (cdir)
DrFrame.DirectoryHistory.pop (index)
DrFrame.DirectoryHistory.insert (0, cdir)
if len (DrFrame.DirectoryHistory) > self.maxhistoryentries:
deldir = DrFrame.DirectoryHistory.pop()
for l in range (len(DrFrame.FindFiles_AllFiles)):
if deldir in DrFrame.FindFiles_AllFiles[l][0]:
DrFrame.FindFiles_AllFiles.pop (l)
break
self.txtDirectory.Clear ()
for i in DrFrame.DirectoryHistory:
self.txtDirectory.Append (i)
wx.CallAfter (self.txtDirectory.SetValue, cdir)
def OnKeyDown (self, event):
self.OnRefreshFileList()
def testIgnoreDirectories (self, cdir):
for i in self.ignoredirectories:
if cdir.lower().find(i.lower()) != -1:
return True
return False
def listDir(self, cdir, dir_data, subdir, ignorelist):
matches = []
x = 0
l = len(dir_data)
if self.testIgnoreDirectories(cdir):
return matches
while x < l:
filename = os.path.normpath(cdir + "/" + dir_data[x])
filename = filename.replace("\\", "/")
if subdir:
if not os.path.islink(filename):
if os.path.isdir(filename):
try:
matches.extend(self.listDir (filename, os.listdir(filename), subdir, ignorelist))
except:
pass
else:
matches.append(filename)
else:
matches.append(filename)
x = x + 1
return matches
def OnItemSelected (self, event):
#thanks to Peter Damoc from wxython-user mailing-list for this hack!
if self.FindFocus() == self.txtDirectory:
self.txtFileName.SetFocus()
return
if self.results.GetItemCount () > 0:
self.WriteHistoryFile()
nItem = -1
for i in range (self.results.GetItemCount()):
nItem = self.results.GetNextItem(nItem, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED)
if nItem == -1:
break
a = self.getColumnText(nItem, 1)
if DrFrame.PLATFORM_IS_WIN:
a = a.replace("\\", "/")
alreadyopen = DrFrame.GetAlreadyOpen()
if a in alreadyopen:
i = alreadyopen.index(a)
DrFrame.setDocumentTo(i)
elif os.path.exists(a):
DrFrame.OpenFile(a, True, False)
DrFrame.ddirectory = os.path.split(a)[0]
else:
wx.MessageBox("The file '%s'does not exist!" % a, "Please check the path!", wx.ICON_EXCLAMATION)
DrFrame.FindFiles_lastentered = self.txtFileName.GetValue()
self.Destroy()
def getColumnText(self, index, col):
item = self.results.GetItem(index, col)
return item.GetText()
def OnRefreshFileList (self):
self.results.DeleteAllItems()
txtFilePattern = self.txtFileName.GetValue()
lookdir = False
try:
if txtFilePattern != '':
if txtFilePattern[0] == '=':
u = re.compile('.' + txtFilePattern[1:], re.IGNORECASE)
lookdir = True
elif txtFilePattern[0] == '*':
u = re.compile('.' + txtFilePattern, re.IGNORECASE)
else:
txtFilePattern = txtFilePattern.replace ('.', '\\.')
txtFilePattern = txtFilePattern.replace ('*', '.*')
u = re.compile('^' + txtFilePattern, re.IGNORECASE)
else:
u = re.compile('^' + self.txtFileName.GetValue(), re.IGNORECASE)
except:
#invalid regex pattern
return
# todo: setup switch case? makes more sense for linux
index = 0
directories = self.txtDirectory.GetValue().strip().split (';')
if DrFrame.FindFiles_filterfilemask != '':
pattern = DrFrame.FindFiles_filterfilemask.lower().split (';')
self.listfiles = []
farray = map(lambda x: x.filename, DrFrame.txtDocumentArray)
for i in DrFrame.FindFiles_AllFiles[self.cur_index][1]:
if lookdir:
f = u.search (i)
else:
f = u.search (os.path.split(i)[1])
if f:
#checkbox subdir
if not DrFrame.FindFiles_subdir:
i = i.replace ("\\", "/")
if not os.path.dirname(i) in directories:
continue
if DrFrame.FindFiles_filter:
if DrFrame.FindFiles_filterfilemask != '':
if not os.path.splitext(i)[1][1:].lower() in pattern:
continue
self.listfiles.append ([os.path.split(i)[1], i])
fname = self.listfiles[index][0]
idx = -1
if i in farray:
idx = self.loaded
findex = farray.index(i)
if DrFrame.txtDocumentArray[findex].GetModify():
idx = self.modified
self.results.InsertImageStringItem(index, fname, idx)
self.results.SetStringItem(index, 1, self.listfiles[index][1])
self.results.SetItemData(index, index)
index += 1
self.results.SetItemState(0, wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED , wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED)
if self.oldsortcolumn != -1:
self.SortHeader(False)
def FeedListBox(self):
if DrFrame.FindFiles_AllFiles:
self.results.DeleteAllItems()
index = 0
self.listfiles = []
farray = map(lambda x: x.filename, DrFrame.txtDocumentArray)
for i in DrFrame.FindFiles_AllFiles[self.cur_index][1]:
self.listfiles.append ([os.path.split(i)[1], i])
fname = self.listfiles[index][0]
idx = -1
if i in farray:
idx = self.loaded
findex = farray.index(i)
if DrFrame.txtDocumentArray[findex].GetModify():
idx = self.modified
self.results.InsertImageStringItem(index, fname, -1)
self.results.SetStringItem(index, 1, self.listfiles[index][1])
self.results.SetItemData(index, index)
index += 1
self.results.SetItemState(0, wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED , wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED)
if self.oldsortcolumn != -1:
self.SortHeader(False)
def LoadSavedFiles(self):
if os.path.exists(self.savefile):
f = file(self.savefile, 'r')
next_Path = False
index = 0
while True:
line = f.readline().rstrip().split('\n')
line = line [0]
if line == '':
break
if line == '</Directory>':
continue
elif line == '<Directory>':
next_Path = True
else:
#directory entry?
if next_Path:
next_Path = False
t = [[], []]
DrFrame.FindFiles_AllFiles.append (t)
index = len (DrFrame.FindFiles_AllFiles) - 1
DrFrame.FindFiles_AllFiles[index][0] = line
else:
DrFrame.FindFiles_AllFiles[index][1].append (line)
#next file
f.close ()
if os.path.exists(self.historyfile):
f = file(self.historyfile, 'r')
text = f.read()
f.close()
settings = ''
settings = drPrefsFile.GetPrefFromText(settings, text, "findfiles.settings", False)
settings = settings.split ('\n')
settings.pop (0)
try:
DrFrame.FindFiles_filterfilemask = settings [0]
DrFrame.FindFiles_filter = eval (settings[1])
DrFrame.FindFiles_subdir = eval (settings[2])
except:
pass
historyentries = ''
historyentries = drPrefsFile.GetPrefFromText(historyentries, text, "findfiles.history", False)
historyentries = historyentries.split ('\n')
DrFrame.DirectoryHistory=[]
for line in historyentries:
if line != '':
DrFrame.DirectoryHistory.append (line)
else:
for i in DrFrame.FindFiles_AllFiles:
DrFrame.DirectoryHistory.append (i[0])
self.txtDirectory.Clear()
for i in DrFrame.DirectoryHistory:
self.txtDirectory.Append (i)
if DrFrame.DirectoryHistory:
self.txtDirectory.SetValue (DrFrame.DirectoryHistory[0])
def WriteHistoryFile(self):
f = file(self.historyfile, 'w')
f.write("<findfiles.settings>\n")
f.write(DrFrame.FindFiles_filterfilemask + "\n")
f.write(str (DrFrame.FindFiles_filter) + "\n")
f.write(str (DrFrame.FindFiles_subdir) + "\n")
f.write("</findfiles.settings>\n")
f.write("<findfiles.history>\n")
for i in DrFrame.DirectoryHistory:
f.write(i + "\n")
f.write("</findfiles.history>\n")
f.close()
def WriteSavedFiles(self):
f = file(self.savefile, 'w')
#write cache or "history" file
for i in range (len(DrFrame.FindFiles_AllFiles)):
directory = DrFrame.FindFiles_AllFiles[i][0]
f.write("<Directory>\n")
f.write(directory + '\n')
for files in DrFrame.FindFiles_AllFiles[i][1]:
f.write(files + '\n')
f.write("</Directory>\n")
f.close()
def OnbtnRefresh (self, event):
cdir = self.txtDirectory.GetValue().strip()
cdir = cdir.replace("\\", "/")
filelist = []
dirs = cdir.split (';')
self.ignoredirectories = []
directories = []
for i in dirs:
if i[0] == '-':
self.ignoredirectories.append (i[1:])
else:
directories.append (i)
for i in directories:
if os.path.exists(i):
filelist += self.listDir(i, os.listdir(i), 1, self.ignoredirectories)
self.cur_index = 0
self.results.DeleteAllItems()
if filelist:
#dictionary as alternative: but in list, sorting stays kept
for l in range (len(DrFrame.FindFiles_AllFiles)):
if cdir == DrFrame.FindFiles_AllFiles[l][0]:
self.cur_index = l
DrFrame.FindFiles_AllFiles[self.cur_index][1] = []
break
else:
t = [[], []]
DrFrame.FindFiles_AllFiles.append (t)
self.cur_index = len (DrFrame.FindFiles_AllFiles) - 1
DrFrame.FindFiles_AllFiles[self.cur_index][0] = cdir
for i in filelist:
DrFrame.FindFiles_AllFiles[self.cur_index][1].append (i)#
self.WriteSavedFiles()
self.OnRefreshFileList ()
#----------------------------------------------------------------------
def getSmallUpArrowData(self):
return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
\x00\x00<IDATx\x9ccddbf\xa0\x040Q\xa4{h\x18\xf0\xff\xdf\xdf\xffd\x1b\x00\xd3\
\x8c\xcf\x10\x9c\x06\xa0k\xc2e\x08m\xc2\x00\x97m\xd8\xc41\x0c \x14h\xe8\xf2\
\x8c\xa3)q\x10\x18\x00\x00R\xd8#\xec\x95{\xc4\x11\x00\x00\x00\x00IEND\xaeB`\
\x82'
#----------------------------------------------------------------------
def getSmallDnArrowData(self):
return \
"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
\x00\x00HIDATx\x9ccddbf\xa0\x040Q\xa4{\xd4\x00\x06\x06\x06\x06\x06\x16t\x81\
\xff\xff\xfe\xfe'\xa4\x89\x91\x89\x99\x11\xa7\x0b\x90%\ti\xc6j\x00>C\xb0\x89\
\xd3.\x10\xd1m\xc3\xe5*\xbc.\x80i\xc2\x17.\x8c\xa3y\x81\x01\x00\xa1\x0e\x04e\
\x1d\xc4;\xb7\x00\x00\x00\x00IEND\xaeB`\x82"
def getFileLoadedData(self):
return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
\x00\x01\xddIDATx\x9c\xa5\x92?kTQ\x10\xc5\x7f\xf7\xde]\xf7\x8f\xa0Ub\xc0\x80\
\x84,v"\xd6\xa2\x8d\xb5\x08\xe2w\xb0\xb3\xf03\xf8q\xc4*\x95\x8d\xc8\xa2h\x08\
\x82\x85h\xa3\xc1$l\x88\x86\xc5,f\xf3\xde\x9b;3\x16\xbb\xfbvMP\x0b\x0f\x1c\
\xe62\xf7\xce\x993\xdc\t\xee\xee\xfc\x07\x1a\x00W\xee?\xe3\xee\x9d\x1e7\xd6\
\x8fp\xc0\\Q\xcbS*\xea\x19s\x83i\xaf\xad\xed5\xfaov\x19<\xbd7\x11XZ\xba\xc0\
\xad\x9b=z\xab\x1f\xc9V!f\x88\x1ab\x99\xec\x19\x98\x99\x0c\x00\xbc|\xb5\xc9\
\xf2\xe5u\x063\x07\x93\xab\xc0J\\A=#.x4B\x8a\xc4\x18\x891Lc$\xa5\xc4\xa5k\
\xc7\xec\x7f\x1e\xcfG\x98\x89\xb7\xacE\xd6D+\xb6\xeb\xc7\xa7cJ\x89\x18\xc6\
\x98\xfa\\\xc0\xddQ\x9b$\x16;\xfd)fsdQ@\r$;1FB\x08\x7f-\x06\xc8\xea\x88\xda\
\\\xc0\xdc\xa9t.0\x83\x99af\xa8j\x9ds\xf7\xb3\x02j\xce\xf6\x8f\xc0\x93~\xa2\
\x10\xa3\x10\xa5\x14\xa5\xccF)V\x9f+1\xaal\x949\x91\x17G0sJ1\xfa\x9f\x0e\xe9\
\xa5\x1d\x9a\xcd&\t\xe8N\t\xb0w\xa4\xbc\xde\xeb\xb2\xb6|\x9es\x8dx\xd6A!FV\
\xe7\xd1\xed6\xef\xbf5\xb8\xbe\xdaau\xf9bm}\xe3\xdd>/\x06\x115\xa7\xcaV;\x88\
\x00\xeaN)\x8a\x9a1\x1a\x8dx\xb8\x01[\xdb#NNNjjV\x9a\xcd&\xea\x01\xc9F\xb6S#\
\x14\xa2\x93\xef\x11\x01@D\x18\x8f\xc7\xb5\x03U\xa5\xddnc\x9e15\xf2o#8\x94\
\xd9PuRJ<\x7f0\xa4\xd5j\x9d\x11\xe8v\xbbx\xf9\x13\xd1\xf9\xde4\x00\x8a\xe3\
\x82\xc1\xd7\xef\xe4\xa3\x82\x0f;B\xa7\xd3\x01d\xca\t\xbe\x1cdtxHU\x8c\xa9D\
\xa8\x0e\x0e&\x0b\xec\xee\x1eB\x80\xab\x8f\xc1\xe6\x05\xff\xc4\xf0-\x0c7\xf9\
\x05\xc2\xc6H\xf5\xa6\xe7\x172\x00\x00\x00\x00IEND\xaeB`\x82'
def getFileModifiedData(self):
return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
\x00\x01\xe3IDATx\x9c\xa5\x93\xbdjTA\x14\x80\xbf\x99\xc9\xee\xb2\x12c\x14Q0D\
\x14\x1ba\xed\xd2\x08b\x91\xd6\xd6\xc2\'\xb0\xf3\x01\xc4\xda\x17\xb0\xf3%D+\
\x11\r"H@\xd0BC\x10d%\x85,"A\xa3\xac\xe1\xde;?\xe7\x1c\x8b\xdd\xec\xde\x08\
\xda\xe4\xc0p\xa6\x98\xf9\xce\xc793\xce\xcc\x8c#\xc4\x02\xc0\xab\xa5S\xac\
\xde\xbc\xc5\xee\xd5u\x9c9\x8a*E\xa1\x14Cd\xb2W5\x0ej\r^?\xe3\xdb\xcb\xa7\\\
\xab\xf7&\x80\xc53\xe7\xb8\xb8~\x83t\xf9:1))\x1a\x12\x05\xa2\xa1\xd9p@hU\xdd\
\xdcx\xc2\x95\xb3\x97\xe6\x06\x00\x1e\xe3\xe4\x8a\x91\xb3RJA\xc4\xe1=x\x1fp.\
\xe0\xbd\xc7{O\x08\x01\xf7h\x85\xbc\xb3{\x18\x00\x9e\x85\x9e@(t\x9d\x9b\x1d\
\xfe;\x87\x10\xf8\xe9\x1c\xaaq\x0e03Ld\x82iU\xfaW6QHy\x0ep"X\x8ex\xefq\xce\
\xfd\xf72\x80\xe5\x8c\xe5\xd6\x14L\x14\x9a4\x03\x1c\x84\xaa\xa2\xaa\xc8\xd4\
\xee\xc0\x96"hJm\x80\xe0wF,\xdf}\x00U\x83V5\x12#\x163\xda4h\x93\xb0\x98\xd04\
\xc9\xfd:R\x17i5Q\x05\x9a\xc8xc\x93\xe1\xe0<\x9dN\x07z@\xaf\x03K\x9dI\xe9/_\
\xc9[\x9f\xb8\xb0x\x02\xdf\xed\xa2\xed\x1e\x98\x08T\r\x14\xa1\xdc\xbbM\xf7\
\xddG:k\x03\x8e\xaf\xae\xcc\xd4\x7f<~\xc1\xc2\xdbmL\xa6\xfa\xa5Lg7\xed\x816\
\x11-\x85\xf1xL\xbas\x9f\xea\xcd{\xea\xba\x9e-\x91\xcc1<\xbe\x08\xa4L\xc2\
\xe6\x06\xaa\x82\xd45&B\xce\x13\xb5\x9c3UU\xcd\x0cD\x84e\x02N\x14Q=\x0c\xf0\
\xc5a1C\x11B\x08\xec=\x7fH\xaf\xd7\xc3Z\x00\'\xc2i\x02\xbf\xcd\xa80\n\xad16\
\xcd>\xdfG\x9f\xc9\xa5\xc2>l\xd1\xed\xf71 \xce\x9f)n8d\x97\x9a_&\xecc\x8c\
\xd8g\rpG\xfd\xce\x7f\x00\x84\xd8)\x90\xe6\x1ct\xb0\x00\x00\x00\x00IEND\xaeB\
`\x82'
def OnFindFiles(event):
d = drFindFilesDialog(DrFrame, -1, "Find Files")
d.Show()
DrFrame.FindFiles_fileloaded = False
DrFrame.FindFiles_filter = False
DrFrame.FindFiles_subdir = True
DrFrame.FindFiles_filterfilemask = "cpp;h;py;pyw;txt;log"
DrFrame.FindFiles_savesizeposition = 0
DrFrame.FindFiles_lastentered = ''
if os.path.exists(DrFrame.pluginspreferencesdirectory + "/FindFiles.preferences.dat"):
f = file(DrFrame.pluginspreferencesdirectory + "/FindFiles.preferences.dat", 'r')
text = f.read()
f.close()
DrFrame.FindFiles_savesizeposition= drPrefsFile.GetPrefFromText(DrFrame.FindFiles_savesizeposition, text, "findfiles.savesizeposition", True)
ID_FINDFILES = DrFrame.GetNewId()
DrFrame.Bind(wx.EVT_MENU, OnFindFiles, id = ID_FINDFILES)
DrFrame.AddPluginShortcutFunction("FindFiles", "Find Files", OnFindFiles)
DrFrame.AddPluginPopUpMenuFunction("FindFiles", "Find Files", OnFindFiles)
DrFrame.LoadPluginShortcuts('FindFiles')
DrFrame.searchmenu.AppendSeparator()
DrFrame.searchmenu.Append(ID_FINDFILES, DrFrame.GetPluginMenuLabel('FindFiles', 'Find Files', 'Find Files'))