1 # copyright 1997 Just van Rossum, Letterror. just@knoware.nl
12 class PythonIDE(WFrameWorkPatch
.Application
):
15 self
.preffilepath
= ":Python:PythonIDE preferences"
16 WFrameWorkPatch
.Application
.__init
__(self
, 'Pyth')
17 import AE
, AppleEvents
19 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEOpenApplication
,
21 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEPrintDocuments
,
23 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEOpenDocuments
,
25 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEQuitApplication
,
27 import PyConsole
, PyEdit
29 PyConsole
.installconsole()
30 PyConsole
.installoutput()
32 for path
in sys
.argv
[1:]:
36 def makeusermenus(self
):
37 m
= WFrameWorkPatch
.Menu(self
.menubar
, "File")
38 newitem
= FrameWork
.MenuItem(m
, "New", "N", 'new')
39 openitem
= FrameWork
.MenuItem(m
, "OpenŠ", "O", 'open')
40 FrameWork
.Separator(m
)
41 closeitem
= FrameWork
.MenuItem(m
, "Close", "W", 'close')
42 saveitem
= FrameWork
.MenuItem(m
, "Save", "S", 'save')
43 saveasitem
= FrameWork
.MenuItem(m
, "Save asŠ", None, 'save_as')
44 FrameWork
.Separator(m
)
45 quititem
= FrameWork
.MenuItem(m
, "Quit", "Q", 'quit')
47 m
= WFrameWorkPatch
.Menu(self
.menubar
, "Edit")
48 undoitem
= FrameWork
.MenuItem(m
, "Undo", 'Z', "undo")
49 FrameWork
.Separator(m
)
50 cutitem
= FrameWork
.MenuItem(m
, "Cut", 'X', "cut")
51 copyitem
= FrameWork
.MenuItem(m
, "Copy", "C", "copy")
52 pasteitem
= FrameWork
.MenuItem(m
, "Paste", "V", "paste")
53 FrameWork
.MenuItem(m
, "Clear", None, "clear")
54 FrameWork
.Separator(m
)
55 selallitem
= FrameWork
.MenuItem(m
, "Select all", "A", "selectall")
56 sellineitem
= FrameWork
.MenuItem(m
, "Select line", "L", "selectline")
57 FrameWork
.Separator(m
)
58 finditem
= FrameWork
.MenuItem(m
, "FindŠ", "F", "find")
59 findagainitem
= FrameWork
.MenuItem(m
, "Find again", 'G', "findnext")
60 enterselitem
= FrameWork
.MenuItem(m
, "Enter search string", "E", "entersearchstring")
61 replaceitem
= FrameWork
.MenuItem(m
, "Replace", None, "replace")
62 replacefinditem
= FrameWork
.MenuItem(m
, "Replace & find again", 'T', "replacefind")
63 FrameWork
.Separator(m
)
64 shiftleftitem
= FrameWork
.MenuItem(m
, "Shift left", "[", "shiftleft")
65 shiftrightitem
= FrameWork
.MenuItem(m
, "Shift right", "]", "shiftright")
67 m
= WFrameWorkPatch
.Menu(self
.menubar
, "Python")
68 runitem
= FrameWork
.MenuItem(m
, "Run window", "R", 'run')
69 runselitem
= FrameWork
.MenuItem(m
, "Run selection", None, 'runselection')
70 FrameWork
.Separator(m
)
71 moditem
= FrameWork
.MenuItem(m
, "Module browserŠ", "M", self
.domenu_modulebrowser
)
72 FrameWork
.Separator(m
)
73 mm
= FrameWork
.SubMenu(m
, "Preferences")
74 FrameWork
.MenuItem(mm
, "Set Scripts folderŠ", None, self
.do_setscriptsfolder
)
76 self
.openwindowsmenu
= WFrameWorkPatch
.Menu(self
.menubar
, 'Windows')
77 self
.makeopenwindowsmenu()
78 self
._menustocheck
= [closeitem
, saveitem
, saveasitem
,
79 undoitem
, cutitem
, copyitem
, pasteitem
,
80 selallitem
, sellineitem
,
81 finditem
, findagainitem
, enterselitem
, replaceitem
, replacefinditem
,
82 shiftleftitem
, shiftrightitem
,
85 prefs
= self
.getprefs()
86 if prefs
.scriptsfolder
:
87 fss
, fss_changed
= macfs
.RawAlias(prefs
.scriptsfolder
).Resolve()
88 self
.scriptsfolder
= fss
.NewAlias()
89 prefs
.scriptsfolder
= self
.scriptsfolder
.data
90 self
.scriptsfoldermodtime
= fss
.GetDates()[1]
92 path
= os
.path
.join(os
.getcwd(), 'Scripts')
93 if not os
.path
.exists(path
):
95 fss
= macfs
.FSSpec(path
)
96 self
.scriptsfolder
= fss
.NewAlias()
97 self
.scriptsfoldermodtime
= fss
.GetDates()[1]
99 self
.scriptsmenu
= None
100 self
.makescriptsmenu()
102 def quitevent(self
, theAppleEvent
, theReply
):
104 AE
.AEInteractWithUser(50000000)
107 def suspendresume(self
, onoff
):
109 fss
, fss_changed
= self
.scriptsfolder
.Resolve()
110 modtime
= fss
.GetDates()[1]
111 if self
.scriptsfoldermodtime
<> modtime
or fss_changed
:
112 self
.scriptsfoldermodtime
= modtime
114 self
.makescriptsmenu()
116 def ignoreevent(self
, theAppleEvent
, theReply
):
119 def opendocsevent(self
, theAppleEvent
, theReply
):
122 parameters
, args
= aetools
.unpackevent(theAppleEvent
)
123 docs
= parameters
['----']
124 if type(docs
) <> type([]):
127 fss
, a
= doc
.Resolve()
128 path
= fss
.as_pathname()
131 def opendoc(self
, path
):
132 fcreator
, ftype
= macfs
.FSSpec(path
).GetCreatorType()
134 self
.openscript(path
)
136 W
.Message("Can¹t open file of type '%s'." % ftype
)
138 def getabouttext(self
):
139 return "About Python IDEŠ"
141 def do_about(self
, id, item
, window
, event
):
144 def do_setscriptsfolder(self
, *args
):
145 fss
, ok
= macfs
.GetDirectory("Select Scripts Folder")
147 prefs
= self
.getprefs()
148 alis
= fss
.NewAlias()
149 prefs
.scriptsfolder
= alis
.data
150 self
.scriptsfolder
= alis
151 self
.makescriptsmenu()
154 def domenu_modulebrowser(self
, *args
):
157 ModuleBrowser
.ModuleBrowser()
159 def domenu_open(self
, *args
):
160 fss
, ok
= macfs
.StandardGetFile("TEXT")
162 self
.openscript(fss
.as_pathname())
164 def domenu_new(self
, *args
):
167 return PyEdit
.Editor()
169 def makescriptsmenu(self
):
172 for id, item
in self
._scripts
.keys():
173 if self
.menubar
.menus
.has_key(id):
174 m
= self
.menubar
.menus
[id]
178 if hasattr(self
.scriptsmenu
, 'id') and self
.menubar
.menus
.has_key(self
.scriptsmenu
.id):
179 self
.scriptsmenu
.delete()
180 self
.scriptsmenu
= FrameWork
.Menu(self
.menubar
, "Scripts")
181 #FrameWork.MenuItem(self.scriptsmenu, "New script", None, self.domenu_new)
182 #self.scriptsmenu.addseparator()
183 fss
, fss_changed
= self
.scriptsfolder
.Resolve()
184 self
.scriptswalk(fss
.as_pathname(), self
.scriptsmenu
)
186 def makeopenwindowsmenu(self
):
187 for i
in range(len(self
.openwindowsmenu
.items
)):
188 self
.openwindowsmenu
.menu
.DeleteMenuItem(1)
189 self
.openwindowsmenu
.items
= []
191 self
._openwindows
= {}
192 for window
in self
._windows
.keys():
193 title
= window
.GetWTitle()
196 windows
.append(title
, window
)
198 for title
, window
in windows
:
199 item
= FrameWork
.MenuItem(self
.openwindowsmenu
, title
, callback
= self
.domenu_openwindows
)
200 self
._openwindows
[item
.item
] = window
201 self
._openwindowscheckmark
= 0
202 self
.checkopenwindowsmenu()
204 def domenu_openwindows(self
, id, item
, window
, event
):
205 w
= self
._openwindows
[item
]
209 def domenu_quit(self
):
212 def domenu_save(self
, *args
):
216 import PyConsole
, PyEdit
217 PyConsole
.console
.writeprefs()
218 PyEdit
.searchengine
.writeprefs()
219 for window
in self
._windows
.values():
220 if window
.close() > 0: