1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
#(c)www.stani.be
import _spe.info
INFO=_spe.info.copy()
INFO['description']=\
"""Recent files as tab."""
__doc__=INFO['doc']%INFO
#_______________________________________________________________________________
import os
import wx
import sm.scriptutils as scriptutils
import _spe.help as help
class DropAdd(wx.FileDropTarget):
"""Adds a file to recent files when dropped on recent tab."""
def __init__(self,add):
wx.FileDropTarget.__init__(self)
self.add=add
def OnDropFiles(self,x,y,fileNames):
fileNames=[script for script in fileNames
if os.path.splitext(script)[-1].lower() in ['.py','.pyw']]
if fileNames:
self.add(fileNames)
return 1
else:return 0
class Panel(wx.ListCtrl):
def __init__(self,panel,**options):
wx.ListCtrl.__init__(self,parent=panel,style=panel.LIST_STYLE)
self.imageList = wx.ImageList(16,16)
self.pyIcon = self.imageList.Add(panel.icons['source_py.png'])
self.files = []
self.panel = panel
self.SetImageList(self.imageList,wx.IMAGE_LIST_SMALL)
self.SetDropTarget(DropAdd(self.add))
self.SetHelpText(help.RECENT)
#events
wx.EVT_LIST_ITEM_SELECTED(self, -1, self.onLeftClick)
wx.EVT_LIST_ITEM_ACTIVATED(self, -1, self.onRightClick)
wx.EVT_LIST_ITEM_MIDDLE_CLICK(self, -1, self.onMiddleClick)
def add(self,fileList):
"""Register file list as recent."""
files = [file for file in self.files if file not in fileList]
if len(self.files)-len(files)!=len(fileList):
fileList.extend(files)
self.files=fileList
self.update()
def update(self):
self.DeleteAllItems()
i=0
self.files = [(os.path.basename(str(file)),file) for file in self.files]
self.files.sort()
self.files = [file[1] for file in self.files]
for file in self.files:
self.InsertImageStringItem(i, os.path.basename(str(file)),self.pyIcon)
i+=1
try:
self.SetColumnWidth(-1,300)
except:
pass
#---events
def onLeftClick(self,event):
"""Open file on left click."""
file=self.files[event.GetIndex()]
f=self.panel.openList(file)
if not f:
self.panel.toolBar.SetFocus()
self.files.remove(file)
self.update()
def onRightClick(self,event):
"""Run file on right click."""
file=self.files[event.GetIndex()]
scriptutils.run(file)
self.panel.shell.prompt()
def onMiddleClick(self,event):
"""Import file on middle click."""
file=self.files[event.GetIndex()]
scriptutils.importMod(file)
self.panel.shell.prompt()
|