#Boa:Frame:BikeFrame
import bike
from bike.query.findReferences import CouldntFindDefinitionException
import sys
import os.path
import wx
#Version: 0.0.0, 07.04.2007:
# update for wxPython 2.8 and DrPython 1.65.
def create(parent):
return BikeFrame(parent)
[wxID_BIKEFRAME, wxID_BIKEFRAMEEXTRACTMETHODBTN, wxID_BIKEFRAMEFINDDEFBTN,
wxID_BIKEFRAMEFINDREFBTN, wxID_BIKEFRAMERENAMEBTN, wxID_BIKEFRAMERESULTLIST,
wxID_BIKEFRAMERESULTTEXTCTRL, wxID_BIKEFRAMEUNDOBTN,
] = [wx.NewId() for _init_ctrls in range(8)]
class BikeFrame(wx.MiniFrame):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.MiniFrame.__init__(self, id=wxID_BIKEFRAME, name='BikeFrame',
parent=prnt, pos=wx.Point(807, 74), size=wx.Size(353, 497),
style=wx.DEFAULT_FRAME_STYLE, title='Bike Results')
self.SetClientSize(wx.Size(345, 463))
self.Bind(wx.EVT_CLOSE, self.OnBikeClose)
self.findRefBtn = wx.Button(id=wxID_BIKEFRAMEFINDREFBTN,
label='find References', name='findRefBtn', parent=self,
pos=wx.Point(8, 8), size=wx.Size(104, 23), style=0)
self.findRefBtn.Bind(wx.EVT_BUTTON, self.OnFindRef_Click,
id=wxID_BIKEFRAMEFINDREFBTN)
self.undoBtn = wx.Button(id=wxID_BIKEFRAMEUNDOBTN, label='undo',
name='undoBtn', parent=self, pos=wx.Point(120, 40),
size=wx.Size(104, 23), style=0)
self.undoBtn.SetHelpText('undoes the effect of rename and extract')
self.undoBtn.Bind(wx.EVT_BUTTON, self.undoBtn_Click,
id=wxID_BIKEFRAMEUNDOBTN)
self.renameBtn = wx.Button(id=wxID_BIKEFRAMERENAMEBTN, label='rename',
name='renameBtn', parent=self, pos=wx.Point(232, 8),
size=wx.Size(104, 23), style=0)
self.renameBtn.Bind(wx.EVT_BUTTON, self.OnRenameBtn_Click,
id=wxID_BIKEFRAMERENAMEBTN)
self.findDefBtn = wx.Button(id=wxID_BIKEFRAMEFINDDEFBTN,
label='find Definition', name='findDefBtn', parent=self,
pos=wx.Point(120, 8), size=wx.Size(104, 23), style=0)
self.findDefBtn.Bind(wx.EVT_BUTTON, self.OnFindDef_Click,
id=wxID_BIKEFRAMEFINDDEFBTN)
self.resultList = wx.ListCtrl(id=wxID_BIKEFRAMERESULTLIST,
name='resultList', parent=self, pos=wx.Point(8, 80),
size=wx.Size(328, 208), style=wx.NO_BORDER | wx.LC_REPORT)
self.resultList.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnResultList_Click,
id=wxID_BIKEFRAMERESULTLIST)
self.extractMethodBtn = wx.Button(id=wxID_BIKEFRAMEEXTRACTMETHODBTN,
label='extract method', name='extractMethodBtn', parent=self,
pos=wx.Point(8, 40), size=wx.Size(104, 23), style=0)
self.extractMethodBtn.Bind(wx.EVT_BUTTON, self.OnExtractMethodBtn_Click,
id=wxID_BIKEFRAMEEXTRACTMETHODBTN)
self.resultTextCtrl = wx.TextCtrl(id=wxID_BIKEFRAMERESULTTEXTCTRL,
name='resultTextCtrl', parent=self, pos=wx.Point(8, 296),
size=wx.Size(328, 160), style=wx.TE_MULTILINE, value='')
def __init__(self, parent):
self._init_ctrls(parent)
self.DrFrame = parent
self.resultList.InsertColumn(0,"file name")
self.resultList.InsertColumn(1,"line no")
#self.resultList.InsertColumn(2,"col no")
#self.resultList.InsertColumn(3,"col end")
self.resultList.InsertColumn(2,"confidence")
self.bikeCtx = bike.init()
self.bikeCtx.setProgressLogger(self)
def OnFindRef_Click(self, event):
try :
activeDocument = self.DrFrame.GetActiveSTC()
fileName = activeDocument.GetFilename()
startPos,EndPos = activeDocument.GetSelection()
lineNum = activeDocument.LineFromPosition(startPos)
colNum = activeDocument.GetColumn(startPos)
self.resultList.DeleteAllItems()
self.results = []
for ref in self.bikeCtx.findReferencesByCoordinates(fileName,lineNum+1,colNum) :
index=self.resultList.InsertStringItem(sys.maxint,"")
self.resultList.SetStringItem(index,0,ref.filename)
self.resultList.SetStringItem(index,1,str(ref.lineno))
#self.resultList.SetStringItem(index,2,str(ref.colno))
#self.resultList.SetStringItem(index,3,str(ref.colend))
self.resultList.SetStringItem(index,2,str(ref.confidence))
print index
self.results.append(ref)
#['__doc__', '__eq__', '__module__', '__repr__', 'colend', 'colno', 'confidence', 'filename', 'lineno', 'sourcenode']
except CouldntFindDefinitionException :
wx.MessageBox('Could not find Reference','Find References', wx.OK | wx.ICON_ERROR)
except Exception,err:
wx.MessageBox(str(err),'Find References', wx.OK | wx.ICON_ERROR)
#event.Skip()
def OnFindDef_Click(self, event):
try :
activeDocument = self.DrFrame.GetActiveSTC()
fileName = activeDocument.GetFilename()
startPos,EndPos = activeDocument.GetSelection()
lineNum = activeDocument.LineFromPosition(startPos)
colNum = activeDocument.GetColumn(startPos)
self.resultList.DeleteAllItems()
self.results = []
for ref in self.bikeCtx.findDefinitionByCoordinates(fileName,lineNum+1,colNum) :
index=self.resultList.InsertStringItem(sys.maxint,"")
self.resultList.SetStringItem(index,0,ref.filename)
self.resultList.SetStringItem(index,1,str(ref.lineno))
#self.resultList.SetStringItem(index,2,str(ref.colno))
#self.resultList.SetStringItem(index,3,str(ref.colend))
self.resultList.SetStringItem(index,2,str(ref.confidence))
print index
self.results.append(ref)
except CouldntFindDefinitionException :
wx.MessageBox('Could not find Definition','Find Definition', wx.OK | wx.ICON_ERROR)
except Exception,err:
wx.MessageBox(self,str(err),'Find Definition', wx.OK | wx.ICON_ERROR)
#event.Skip()
def OnResultList_Click(self, event):
#wx.BeginBusyCursor()
openFiles = self.DrFrame.GetAlreadyOpen()
idx = -1
i = 0
for fileName in openFiles :
if os.path.abspath(fileName) == os.path.abspath(self.results[event.m_itemIndex].filename) :
idx=i
i+=1
if idx!=-1 :
self.DrFrame.setDocumentTo(idx)
else :
self.DrFrame.OpenFile(self.results[event.m_itemIndex].filename,True)
activeDocument = self.DrFrame.GetActiveSTC()
lineNum = self.results[event.m_itemIndex].lineno-1
colNum = self.results[event.m_itemIndex].colno
colEnd = None
try :
colEnd = self.results[event.m_itemIndex].colend
except :
colEnd = activeDocument.GetLineEndPosition(lineNum)-1
linePos = activeDocument.PositionFromLine(lineNum)
activeDocument.SetSelection(linePos+colNum,linePos+colEnd)
#wx.EndBusyCursor()
event.Skip()
def RenameCallback(self, filename, lineno, colbegin, colend) :
print "rename callback"
return True
def OnRenameBtn_Click(self, event):
activeDocument = self.DrFrame.GetActiveSTC()
fileName = activeDocument.GetFilename()
startPos,EndPos = activeDocument.GetSelection()
lineNum = activeDocument.LineFromPosition(startPos)
colNum = activeDocument.GetColumn(startPos)
dlg = wx.TextEntryDialog(self, 'Rename Method to :','Method Name :','')
try:
if dlg.ShowModal() == wx.ID_OK:
newname = dlg.GetValue()
self.bikeCtx.setRenameMethodPromptCallback(self.RenameCallback)
self.bikeCtx.renameByCoordinates(fileName,lineNum+1,colNum,newname)
self.SaveAndRefresh()
finally:
dlg.Destroy()
#event.Skip()
def SaveAndRefresh(self) :
savedFiles = self.bikeCtx.save()
openFiles = map(os.path.abspath,self.DrFrame.GetAlreadyOpen())
for fileName in savedFiles :
if openFiles.count(os.path.abspath(fileName)) > 0 :
self.DrFrame.OpenFile(fileName,False)
def undoBtn_Click(self, event):
self.bikeCtx.undo()
self.SaveAndRefresh()
#event.Skip()
def OnExtractMethodBtn_Click(self, event):
activeDocument = self.DrFrame.GetActiveSTC()
fileName = activeDocument.GetFilename()
startPos,EndPos = activeDocument.GetSelection()
beginLineNum = activeDocument.LineFromPosition(startPos)
beginColNum = activeDocument.GetColumn(startPos)
endLineNum = activeDocument.LineFromPosition(EndPos)
endColNum = activeDocument.GetColumn(EndPos)
dlg = wx.TextEntryDialog(self, 'Question', 'Caption', 'Default answer')
try:
if dlg.ShowModal() == wx.ID_OK:
methodname = dlg.GetValue()
self.bikeCtx.extractMethod(fileName,beginLineNum,beginColNum,endLineNum,endColNum,methodname)
self.SaveAndRefresh()
finally:
dlg.Destroy()
#event.Skip()
def write(self,text) :
self.resultTextCtrl.AppendText(text)
def OnBikeClose(self, event):
event.Skip()
def Plugin(DrFrame):
idum = DrFrame.GetNewId()
DrFrame.viewmenu.Append(idum,"Bicycle Repair Main")
def BicycleFunction(event):
bikeFrame=BikeFrame(DrFrame)
bikeFrame.Show()
DrFrame.Bind(wx.EVT_MENU,BicycleFunction,id=idum)
def OnHelp(DrFrame):
helpText = '''Bike Repairman 0.01\n
Created by John Janecek
Requires module http://bicyclerepair.sourceforge.net/\n
functionality was ripped off the Boa Constructor and Idle Plugin\n
Boa Constructor runs the methods in a thread not sure if that good idea.\n
Really cool module.
Anyway this plugin will probably destroy your code. Fixes bugs etc
email to nopa90@gmail.com
'''
DrFrame.ShowMessage(helpText, "CodeCompletion Help")