1 # copyright 1997-1998 Just van Rossum, Letterror. just@letterror.com
13 class PythonIDE(Wapplication
.Application
):
16 self
.preffilepath
= ":Python:PythonIDE preferences"
17 Wapplication
.Application
.__init
__(self
, 'Pide')
18 import AE
, AppleEvents
20 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEOpenApplication
,
22 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEPrintDocuments
,
24 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEOpenDocuments
,
26 AE
.AEInstallEventHandler(AppleEvents
.kCoreEventClass
, AppleEvents
.kAEQuitApplication
,
28 import PyConsole
, PyEdit
30 Splash
.uninstall_importhook()
31 PyConsole
.installoutput()
32 PyConsole
.installconsole()
34 for path
in sys
.argv
[1:]:
38 def makeusermenus(self
):
39 m
= Wapplication
.Menu(self
.menubar
, "File")
40 newitem
= FrameWork
.MenuItem(m
, "New", "N", 'new')
41 openitem
= FrameWork
.MenuItem(m
, "OpenŠ", "O", 'open')
42 FrameWork
.Separator(m
)
43 closeitem
= FrameWork
.MenuItem(m
, "Close", "W", 'close')
44 saveitem
= FrameWork
.MenuItem(m
, "Save", "S", 'save')
45 saveasitem
= FrameWork
.MenuItem(m
, "Save asŠ", None, 'save_as')
46 FrameWork
.Separator(m
)
47 saveasappletitem
= FrameWork
.MenuItem(m
, "Save as AppletŠ", None, 'save_as_applet')
48 FrameWork
.Separator(m
)
49 quititem
= FrameWork
.MenuItem(m
, "Quit", "Q", 'quit')
51 m
= Wapplication
.Menu(self
.menubar
, "Edit")
52 undoitem
= FrameWork
.MenuItem(m
, "Undo", 'Z', "undo")
53 FrameWork
.Separator(m
)
54 cutitem
= FrameWork
.MenuItem(m
, "Cut", 'X', "cut")
55 copyitem
= FrameWork
.MenuItem(m
, "Copy", "C", "copy")
56 pasteitem
= FrameWork
.MenuItem(m
, "Paste", "V", "paste")
57 FrameWork
.MenuItem(m
, "Clear", None, "clear")
58 FrameWork
.Separator(m
)
59 selallitem
= FrameWork
.MenuItem(m
, "Select all", "A", "selectall")
60 sellineitem
= FrameWork
.MenuItem(m
, "Select line", "L", "selectline")
61 FrameWork
.Separator(m
)
62 finditem
= FrameWork
.MenuItem(m
, "FindŠ", "F", "find")
63 findagainitem
= FrameWork
.MenuItem(m
, "Find again", 'G', "findnext")
64 enterselitem
= FrameWork
.MenuItem(m
, "Enter search string", "E", "entersearchstring")
65 replaceitem
= FrameWork
.MenuItem(m
, "Replace", None, "replace")
66 replacefinditem
= FrameWork
.MenuItem(m
, "Replace & find again", 'T', "replacefind")
67 FrameWork
.Separator(m
)
68 shiftleftitem
= FrameWork
.MenuItem(m
, "Shift left", "[", "shiftleft")
69 shiftrightitem
= FrameWork
.MenuItem(m
, "Shift right", "]", "shiftright")
71 m
= Wapplication
.Menu(self
.menubar
, "Python")
72 runitem
= FrameWork
.MenuItem(m
, "Run window", "R", 'run')
73 runselitem
= FrameWork
.MenuItem(m
, "Run selection", None, 'runselection')
74 FrameWork
.Separator(m
)
75 moditem
= FrameWork
.MenuItem(m
, "Module browserŠ", "M", self
.domenu_modulebrowser
)
76 FrameWork
.Separator(m
)
77 mm
= FrameWork
.SubMenu(m
, "Preferences")
78 FrameWork
.MenuItem(mm
, "Set Scripts folderŠ", None, self
.do_setscriptsfolder
)
79 FrameWork
.MenuItem(mm
, "Editor default settingsŠ", None, self
.do_editorprefs
)
80 FrameWork
.MenuItem(mm
, "Set default window fontŠ", None, self
.do_setwindowfont
)
82 self
.openwindowsmenu
= Wapplication
.Menu(self
.menubar
, 'Windows')
83 self
.makeopenwindowsmenu()
84 self
._menustocheck
= [closeitem
, saveitem
, saveasitem
, saveasappletitem
,
85 undoitem
, cutitem
, copyitem
, pasteitem
,
86 selallitem
, sellineitem
,
87 finditem
, findagainitem
, enterselitem
, replaceitem
, replacefinditem
,
88 shiftleftitem
, shiftrightitem
,
91 prefs
= self
.getprefs()
93 fss
, fss_changed
= macfs
.RawAlias(prefs
.scriptsfolder
).Resolve()
94 self
.scriptsfolder
= fss
.NewAlias()
96 path
= os
.path
.join(os
.getcwd(), ":Mac:IDE scripts")
97 if not os
.path
.exists(path
):
98 path
= os
.path
.join(os
.getcwd(), "Scripts")
99 if not os
.path
.exists(path
):
101 f
= open(os
.path
.join(path
, "Place your scripts hereŠ"), "w")
103 fss
= macfs
.FSSpec(path
)
104 self
.scriptsfolder
= fss
.NewAlias()
105 self
.scriptsfoldermodtime
= fss
.GetDates()[1]
107 self
.scriptsfoldermodtime
= fss
.GetDates()[1]
108 prefs
.scriptsfolder
= self
.scriptsfolder
.data
110 self
.scriptsmenu
= None
111 self
.makescriptsmenu()
113 def quitevent(self
, theAppleEvent
, theReply
):
115 AE
.AEInteractWithUser(50000000)
118 def suspendresume(self
, onoff
):
120 fss
, fss_changed
= self
.scriptsfolder
.Resolve()
121 modtime
= fss
.GetDates()[1]
122 if self
.scriptsfoldermodtime
<> modtime
or fss_changed
:
123 self
.scriptsfoldermodtime
= modtime
125 self
.makescriptsmenu()
127 def ignoreevent(self
, theAppleEvent
, theReply
):
130 def opendocsevent(self
, theAppleEvent
, theReply
):
133 parameters
, args
= aetools
.unpackevent(theAppleEvent
)
134 docs
= parameters
['----']
135 if type(docs
) <> type([]):
138 fss
, a
= doc
.Resolve()
139 path
= fss
.as_pathname()
142 def opendoc(self
, path
):
143 fcreator
, ftype
= macfs
.FSSpec(path
).GetCreatorType()
145 self
.openscript(path
)
147 W
.Message("Can¹t open file of type '%s'." % ftype
)
149 def getabouttext(self
):
150 return "About Python IDEŠ"
152 def do_about(self
, id, item
, window
, event
):
155 def do_setscriptsfolder(self
, *args
):
156 fss
, ok
= macfs
.GetDirectory("Select Scripts Folder")
158 prefs
= self
.getprefs()
159 alis
= fss
.NewAlias()
160 prefs
.scriptsfolder
= alis
.data
161 self
.scriptsfolder
= alis
162 self
.makescriptsmenu()
165 def domenu_modulebrowser(self
, *args
):
168 ModuleBrowser
.ModuleBrowser()
170 def domenu_open(self
, *args
):
171 fss
, ok
= macfs
.StandardGetFile("TEXT")
173 self
.openscript(fss
.as_pathname())
175 def domenu_new(self
, *args
):
178 return PyEdit
.Editor()
180 def makescriptsmenu(self
):
183 for id, item
in self
._scripts
.keys():
184 if self
.menubar
.menus
.has_key(id):
185 m
= self
.menubar
.menus
[id]
189 if hasattr(self
.scriptsmenu
, 'id') and self
.menubar
.menus
.has_key(self
.scriptsmenu
.id):
190 self
.scriptsmenu
.delete()
191 self
.scriptsmenu
= FrameWork
.Menu(self
.menubar
, "Scripts")
192 #FrameWork.MenuItem(self.scriptsmenu, "New script", None, self.domenu_new)
193 #self.scriptsmenu.addseparator()
194 fss
, fss_changed
= self
.scriptsfolder
.Resolve()
195 self
.scriptswalk(fss
.as_pathname(), self
.scriptsmenu
)
197 def makeopenwindowsmenu(self
):
198 for i
in range(len(self
.openwindowsmenu
.items
)):
199 self
.openwindowsmenu
.menu
.DeleteMenuItem(1)
200 self
.openwindowsmenu
.items
= []
202 self
._openwindows
= {}
203 for window
in self
._windows
.keys():
204 title
= window
.GetWTitle()
207 windows
.append(title
, window
)
209 for title
, window
in windows
:
210 if title
== "Python Interactive": # ugly but useful hack by Joe Strout
214 item
= FrameWork
.MenuItem(self
.openwindowsmenu
, title
, shortcut
, callback
= self
.domenu_openwindows
)
215 self
._openwindows
[item
.item
] = window
216 self
._openwindowscheckmark
= 0
217 self
.checkopenwindowsmenu()
219 def domenu_openwindows(self
, id, item
, window
, event
):
220 w
= self
._openwindows
[item
]
224 def domenu_quit(self
):
227 def domenu_save(self
, *args
):
231 import PyConsole
, PyEdit
232 PyConsole
.console
.writeprefs()
233 PyConsole
.output
.writeprefs()
234 PyEdit
.searchengine
.writeprefs()
235 for window
in self
._windows
.values():
237 rv
= window
.close() # ignore any errors while quitting
239 rv
= 0 # (otherwise, we can get stuck!)