Fix the HTML tarball target to generate the HTML if needed instead of
[python/dscho.git] / Mac / Contrib / PyIDE-src / IDELib / PythonIDEMain.py
blob4b14bcd559702817dc0341d278e3fcec0cdcbb56
1 # copyright 1997 Just van Rossum, Letterror. just@knoware.nl
3 import Splash
5 import FrameWork
6 import WFrameWorkPatch
7 import Win
8 import W
9 import os
10 import macfs
12 class PythonIDE(WFrameWorkPatch.Application):
14 def __init__(self):
15 self.preffilepath = ":Python:PythonIDE preferences"
16 WFrameWorkPatch.Application.__init__(self, 'Pyth')
17 import AE, AppleEvents
19 AE.AEInstallEventHandler(AppleEvents.kCoreEventClass, AppleEvents.kAEOpenApplication,
20 self.ignoreevent)
21 AE.AEInstallEventHandler(AppleEvents.kCoreEventClass, AppleEvents.kAEPrintDocuments,
22 self.ignoreevent)
23 AE.AEInstallEventHandler(AppleEvents.kCoreEventClass, AppleEvents.kAEOpenDocuments,
24 self.opendocsevent)
25 AE.AEInstallEventHandler(AppleEvents.kCoreEventClass, AppleEvents.kAEQuitApplication,
26 self.quitevent)
27 import PyConsole, PyEdit
28 Splash.wait()
29 PyConsole.installconsole()
30 PyConsole.installoutput()
31 import sys
32 for path in sys.argv[1:]:
33 self.opendoc(path)
34 self.mainloop()
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,
83 runitem, runselitem]
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]
91 else:
92 path = os.path.join(os.getcwd(), 'Scripts')
93 if not os.path.exists(path):
94 os.mkdir(path)
95 fss = macfs.FSSpec(path)
96 self.scriptsfolder = fss.NewAlias()
97 self.scriptsfoldermodtime = fss.GetDates()[1]
98 self._scripts = {}
99 self.scriptsmenu = None
100 self.makescriptsmenu()
102 def quitevent(self, theAppleEvent, theReply):
103 import AE
104 AE.AEInteractWithUser(50000000)
105 self._quit()
107 def suspendresume(self, onoff):
108 if 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
113 W.SetCursor('watch')
114 self.makescriptsmenu()
116 def ignoreevent(self, theAppleEvent, theReply):
117 pass
119 def opendocsevent(self, theAppleEvent, theReply):
120 W.SetCursor('watch')
121 import aetools
122 parameters, args = aetools.unpackevent(theAppleEvent)
123 docs = parameters['----']
124 if type(docs) <> type([]):
125 docs = [docs]
126 for doc in docs:
127 fss, a = doc.Resolve()
128 path = fss.as_pathname()
129 self.opendoc(path)
131 def opendoc(self, path):
132 fcreator, ftype = macfs.FSSpec(path).GetCreatorType()
133 if ftype == 'TEXT':
134 self.openscript(path)
135 else:
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):
142 Splash.about()
144 def do_setscriptsfolder(self, *args):
145 fss, ok = macfs.GetDirectory("Select Scripts Folder")
146 if ok:
147 prefs = self.getprefs()
148 alis = fss.NewAlias()
149 prefs.scriptsfolder = alis.data
150 self.scriptsfolder = alis
151 self.makescriptsmenu()
152 prefs.save()
154 def domenu_modulebrowser(self, *args):
155 W.SetCursor('watch')
156 import ModuleBrowser
157 ModuleBrowser.ModuleBrowser()
159 def domenu_open(self, *args):
160 fss, ok = macfs.StandardGetFile("TEXT")
161 if ok:
162 self.openscript(fss.as_pathname())
164 def domenu_new(self, *args):
165 W.SetCursor('watch')
166 import PyEdit
167 return PyEdit.Editor()
169 def makescriptsmenu(self):
170 W.SetCursor('watch')
171 if self._scripts:
172 for id, item in self._scripts.keys():
173 if self.menubar.menus.has_key(id):
174 m = self.menubar.menus[id]
175 m.delete()
176 self._scripts = {}
177 if self.scriptsmenu:
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 = []
190 windows = []
191 self._openwindows = {}
192 for window in self._windows.keys():
193 title = window.GetWTitle()
194 if not title:
195 title = "<no title>"
196 windows.append(title, window)
197 windows.sort()
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]
206 w.ShowWindow()
207 w.SelectWindow()
209 def domenu_quit(self):
210 self._quit()
212 def domenu_save(self, *args):
213 print "Save"
215 def _quit(self):
216 import PyConsole, PyEdit
217 PyConsole.console.writeprefs()
218 PyEdit.searchengine.writeprefs()
219 for window in self._windows.values():
220 if window.close() > 0:
221 return
222 self.quitting = 1
224 PythonIDE()