annotate Mac/Tools/IDE/PyEdit.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents 233ed6cc8e14
children 21a50c308db4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1 """A (less & less) simple Python editor"""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
2
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
3 import W
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
4 import Wtraceback
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
5 from Wkeys import *
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
6
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
7 import MacOS
27408
ea5ee3e7bfb1 Use new file dialogs.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25903
diff changeset
8 import EasyDialogs
19488
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18781
diff changeset
9 from Carbon import Win
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18781
diff changeset
10 from Carbon import Res
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18781
diff changeset
11 from Carbon import Evt
24212
296dd32425d6 minor fixes, removed obsolete warning
Just van Rossum <just@letterror.com>
parents: 22715
diff changeset
12 from Carbon import Qd
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
13 from Carbon import File
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
14 import os
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
15 import imp
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
16 import sys
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
17 import string
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
18 import marshal
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
19 import re
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
20
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
21 smAllScripts = -3
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
22
21868
3cd0b4bb5e34 Added minimal support for floating windows.
Just van Rossum <just@letterror.com>
parents: 21772
diff changeset
23 if hasattr(Win, "FrontNonFloatingWindow"):
3cd0b4bb5e34 Added minimal support for floating windows.
Just van Rossum <just@letterror.com>
parents: 21772
diff changeset
24 MyFrontWindow = Win.FrontNonFloatingWindow
3cd0b4bb5e34 Added minimal support for floating windows.
Just van Rossum <just@letterror.com>
parents: 21772
diff changeset
25 else:
3cd0b4bb5e34 Added minimal support for floating windows.
Just van Rossum <just@letterror.com>
parents: 21772
diff changeset
26 MyFrontWindow = Win.FrontWindow
3cd0b4bb5e34 Added minimal support for floating windows.
Just van Rossum <just@letterror.com>
parents: 21772
diff changeset
27
3cd0b4bb5e34 Added minimal support for floating windows.
Just van Rossum <just@letterror.com>
parents: 21772
diff changeset
28
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
29 try:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
30 import Wthreading
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
31 except ImportError:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
32 haveThreading = 0
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
33 else:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
34 haveThreading = Wthreading.haveThreading
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
35
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
36 _scriptuntitledcounter = 1
18781
01ae962df885 Use string.ascii_letters instead of string.letters (SF bug #226706).
Fred Drake <fdrake@acm.org>
parents: 18453
diff changeset
37 _wordchars = string.ascii_letters + string.digits + "_"
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
38
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
39
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
40 runButtonLabels = ["Run all", "Stop!"]
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
41 runSelButtonLabels = ["Run selection", "Pause!", "Resume"]
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
42
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
43
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
44 class Editor(W.Window):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
45
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
46 def __init__(self, path = "", title = ""):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
47 defaultfontsettings, defaulttabsettings, defaultwindowsize = geteditorprefs()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
48 global _scriptuntitledcounter
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
49 if not path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
50 if title:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
51 self.title = title
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
52 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
53 self.title = "Untitled Script " + `_scriptuntitledcounter`
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
54 _scriptuntitledcounter = _scriptuntitledcounter + 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
55 text = ""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
56 self._creator = W._signature
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
57 self._eoln = os.linesep
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
58 elif os.path.exists(path):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
59 path = resolvealiases(path)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
60 dir, name = os.path.split(path)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
61 self.title = name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
62 f = open(path, "rb")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
63 text = f.read()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
64 f.close()
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
65 self._creator, filetype = MacOS.GetCreatorAndType(path)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
66 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
67 raise IOError, "file '%s' does not exist" % path
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
68 self.path = path
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
69
10874
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
70 if '\n' in text:
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
71 if string.find(text, '\r\n') >= 0:
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
72 self._eoln = '\r\n'
10874
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
73 else:
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
74 self._eoln = '\n'
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
75 text = string.replace(text, self._eoln, '\r')
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
76 change = 0
10874
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
77 else:
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
78 change = 0
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
79 self._eoln = '\r'
10874
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
80
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
81 self.settings = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
82 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
83 self.readwindowsettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
84 if self.settings.has_key("windowbounds"):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
85 bounds = self.settings["windowbounds"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
86 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
87 bounds = defaultwindowsize
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
88 if self.settings.has_key("fontsettings"):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
89 self.fontsettings = self.settings["fontsettings"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
90 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
91 self.fontsettings = defaultfontsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
92 if self.settings.has_key("tabsize"):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
93 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
94 self.tabsettings = (tabsize, tabmode) = self.settings["tabsize"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
95 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
96 self.tabsettings = defaulttabsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
97 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
98 self.tabsettings = defaulttabsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
99
10874
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
100 W.Window.__init__(self, bounds, self.title, minsize = (330, 120), tabbable = 0)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
101 self.setupwidgets(text)
10874
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
102 if change > 0:
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
103 self.editgroup.editor.textchanged()
10874
8634ea2ec4e2 Oliver Steele writes:
Just van Rossum <just@lettererror.com>
parents: 10705
diff changeset
104
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
105 if self.settings.has_key("selection"):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
106 selstart, selend = self.settings["selection"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
107 self.setselection(selstart, selend)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
108 self.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
109 self.setinfotext()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
110 self.globals = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
111 self._buf = "" # for write method
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
112 self.debugging = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
113 self.profiling = 0
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
114 self.run_as_main = self.settings.get("run_as_main", 0)
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
115 self.run_with_interpreter = self.settings.get("run_with_interpreter", 0)
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
116 self.run_with_cl_interpreter = self.settings.get("run_with_cl_interpreter", 0)
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
117 self._threadstate = (0, 0)
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
118 self._thread = None
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
119
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
120 def readwindowsettings(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
121 try:
12972
fc77e34ef274 Replaced OpenResFile calls with FSpOpenResFile calls (which are carbon-compatible).
Jack Jansen <jack.jansen@cwi.nl>
parents: 12879
diff changeset
122 resref = Res.FSpOpenResFile(self.path, 1)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
123 except Res.Error:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
124 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
125 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
126 Res.UseResFile(resref)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
127 data = Res.Get1Resource('PyWS', 128)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
128 self.settings = marshal.loads(data.data)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
129 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
130 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
131 Res.CloseResFile(resref)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
132
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
133 def writewindowsettings(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
134 try:
12972
fc77e34ef274 Replaced OpenResFile calls with FSpOpenResFile calls (which are carbon-compatible).
Jack Jansen <jack.jansen@cwi.nl>
parents: 12879
diff changeset
135 resref = Res.FSpOpenResFile(self.path, 3)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
136 except Res.Error:
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
137 Res.FSpCreateResFile(self.path, self._creator, 'TEXT', smAllScripts)
12972
fc77e34ef274 Replaced OpenResFile calls with FSpOpenResFile calls (which are carbon-compatible).
Jack Jansen <jack.jansen@cwi.nl>
parents: 12879
diff changeset
138 resref = Res.FSpOpenResFile(self.path, 3)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
139 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
140 data = Res.Resource(marshal.dumps(self.settings))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
141 Res.UseResFile(resref)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
142 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
143 temp = Res.Get1Resource('PyWS', 128)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
144 temp.RemoveResource()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
145 except Res.Error:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
146 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
147 data.AddResource('PyWS', 128, "window settings")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
148 finally:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
149 Res.UpdateResFile(resref)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
150 Res.CloseResFile(resref)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
151
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
152 def getsettings(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
153 self.settings = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
154 self.settings["windowbounds"] = self.getbounds()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
155 self.settings["selection"] = self.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
156 self.settings["fontsettings"] = self.editgroup.editor.getfontsettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
157 self.settings["tabsize"] = self.editgroup.editor.gettabsettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
158 self.settings["run_as_main"] = self.run_as_main
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
159 self.settings["run_with_interpreter"] = self.run_with_interpreter
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
160 self.settings["run_with_cl_interpreter"] = self.run_with_cl_interpreter
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
161
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
162 def get(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
163 return self.editgroup.editor.get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
164
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
165 def getselection(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
166 return self.editgroup.editor.ted.WEGetSelection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
167
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
168 def setselection(self, selstart, selend):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
169 self.editgroup.editor.setselection(selstart, selend)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
170
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
171 def getfilename(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
172 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
173 return self.path
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
174 return '<%s>' % self.title
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
175
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
176 def setupwidgets(self, text):
21013
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20852
diff changeset
177 topbarheight = 24
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
178 popfieldwidth = 80
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
179 self.lastlineno = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
180
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
181 # make an editor
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
182 self.editgroup = W.Group((0, topbarheight + 1, 0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
183 editor = W.PyEditor((0, 0, -15,-15), text,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
184 fontsettings = self.fontsettings,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
185 tabsettings = self.tabsettings,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
186 file = self.getfilename())
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
187
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
188 # make the widgets
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
189 self.popfield = ClassFinder((popfieldwidth - 17, -15, 16, 16), [], self.popselectline)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
190 self.linefield = W.EditText((-1, -15, popfieldwidth - 15, 16), inset = (6, 1))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
191 self.editgroup._barx = W.Scrollbar((popfieldwidth - 2, -15, -14, 16), editor.hscroll, max = 32767)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
192 self.editgroup._bary = W.Scrollbar((-15, 14, 16, -14), editor.vscroll, max = 32767)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
193 self.editgroup.editor = editor # add editor *after* scrollbars
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
194
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
195 self.editgroup.optionsmenu = W.PopupMenu((-15, -1, 16, 16), [])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
196 self.editgroup.optionsmenu.bind('<click>', self.makeoptionsmenu)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
197
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
198 self.bevelbox = W.BevelBox((0, 0, 0, topbarheight))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
199 self.hline = W.HorizontalLine((0, topbarheight, 0, 0))
21013
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20852
diff changeset
200 self.infotext = W.TextBox((175, 6, -4, 14), backgroundcolor = (0xe000, 0xe000, 0xe000))
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20852
diff changeset
201 self.runbutton = W.BevelButton((6, 4, 80, 16), runButtonLabels[0], self.run)
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20852
diff changeset
202 self.runselbutton = W.BevelButton((90, 4, 80, 16), runSelButtonLabels[0], self.runselection)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
203
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
204 # bind some keys
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
205 editor.bind("cmdr", self.runbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
206 editor.bind("enter", self.runselbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
207 editor.bind("cmdj", self.domenu_gotoline)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
208 editor.bind("cmdd", self.domenu_toggledebugger)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
209 editor.bind("<idle>", self.updateselection)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
210
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
211 editor.bind("cmde", searchengine.setfindstring)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
212 editor.bind("cmdf", searchengine.show)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
213 editor.bind("cmdg", searchengine.findnext)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
214 editor.bind("cmdshiftr", searchengine.replace)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
215 editor.bind("cmdt", searchengine.replacefind)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
216
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
217 self.linefield.bind("return", self.dolinefield)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
218 self.linefield.bind("enter", self.dolinefield)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
219 self.linefield.bind("tab", self.dolinefield)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
220
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
221 # intercept clicks
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
222 editor.bind("<click>", self.clickeditor)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
223 self.linefield.bind("<click>", self.clicklinefield)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
224
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
225 def makeoptionsmenu(self):
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
226 menuitems = [('Font settings\xc9', self.domenu_fontsettings),
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
227 ("Save options\xc9", self.domenu_options),
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
228 '-',
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
229 ('\0' + chr(self.run_as_main) + 'Run as __main__', self.domenu_toggle_run_as_main),
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
230 #('\0' + chr(self.run_with_interpreter) + 'Run with Interpreter', self.domenu_dtoggle_run_with_interpreter),
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
231 ('\0' + chr(self.run_with_cl_interpreter) + 'Run with commandline Python', self.domenu_toggle_run_with_cl_interpreter),
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
232 '-',
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
233 ('Modularize', self.domenu_modularize),
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
234 ('Browse namespace\xc9', self.domenu_browsenamespace),
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
235 '-']
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
236 if self.profiling:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
237 menuitems = menuitems + [('Disable profiler', self.domenu_toggleprofiler)]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
238 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
239 menuitems = menuitems + [('Enable profiler', self.domenu_toggleprofiler)]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
240 if self.editgroup.editor._debugger:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
241 menuitems = menuitems + [('Disable debugger', self.domenu_toggledebugger),
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
242 ('Clear breakpoints', self.domenu_clearbreakpoints),
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
243 ('Edit breakpoints\xc9', self.domenu_editbreakpoints)]
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
244 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
245 menuitems = menuitems + [('Enable debugger', self.domenu_toggledebugger)]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
246 self.editgroup.optionsmenu.set(menuitems)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
247
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
248 def domenu_toggle_run_as_main(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
249 self.run_as_main = not self.run_as_main
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
250 self.run_with_interpreter = 0
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
251 self.run_with_cl_interpreter = 0
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
252 self.editgroup.editor.selectionchanged()
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
253
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
254 def XXdomenu_toggle_run_with_interpreter(self):
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
255 self.run_with_interpreter = not self.run_with_interpreter
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
256 self.run_as_main = 0
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
257 self.run_with_cl_interpreter = 0
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
258 self.editgroup.editor.selectionchanged()
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
259
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
260 def domenu_toggle_run_with_cl_interpreter(self):
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
261 self.run_with_cl_interpreter = not self.run_with_cl_interpreter
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
262 self.run_as_main = 0
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
263 self.run_with_interpreter = 0
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
264 self.editgroup.editor.selectionchanged()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
265
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
266 def showbreakpoints(self, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
267 self.editgroup.editor.showbreakpoints(onoff)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
268 self.debugging = onoff
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
269
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
270 def domenu_clearbreakpoints(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
271 self.editgroup.editor.clearbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
272
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
273 def domenu_editbreakpoints(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
274 self.editgroup.editor.editbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
275
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
276 def domenu_toggledebugger(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
277 if not self.debugging:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
278 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
279 self.debugging = not self.debugging
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
280 self.editgroup.editor.togglebreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
281
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
282 def domenu_toggleprofiler(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
283 self.profiling = not self.profiling
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
284
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
285 def domenu_browsenamespace(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
286 import PyBrowser, W
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
287 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
288 globals, file, modname = self.getenvironment()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
289 if not modname:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
290 modname = self.title
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
291 PyBrowser.Browser(globals, "Object browser: " + modname)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
292
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
293 def domenu_modularize(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
294 modname = _filename_as_modname(self.title)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
295 if not modname:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
296 raise W.AlertError, "Can't modularize \"%s\"" % self.title
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
297 run_as_main = self.run_as_main
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
298 self.run_as_main = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
299 self.run()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
300 self.run_as_main = run_as_main
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
301 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
302 file = self.path
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
303 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
304 file = self.title
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
305
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
306 if self.globals and not sys.modules.has_key(modname):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
307 module = imp.new_module(modname)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
308 for attr in self.globals.keys():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
309 setattr(module,attr,self.globals[attr])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
310 sys.modules[modname] = module
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
311 self.globals = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
312
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
313 def domenu_fontsettings(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
314 import FontSettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
315 fontsettings = self.editgroup.editor.getfontsettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
316 tabsettings = self.editgroup.editor.gettabsettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
317 settings = FontSettings.FontDialog(fontsettings, tabsettings)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
318 if settings:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
319 fontsettings, tabsettings = settings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
320 self.editgroup.editor.setfontsettings(fontsettings)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
321 self.editgroup.editor.settabsettings(tabsettings)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
322
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
323 def domenu_options(self, *args):
22676
0b58ea07495c repair damage: canceling the "save options" dialog now works again.
Just van Rossum <just@letterror.com>
parents: 22673
diff changeset
324 rv = SaveOptions(self._creator, self._eoln)
0b58ea07495c repair damage: canceling the "save options" dialog now works again.
Just van Rossum <just@letterror.com>
parents: 22673
diff changeset
325 if rv:
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
326 self.editgroup.editor.selectionchanged() # ouch...
22676
0b58ea07495c repair damage: canceling the "save options" dialog now works again.
Just van Rossum <just@letterror.com>
parents: 22673
diff changeset
327 self._creator, self._eoln = rv
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
328
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
329 def clicklinefield(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
330 if self._currentwidget <> self.linefield:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
331 self.linefield.select(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
332 self.linefield.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
333 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
334
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
335 def clickeditor(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
336 if self._currentwidget <> self.editgroup.editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
337 self.dolinefield()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
338 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
339
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
340 def updateselection(self, force = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
341 sel = min(self.editgroup.editor.getselection())
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
342 lineno = self.editgroup.editor.offsettoline(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
343 if lineno <> self.lastlineno or force:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
344 self.lastlineno = lineno
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
345 self.linefield.set(str(lineno + 1))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
346 self.linefield.selview()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
347
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
348 def dolinefield(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
349 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
350 lineno = string.atoi(self.linefield.get()) - 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
351 if lineno <> self.lastlineno:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
352 self.editgroup.editor.selectline(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
353 self.updateselection(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
354 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
355 self.updateselection(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
356 self.editgroup.editor.select(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
357
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
358 def setinfotext(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
359 if not hasattr(self, 'infotext'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
360 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
361 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
362 self.infotext.set(self.path)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
363 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
364 self.infotext.set("")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
365
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
366 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
367 if self.editgroup.editor.changed:
18390
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
368 Qd.InitCursor()
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
369 save = EasyDialogs.AskYesNoCancel('Save window "%s" before closing?' % self.title,
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
370 default=1, no="Don\xd5t save")
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
371 if save > 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
372 if self.domenu_save():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
373 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
374 elif save < 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
375 return 1
18390
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
376 self.globals = None
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
377 W.Window.close(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
378
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
379 def domenu_close(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
380 return self.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
381
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
382 def domenu_save(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
383 if not self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
384 # Will call us recursively
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
385 return self.domenu_save_as()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
386 data = self.editgroup.editor.get()
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
387 if self._eoln != '\r':
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
388 data = string.replace(data, '\r', self._eoln)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
389 fp = open(self.path, 'wb') # open file in binary mode, data has '\r' line-endings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
390 fp.write(data)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
391 fp.close()
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
392 MacOS.SetCreatorAndType(self.path, self._creator, 'TEXT')
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
393 self.getsettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
394 self.writewindowsettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
395 self.editgroup.editor.changed = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
396 self.editgroup.editor.selchanged = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
397 import linecache
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
398 if linecache.cache.has_key(self.path):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
399 del linecache.cache[self.path]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
400 import macostools
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
401 macostools.touched(self.path)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
402
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
403 def can_save(self, menuitem):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
404 return self.editgroup.editor.changed or self.editgroup.editor.selchanged
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
405
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
406 def domenu_save_as(self, *args):
27408
ea5ee3e7bfb1 Use new file dialogs.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25903
diff changeset
407 path = EasyDialogs.AskFileForSave(message='Save as:', savedFileName=self.title)
ea5ee3e7bfb1 Use new file dialogs.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25903
diff changeset
408 if not path:
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
409 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
410 self.showbreakpoints(0)
27408
ea5ee3e7bfb1 Use new file dialogs.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25903
diff changeset
411 self.path = path
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
412 self.setinfotext()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
413 self.title = os.path.split(self.path)[-1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
414 self.wid.SetWTitle(self.title)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
415 self.domenu_save()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
416 self.editgroup.editor.setfile(self.getfilename())
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
417 app = W.getapplication()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
418 app.makeopenwindowsmenu()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
419 if hasattr(app, 'makescriptsmenu'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
420 app = W.getapplication()
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
421 fsr, changed = app.scriptsfolder.FSResolveAlias(None)
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
422 path = fsr.as_pathname()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
423 if path == self.path[:len(path)]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
424 W.getapplication().makescriptsmenu()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
425
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
426 def domenu_save_as_applet(self, *args):
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
427 import buildtools
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
428
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
429 buildtools.DEBUG = 0 # ouch.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
430
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
431 if self.title[-3:] == ".py":
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
432 destname = self.title[:-3]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
433 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
434 destname = self.title + ".applet"
27408
ea5ee3e7bfb1 Use new file dialogs.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25903
diff changeset
435 destname = EasyDialogs.AskFileForSave(message='Save as Applet:',
ea5ee3e7bfb1 Use new file dialogs.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25903
diff changeset
436 savedFileName=destname)
ea5ee3e7bfb1 Use new file dialogs.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25903
diff changeset
437 if not destname:
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
438 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
439 W.SetCursor("watch")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
440 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
441 filename = self.path
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
442 if filename[-3:] == ".py":
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
443 rsrcname = filename[:-3] + '.rsrc'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
444 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
445 rsrcname = filename + '.rsrc'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
446 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
447 filename = self.title
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
448 rsrcname = ""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
449
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
450 pytext = self.editgroup.editor.get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
451 pytext = string.split(pytext, '\r')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
452 pytext = string.join(pytext, '\n') + '\n'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
453 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
454 code = compile(pytext, filename, "exec")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
455 except (SyntaxError, EOFError):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
456 raise buildtools.BuildError, "Syntax error in script %s" % `filename`
27838
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
457
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
458 import tempfile
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
459 tmpdir = tempfile.mkdtemp()
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
460
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
461 if filename[-3:] != ".py":
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
462 filename = filename + ".py"
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
463 filename = os.path.join(tmpdir, os.path.split(filename)[1])
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
464 fp = open(filename, "w")
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
465 fp.write(pytext)
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
466 fp.close()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
467
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
468 # Try removing the output file
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
469 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
470 os.remove(destname)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
471 except os.error:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
472 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
473 template = buildtools.findtemplate()
27838
b51970ba2180 Create applets slightly differently: by saving the sourcecode to a
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
474 buildtools.process(template, filename, destname, rsrcname=rsrcname, progress=None)
27905
233ed6cc8e14 When building an applet clear out the tempfile and dir afterwards.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27838
diff changeset
475 try:
233ed6cc8e14 When building an applet clear out the tempfile and dir afterwards.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27838
diff changeset
476 os.remove(filename)
233ed6cc8e14 When building an applet clear out the tempfile and dir afterwards.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27838
diff changeset
477 os.rmdir(tmpdir)
233ed6cc8e14 When building an applet clear out the tempfile and dir afterwards.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27838
diff changeset
478 except os.error:
233ed6cc8e14 When building an applet clear out the tempfile and dir afterwards.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27838
diff changeset
479 pass
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
480
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
481 def domenu_gotoline(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
482 self.linefield.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
483 self.linefield.select(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
484 self.linefield.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
485
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
486 def domenu_selectline(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
487 self.editgroup.editor.expandselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
488
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
489 def domenu_find(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
490 searchengine.show()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
491
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
492 def domenu_entersearchstring(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
493 searchengine.setfindstring()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
494
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
495 def domenu_replace(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
496 searchengine.replace()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
497
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
498 def domenu_findnext(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
499 searchengine.findnext()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
500
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
501 def domenu_replacefind(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
502 searchengine.replacefind()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
503
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
504 def domenu_run(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
505 self.runbutton.push()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
506
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
507 def domenu_runselection(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
508 self.runselbutton.push()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
509
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
510 def run(self):
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
511 if self._threadstate == (0, 0):
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
512 self._run()
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
513 else:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
514 lock = Wthreading.Lock()
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
515 lock.acquire()
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
516 self._thread.postException(KeyboardInterrupt)
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
517 if self._thread.isBlocked():
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
518 self._thread.start()
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
519 lock.release()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
520
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
521 def _run(self):
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
522 if self.run_with_interpreter:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
523 if self.editgroup.editor.changed:
24212
296dd32425d6 minor fixes, removed obsolete warning
Just van Rossum <just@letterror.com>
parents: 22715
diff changeset
524 Qd.InitCursor()
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
525 save = EasyDialogs.AskYesNoCancel('Save "%s" before running?' % self.title, 1)
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
526 if save > 0:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
527 if self.domenu_save():
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
528 return
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
529 elif save < 0:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
530 return
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
531 if not self.path:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
532 raise W.AlertError, "Can't run unsaved file"
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
533 self._run_with_interpreter()
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
534 elif self.run_with_cl_interpreter:
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
535 if self.editgroup.editor.changed:
24212
296dd32425d6 minor fixes, removed obsolete warning
Just van Rossum <just@letterror.com>
parents: 22715
diff changeset
536 Qd.InitCursor()
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
537 save = EasyDialogs.AskYesNoCancel('Save "%s" before running?' % self.title, 1)
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
538 if save > 0:
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
539 if self.domenu_save():
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
540 return
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
541 elif save < 0:
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
542 return
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
543 if not self.path:
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
544 raise W.AlertError, "Can't run unsaved file"
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
545 self._run_with_cl_interpreter()
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
546 else:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
547 pytext = self.editgroup.editor.get()
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
548 globals, file, modname = self.getenvironment()
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
549 self.execstring(pytext, globals, globals, file, modname)
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
550
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
551 def _run_with_interpreter(self):
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
552 interp_path = os.path.join(sys.exec_prefix, "PythonInterpreter")
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
553 if not os.path.exists(interp_path):
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
554 raise W.AlertError, "Can't find interpreter"
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
555 import findertools
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
556 XXX
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
557
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
558 def _run_with_cl_interpreter(self):
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
559 import Terminal
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
560 interp_path = os.path.join(sys.exec_prefix, "bin", "python")
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
561 file_path = self.path
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
562 if not os.path.exists(interp_path):
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
563 # This "can happen" if we are running IDE under MacPython-OS9.
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
564 raise W.AlertError, "Can't find command-line Python"
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
565 cmd = '"%s" "%s" ; exit' % (interp_path, file_path)
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
566 t = Terminal.Terminal()
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
567 t.do_script(with_command=cmd)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
568
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
569 def runselection(self):
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
570 if self._threadstate == (0, 0):
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
571 self._runselection()
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
572 elif self._threadstate == (1, 1):
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
573 self._thread.block()
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
574 self.setthreadstate((1, 2))
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
575 elif self._threadstate == (1, 2):
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
576 self._thread.start()
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
577 self.setthreadstate((1, 1))
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
578
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
579 def _runselection(self):
22715
e0edfeea5183 Added a "run with commandline Python" flag. Works in MachoPython, should work
Jack Jansen <jack.jansen@cwi.nl>
parents: 22676
diff changeset
580 if self.run_with_interpreter or self.run_with_cl_interpreter:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
581 raise W.AlertError, "Can't run selection with Interpreter"
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
582 globals, file, modname = self.getenvironment()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
583 locals = globals
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
584 # select whole lines
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
585 self.editgroup.editor.expandselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
586
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
587 # get lineno of first selected line
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
588 selstart, selend = self.editgroup.editor.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
589 selstart, selend = min(selstart, selend), max(selstart, selend)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
590 selfirstline = self.editgroup.editor.offsettoline(selstart)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
591 alltext = self.editgroup.editor.get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
592 pytext = alltext[selstart:selend]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
593 lines = string.split(pytext, '\r')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
594 indent = getminindent(lines)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
595 if indent == 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
596 classname = ''
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
597 alllines = string.split(alltext, '\r')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
598 for i in range(selfirstline - 1, -1, -1):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
599 line = alllines[i]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
600 if line[:6] == 'class ':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
601 classname = string.split(string.strip(line[6:]))[0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
602 classend = identifieRE_match(classname)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
603 if classend < 1:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
604 raise W.AlertError, "Can't find a class."
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
605 classname = classname[:classend]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
606 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
607 elif line and line[0] not in '\t#':
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
608 raise W.AlertError, "Can't find a class."
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
609 else:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
610 raise W.AlertError, "Can't find a class."
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
611 if globals.has_key(classname):
18390
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
612 klass = globals[classname]
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
613 else:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
614 raise W.AlertError, "Can't find class \"%s\"." % classname
18390
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
615 # add class def
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
616 pytext = ("class %s:\n" % classname) + pytext
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
617 selfirstline = selfirstline - 1
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
618 elif indent > 0:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
619 raise W.AlertError, "Can't run indented code."
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
620
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
621 # add "newlines" to fool compile/exec:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
622 # now a traceback will give the right line number
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
623 pytext = selfirstline * '\r' + pytext
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
624 self.execstring(pytext, globals, locals, file, modname)
18390
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
625 if indent == 1 and globals[classname] is not klass:
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
626 # update the class in place
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
627 klass.__dict__.update(globals[classname].__dict__)
1e02e2014e36 - minor cleanup, removed bogus comments
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
628 globals[classname] = klass
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
629
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
630 def setthreadstate(self, state):
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
631 oldstate = self._threadstate
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
632 if oldstate[0] <> state[0]:
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
633 self.runbutton.settitle(runButtonLabels[state[0]])
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
634 if oldstate[1] <> state[1]:
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
635 self.runselbutton.settitle(runSelButtonLabels[state[1]])
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
636 self._threadstate = state
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
637
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
638 def _exec_threadwrapper(self, *args, **kwargs):
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
639 apply(execstring, args, kwargs)
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
640 self.setthreadstate((0, 0))
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
641 self._thread = None
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
642
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
643 def execstring(self, pytext, globals, locals, file, modname):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
644 tracebackwindow.hide()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
645 # update windows
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
646 W.getapplication().refreshwindows()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
647 if self.run_as_main:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
648 modname = "__main__"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
649 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
650 dir = os.path.dirname(self.path)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
651 savedir = os.getcwd()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
652 os.chdir(dir)
10058
ee6256081366 better sys.path munging when running scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10047
diff changeset
653 sys.path.insert(0, dir)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
654 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
655 cwdindex = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
656 try:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
657 if haveThreading:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
658 self._thread = Wthreading.Thread(os.path.basename(file),
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
659 self._exec_threadwrapper, pytext, globals, locals, file, self.debugging,
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
660 modname, self.profiling)
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
661 self.setthreadstate((1, 1))
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
662 self._thread.start()
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
663 else:
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
664 execstring(pytext, globals, locals, file, self.debugging,
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
665 modname, self.profiling)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
666 finally:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
667 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
668 os.chdir(savedir)
10058
ee6256081366 better sys.path munging when running scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10047
diff changeset
669 del sys.path[0]
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
670
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
671 def getenvironment(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
672 if self.path:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
673 file = self.path
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
674 dir = os.path.dirname(file)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
675 # check if we're part of a package
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
676 modname = ""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
677 while os.path.exists(os.path.join(dir, "__init__.py")):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
678 dir, dirname = os.path.split(dir)
10105
e6bba02ff624 fixed problem with "reloading" sub-sub-modules -- jvr
Just van Rossum <just@lettererror.com>
parents: 10087
diff changeset
679 modname = dirname + '.' + modname
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
680 subname = _filename_as_modname(self.title)
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
681 if subname is None:
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
682 return self.globals, file, None
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
683 if modname:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
684 if subname == "__init__":
10105
e6bba02ff624 fixed problem with "reloading" sub-sub-modules -- jvr
Just van Rossum <just@lettererror.com>
parents: 10087
diff changeset
685 # strip trailing period
e6bba02ff624 fixed problem with "reloading" sub-sub-modules -- jvr
Just van Rossum <just@lettererror.com>
parents: 10087
diff changeset
686 modname = modname[:-1]
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
687 else:
10105
e6bba02ff624 fixed problem with "reloading" sub-sub-modules -- jvr
Just van Rossum <just@lettererror.com>
parents: 10087
diff changeset
688 modname = modname + subname
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
689 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
690 modname = subname
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
691 if sys.modules.has_key(modname):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
692 globals = sys.modules[modname].__dict__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
693 self.globals = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
694 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
695 globals = self.globals
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
696 modname = subname
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
697 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
698 file = '<%s>' % self.title
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
699 globals = self.globals
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
700 modname = file
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
701 return globals, file, modname
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
702
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
703 def write(self, stuff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
704 """for use as stdout"""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
705 self._buf = self._buf + stuff
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
706 if '\n' in self._buf:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
707 self.flush()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
708
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
709 def flush(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
710 stuff = string.split(self._buf, '\n')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
711 stuff = string.join(stuff, '\r')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
712 end = self.editgroup.editor.ted.WEGetTextLength()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
713 self.editgroup.editor.ted.WESetSelection(end, end)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
714 self.editgroup.editor.ted.WEInsert(stuff, None, None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
715 self.editgroup.editor.updatescrollbars()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
716 self._buf = ""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
717 # ? optional:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
718 #self.wid.SelectWindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
719
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
720 def getclasslist(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
721 from string import find, strip
11629
d7e96cde6b47 changed the "method find" algorithm so the function/class/method popup menu also works with space-indented source files -- jvr
Just van Rossum <just@lettererror.com>
parents: 11423
diff changeset
722 methodRE = re.compile(r"\r[ \t]+def ")
d7e96cde6b47 changed the "method find" algorithm so the function/class/method popup menu also works with space-indented source files -- jvr
Just van Rossum <just@lettererror.com>
parents: 11423
diff changeset
723 findMethod = methodRE.search
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
724 editor = self.editgroup.editor
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
725 text = editor.get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
726 list = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
727 append = list.append
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
728 functag = "func"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
729 classtag = "class"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
730 methodtag = "method"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
731 pos = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
732 if text[:4] == 'def ':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
733 append((pos + 4, functag))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
734 pos = 4
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
735 while 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
736 pos = find(text, '\rdef ', pos + 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
737 if pos < 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
738 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
739 append((pos + 5, functag))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
740 pos = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
741 if text[:6] == 'class ':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
742 append((pos + 6, classtag))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
743 pos = 6
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
744 while 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
745 pos = find(text, '\rclass ', pos + 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
746 if pos < 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
747 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
748 append((pos + 7, classtag))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
749 pos = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
750 while 1:
11629
d7e96cde6b47 changed the "method find" algorithm so the function/class/method popup menu also works with space-indented source files -- jvr
Just van Rossum <just@lettererror.com>
parents: 11423
diff changeset
751 m = findMethod(text, pos + 1)
d7e96cde6b47 changed the "method find" algorithm so the function/class/method popup menu also works with space-indented source files -- jvr
Just van Rossum <just@lettererror.com>
parents: 11423
diff changeset
752 if m is None:
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
753 break
11629
d7e96cde6b47 changed the "method find" algorithm so the function/class/method popup menu also works with space-indented source files -- jvr
Just van Rossum <just@lettererror.com>
parents: 11423
diff changeset
754 pos = m.regs[0][0]
d7e96cde6b47 changed the "method find" algorithm so the function/class/method popup menu also works with space-indented source files -- jvr
Just van Rossum <just@lettererror.com>
parents: 11423
diff changeset
755 #pos = find(text, '\r\tdef ', pos + 1)
d7e96cde6b47 changed the "method find" algorithm so the function/class/method popup menu also works with space-indented source files -- jvr
Just van Rossum <just@lettererror.com>
parents: 11423
diff changeset
756 append((m.regs[0][1], methodtag))
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
757 list.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
758 classlist = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
759 methodlistappend = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
760 offsetToLine = editor.ted.WEOffsetToLine
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
761 getLineRange = editor.ted.WEGetLineRange
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
762 append = classlist.append
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
763 for pos, tag in list:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
764 lineno = offsetToLine(pos)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
765 lineStart, lineEnd = getLineRange(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
766 line = strip(text[pos:lineEnd])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
767 line = line[:identifieRE_match(line)]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
768 if tag is functag:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
769 append(("def " + line, lineno + 1))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
770 methodlistappend = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
771 elif tag is classtag:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
772 append(["class " + line])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
773 methodlistappend = classlist[-1].append
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
774 elif methodlistappend and tag is methodtag:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
775 methodlistappend(("def " + line, lineno + 1))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
776 return classlist
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
777
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
778 def popselectline(self, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
779 self.editgroup.editor.selectline(lineno - 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
780
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
781 def selectline(self, lineno, charoffset = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
782 self.editgroup.editor.selectline(lineno - 1, charoffset)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
783
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
784 class _saveoptions:
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
785
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
786 def __init__(self, creator, eoln):
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
787 self.rv = None
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
788 self.eoln = eoln
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
789 self.w = w = W.ModalDialog((260, 160), 'Save options')
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
790 radiobuttons = []
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
791 w.label = W.TextBox((8, 8, 80, 18), "File creator:")
10705
4788fd070a30 - made "Save options..." dialog more generic, so it's also usable from RoboFog
Just van Rossum <just@lettererror.com>
parents: 10323
diff changeset
792 w.ide_radio = W.RadioButton((8, 22, 160, 18), "This application", radiobuttons, self.ide_hit)
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
793 w.interp_radio = W.RadioButton((8, 42, 160, 18), "MacPython Interpreter", radiobuttons, self.interp_hit)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
794 w.interpx_radio = W.RadioButton((8, 62, 160, 18), "OSX PythonW Interpreter", radiobuttons, self.interpx_hit)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
795 w.other_radio = W.RadioButton((8, 82, 50, 18), "Other:", radiobuttons)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
796 w.other_creator = W.EditText((62, 82, 40, 20), creator, self.otherselect)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
797 w.none_radio = W.RadioButton((8, 102, 160, 18), "None", radiobuttons, self.none_hit)
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
798 w.cancelbutton = W.Button((-180, -30, 80, 16), "Cancel", self.cancelbuttonhit)
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
799 w.okbutton = W.Button((-90, -30, 80, 16), "Done", self.okbuttonhit)
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
800 w.setdefaultbutton(w.okbutton)
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
801 if creator == 'Pyth':
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
802 w.interp_radio.set(1)
10705
4788fd070a30 - made "Save options..." dialog more generic, so it's also usable from RoboFog
Just van Rossum <just@lettererror.com>
parents: 10323
diff changeset
803 elif creator == W._signature:
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
804 w.ide_radio.set(1)
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
805 elif creator == 'PytX':
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
806 w.interpx_radio.set(1)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
807 elif creator == '\0\0\0\0':
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
808 w.none_radio.set(1)
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
809 else:
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
810 w.other_radio.set(1)
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
811
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
812 w.eolnlabel = W.TextBox((168, 8, 80, 18), "Newline style:")
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
813 radiobuttons = []
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
814 w.unix_radio = W.RadioButton((168, 22, 80, 18), "Unix", radiobuttons, self.unix_hit)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
815 w.mac_radio = W.RadioButton((168, 42, 80, 18), "Macintosh", radiobuttons, self.mac_hit)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
816 w.win_radio = W.RadioButton((168, 62, 80, 18), "Windows", radiobuttons, self.win_hit)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
817 if self.eoln == '\n':
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
818 w.unix_radio.set(1)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
819 elif self.eoln == '\r\n':
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
820 w.win_radio.set(1)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
821 else:
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
822 w.mac_radio.set(1)
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
823
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
824 w.bind("cmd.", w.cancelbutton.push)
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
825 w.open()
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
826
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
827 def ide_hit(self):
10705
4788fd070a30 - made "Save options..." dialog more generic, so it's also usable from RoboFog
Just van Rossum <just@lettererror.com>
parents: 10323
diff changeset
828 self.w.other_creator.set(W._signature)
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
829
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
830 def interp_hit(self):
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
831 self.w.other_creator.set("Pyth")
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
832
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
833 def interpx_hit(self):
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
834 self.w.other_creator.set("PytX")
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
835
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
836 def none_hit(self):
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
837 self.w.other_creator.set("\0\0\0\0")
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
838
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
839 def otherselect(self, *args):
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
840 sel_from, sel_to = self.w.other_creator.getselection()
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
841 creator = self.w.other_creator.get()[:4]
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
842 creator = creator + " " * (4 - len(creator))
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
843 self.w.other_creator.set(creator)
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
844 self.w.other_creator.setselection(sel_from, sel_to)
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
845 self.w.other_radio.set(1)
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
846
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
847 def mac_hit(self):
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
848 self.eoln = '\r'
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
849
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
850 def unix_hit(self):
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
851 self.eoln = '\n'
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
852
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
853 def win_hit(self):
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
854 self.eoln = '\r\n'
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
855
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
856 def cancelbuttonhit(self):
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
857 self.w.close()
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
858
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
859 def okbuttonhit(self):
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
860 self.rv = (self.w.other_creator.get()[:4], self.eoln)
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
861 self.w.close()
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
862
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
863
22673
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
864 def SaveOptions(creator, eoln):
b96740c42e80 Completely revamped newline handling. PyEdit is now newline-preserving
Jack Jansen <jack.jansen@cwi.nl>
parents: 21868
diff changeset
865 s = _saveoptions(creator, eoln)
10323
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
866 return s.rv
fed66bddce63 added "Save options" menu to popup so users can set the creator of scripts -- jvr
Just van Rossum <just@lettererror.com>
parents: 10105
diff changeset
867
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
868
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
869 def _escape(where, what) :
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
870 return string.join(string.split(where, what), '\\' + what)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
871
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
872 def _makewholewordpattern(word):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
873 # first, escape special regex chars
18453
e78a51268c81 - fixed some re usage, partly so it'll still work when re uses pre instead
Just van Rossum <just@letterror.com>
parents: 18390
diff changeset
874 for esc in "\\[]()|.*^+$?":
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
875 word = _escape(word, esc)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
876 notwordcharspat = '[^' + _wordchars + ']'
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
877 pattern = '(' + word + ')'
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
878 if word[0] in _wordchars:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
879 pattern = notwordcharspat + pattern
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
880 if word[-1] in _wordchars:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
881 pattern = pattern + notwordcharspat
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
882 return re.compile(pattern)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
883
21013
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20852
diff changeset
884
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
885 class SearchEngine:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
886
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
887 def __init__(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
888 self.visible = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
889 self.w = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
890 self.parms = { "find": "",
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
891 "replace": "",
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
892 "wrap": 1,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
893 "casesens": 1,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
894 "wholeword": 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
895 }
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
896 import MacPrefs
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
897 prefs = MacPrefs.GetPrefs(W.getapplication().preffilepath)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
898 if prefs.searchengine:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
899 self.parms["casesens"] = prefs.searchengine.casesens
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
900 self.parms["wrap"] = prefs.searchengine.wrap
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
901 self.parms["wholeword"] = prefs.searchengine.wholeword
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
902
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
903 def show(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
904 self.visible = 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
905 if self.w:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
906 self.w.wid.ShowWindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
907 self.w.wid.SelectWindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
908 self.w.find.edit.select(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
909 self.w.find.edit.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
910 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
911 self.w = W.Dialog((420, 150), "Find")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
912
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
913 self.w.find = TitledEditText((10, 4, 300, 36), "Search for:")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
914 self.w.replace = TitledEditText((10, 100, 300, 36), "Replace with:")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
915
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
916 self.w.boxes = W.Group((10, 50, 300, 40))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
917 self.w.boxes.casesens = W.CheckBox((0, 0, 100, 16), "Case sensitive")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
918 self.w.boxes.wholeword = W.CheckBox((0, 20, 100, 16), "Whole word")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
919 self.w.boxes.wrap = W.CheckBox((110, 0, 100, 16), "Wrap around")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
920
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
921 self.buttons = [ ("Find", "cmdf", self.find),
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
922 ("Replace", "cmdr", self.replace),
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
923 ("Replace all", None, self.replaceall),
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
924 ("Don't find", "cmdd", self.dont),
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
925 ("Cancel", "cmd.", self.cancel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
926 ]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
927 for i in range(len(self.buttons)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
928 bounds = -90, 22 + i * 24, 80, 16
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
929 title, shortcut, callback = self.buttons[i]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
930 self.w[title] = W.Button(bounds, title, callback)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
931 if shortcut:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
932 self.w.bind(shortcut, self.w[title].push)
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
933 self.w.setdefaultbutton(self.w["Don't find"])
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
934 self.w.find.edit.bind("<key>", self.key)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
935 self.w.bind("<activate>", self.activate)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
936 self.w.bind("<close>", self.close)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
937 self.w.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
938 self.setparms()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
939 self.w.find.edit.select(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
940 self.w.find.edit.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
941 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
942
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
943 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
944 self.hide()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
945 return -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
946
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
947 def key(self, char, modifiers):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
948 self.w.find.edit.key(char, modifiers)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
949 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
950 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
951
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
952 def activate(self, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
953 if onoff:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
954 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
955
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
956 def checkbuttons(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
957 editor = findeditor(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
958 if editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
959 if self.w.find.get():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
960 for title, cmd, call in self.buttons[:-2]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
961 self.w[title].enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
962 self.w.setdefaultbutton(self.w["Find"])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
963 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
964 for title, cmd, call in self.buttons[:-2]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
965 self.w[title].enable(0)
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
966 self.w.setdefaultbutton(self.w["Don't find"])
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
967 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
968 for title, cmd, call in self.buttons[:-2]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
969 self.w[title].enable(0)
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
970 self.w.setdefaultbutton(self.w["Don't find"])
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
971
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
972 def find(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
973 self.getparmsfromwindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
974 if self.findnext():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
975 self.hide()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
976
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
977 def replace(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
978 editor = findeditor(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
979 if not editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
980 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
981 if self.visible:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
982 self.getparmsfromwindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
983 text = editor.getselectedtext()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
984 find = self.parms["find"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
985 if not self.parms["casesens"]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
986 find = string.lower(find)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
987 text = string.lower(text)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
988 if text == find:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
989 self.hide()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
990 editor.insert(self.parms["replace"])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
991
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
992 def replaceall(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
993 editor = findeditor(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
994 if not editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
995 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
996 if self.visible:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
997 self.getparmsfromwindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
998 W.SetCursor("watch")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
999 find = self.parms["find"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1000 if not find:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1001 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1002 findlen = len(find)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1003 replace = self.parms["replace"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1004 replacelen = len(replace)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1005 Text = editor.get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1006 if not self.parms["casesens"]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1007 find = string.lower(find)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1008 text = string.lower(Text)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1009 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1010 text = Text
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1011 newtext = ""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1012 pos = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1013 counter = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1014 while 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1015 if self.parms["wholeword"]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1016 wholewordRE = _makewholewordpattern(find)
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1017 match = wholewordRE.search(text, pos)
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1018 if match:
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1019 pos = match.start(1)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1020 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1021 pos = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1022 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1023 pos = string.find(text, find, pos)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1024 if pos < 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1025 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1026 counter = counter + 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1027 text = text[:pos] + replace + text[pos + findlen:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1028 Text = Text[:pos] + replace + Text[pos + findlen:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1029 pos = pos + replacelen
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1030 W.SetCursor("arrow")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1031 if counter:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1032 self.hide()
19488
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18781
diff changeset
1033 from Carbon import Res
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
1034 editor.textchanged()
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
1035 editor.selectionchanged()
25903
03c3f610e054 'Replace all' in the find dialog didn't properly update the text view (it used to, though...). Fixed.
Just van Rossum <just@letterror.com>
parents: 24212
diff changeset
1036 editor.set(Text)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1037 EasyDialogs.Message("Replaced %d occurrences" % counter)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1038
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1039 def dont(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1040 self.getparmsfromwindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1041 self.hide()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1042
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1043 def replacefind(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1044 self.replace()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1045 self.findnext()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1046
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1047 def setfindstring(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1048 editor = findeditor(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1049 if not editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1050 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1051 find = editor.getselectedtext()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1052 if not find:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1053 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1054 self.parms["find"] = find
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1055 if self.w:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1056 self.w.find.edit.set(self.parms["find"])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1057 self.w.find.edit.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1058
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1059 def findnext(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1060 editor = findeditor(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1061 if not editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1062 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1063 find = self.parms["find"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1064 if not find:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1065 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1066 text = editor.get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1067 if not self.parms["casesens"]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1068 find = string.lower(find)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1069 text = string.lower(text)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1070 selstart, selend = editor.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1071 selstart, selend = min(selstart, selend), max(selstart, selend)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1072 if self.parms["wholeword"]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1073 wholewordRE = _makewholewordpattern(find)
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1074 match = wholewordRE.search(text, selend)
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1075 if match:
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1076 pos = match.start(1)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1077 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1078 pos = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1079 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1080 pos = string.find(text, find, selend)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1081 if pos >= 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1082 editor.setselection(pos, pos + len(find))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1083 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1084 elif self.parms["wrap"]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1085 if self.parms["wholeword"]:
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1086 match = wholewordRE.search(text, 0)
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1087 if match:
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1088 pos = match.start(1)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1089 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1090 pos = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1091 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1092 pos = string.find(text, find)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1093 if selstart > pos >= 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1094 editor.setselection(pos, pos + len(find))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1095 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1096
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1097 def setparms(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1098 for key, value in self.parms.items():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1099 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1100 self.w[key].set(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1101 except KeyError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1102 self.w.boxes[key].set(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1103
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1104 def getparmsfromwindow(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1105 if not self.w:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1106 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1107 for key, value in self.parms.items():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1108 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1109 value = self.w[key].get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1110 except KeyError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1111 value = self.w.boxes[key].get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1112 self.parms[key] = value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1113
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1114 def cancel(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1115 self.hide()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1116 self.setparms()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1117
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1118 def hide(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1119 if self.w:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1120 self.w.wid.HideWindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1121 self.visible = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1122
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1123 def writeprefs(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1124 import MacPrefs
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1125 self.getparmsfromwindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1126 prefs = MacPrefs.GetPrefs(W.getapplication().preffilepath)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1127 prefs.searchengine.casesens = self.parms["casesens"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1128 prefs.searchengine.wrap = self.parms["wrap"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1129 prefs.searchengine.wholeword = self.parms["wholeword"]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1130 prefs.save()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1131
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1132
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1133 class TitledEditText(W.Group):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1134
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1135 def __init__(self, possize, title, text = ""):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1136 W.Group.__init__(self, possize)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1137 self.title = W.TextBox((0, 0, 0, 16), title)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1138 self.edit = W.EditText((0, 16, 0, 0), text)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1139
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1140 def set(self, value):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1141 self.edit.set(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1142
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1143 def get(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1144 return self.edit.get()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1145
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1146
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1147 class ClassFinder(W.PopupWidget):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1148
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1149 def click(self, point, modifiers):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1150 W.SetCursor("watch")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1151 self.set(self._parentwindow.getclasslist())
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1152 W.PopupWidget.click(self, point, modifiers)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1153
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1154
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1155 def getminindent(lines):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1156 indent = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1157 for line in lines:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1158 stripped = string.strip(line)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1159 if not stripped or stripped[0] == '#':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1160 continue
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1161 if indent < 0 or line[:indent] <> indent * '\t':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1162 indent = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1163 for c in line:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1164 if c <> '\t':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1165 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1166 indent = indent + 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1167 return indent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1168
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1169
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1170 def getoptionkey():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1171 return not not ord(Evt.GetKeys()[7]) & 0x04
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1172
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1173
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1174 def execstring(pytext, globals, locals, filename="<string>", debugging=0,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1175 modname="__main__", profiling=0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1176 if debugging:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1177 import PyDebugger, bdb
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1178 BdbQuit = bdb.BdbQuit
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1179 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1180 BdbQuit = 'BdbQuitDummyException'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1181 pytext = string.split(pytext, '\r')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1182 pytext = string.join(pytext, '\n') + '\n'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1183 W.SetCursor("watch")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1184 globals['__name__'] = modname
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1185 globals['__file__'] = filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1186 sys.argv = [filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1187 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1188 code = compile(pytext, filename, "exec")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1189 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1190 # XXXX BAAAADDD.... We let tracebackwindow decide to treat SyntaxError
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1191 # special. That's wrong because THIS case is special (could be literal
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1192 # overflow!) and SyntaxError could mean we need a traceback (syntax error
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1193 # in imported module!!!
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1194 tracebackwindow.traceback(1, filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1195 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1196 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1197 if debugging:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1198 if haveThreading:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1199 lock = Wthreading.Lock()
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1200 lock.acquire()
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
1201 PyDebugger.startfromhere()
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1202 lock.release()
12308
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
1203 else:
ddc4e62b216b added experimental microthread support for use with stackless python -- bw compatible (jvr)
Just van Rossum <just@lettererror.com>
parents: 11629
diff changeset
1204 PyDebugger.startfromhere()
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1205 elif not haveThreading:
21772
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
1206 if hasattr(MacOS, 'EnableAppswitch'):
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
1207 MacOS.EnableAppswitch(0)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1208 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1209 if profiling:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1210 import profile, ProfileBrowser
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1211 p = profile.Profile()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1212 p.set_cmd(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1213 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1214 p.runctx(code, globals, locals)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1215 finally:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1216 import pstats
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1217
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1218 stats = pstats.Stats(p)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1219 ProfileBrowser.ProfileBrowser(stats)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1220 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1221 exec code in globals, locals
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1222 finally:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1223 if not haveThreading:
21772
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
1224 if hasattr(MacOS, 'EnableAppswitch'):
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
1225 MacOS.EnableAppswitch(-1)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1226 except W.AlertError, detail:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1227 raise W.AlertError, detail
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1228 except (KeyboardInterrupt, BdbQuit):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1229 pass
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
1230 except SystemExit, arg:
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
1231 if arg.code:
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
1232 sys.stderr.write("Script exited with status code: %s\n" % repr(arg.code))
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1233 except:
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1234 if haveThreading:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1235 import continuation
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1236 lock = Wthreading.Lock()
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1237 lock.acquire()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1238 if debugging:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1239 sys.settrace(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1240 PyDebugger.postmortem(sys.exc_type, sys.exc_value, sys.exc_traceback)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1241 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1242 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1243 tracebackwindow.traceback(1, filename)
15283
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1244 if haveThreading:
4c7c779bad87 Hm, I never checked in my incomplete "run with interpreter" mods. UI is there (but is disabled), functionality is not there.
Just van Rossum <just@lettererror.com>
parents: 12972
diff changeset
1245 lock.release()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1246 if debugging:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1247 sys.settrace(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1248 PyDebugger.stop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1249
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1250
18453
e78a51268c81 - fixed some re usage, partly so it'll still work when re uses pre instead
Just van Rossum <just@letterror.com>
parents: 18390
diff changeset
1251 _identifieRE = re.compile(r"[A-Za-z_][A-Za-z_0-9]*")
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1252
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1253 def identifieRE_match(str):
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1254 match = _identifieRE.match(str)
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1255 if not match:
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1256 return -1
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1257 return match.end()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1258
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1259 def _filename_as_modname(fname):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1260 if fname[-3:] == '.py':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1261 modname = fname[:-3]
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1262 match = _identifieRE.match(modname)
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16344
diff changeset
1263 if match and match.start() == 0 and match.end() == len(modname):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1264 return string.join(string.split(modname, '.'), '_')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1265
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1266 def findeditor(topwindow, fromtop = 0):
21868
3cd0b4bb5e34 Added minimal support for floating windows.
Just van Rossum <just@letterror.com>
parents: 21772
diff changeset
1267 wid = MyFrontWindow()
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1268 if not fromtop:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1269 if topwindow.w and wid == topwindow.w.wid:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1270 wid = topwindow.w.wid.GetNextWindow()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1271 if not wid:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1272 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1273 app = W.getapplication()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1274 if app._windows.has_key(wid): # KeyError otherwise can happen in RoboFog :-(
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1275 window = W.getapplication()._windows[wid]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1276 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1277 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1278 if not isinstance(window, Editor):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1279 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1280 return window.editgroup.editor
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1281
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1282
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1283 class _EditorDefaultSettings:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1284
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1285 def __init__(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1286 self.template = "%s, %d point"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1287 self.fontsettings, self.tabsettings, self.windowsize = geteditorprefs()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1288 self.w = W.Dialog((328, 120), "Editor default settings")
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17961
diff changeset
1289 self.w.setfontbutton = W.Button((8, 8, 80, 16), "Set font\xc9", self.dofont)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1290 self.w.fonttext = W.TextBox((98, 10, -8, 14), self.template % (self.fontsettings[0], self.fontsettings[2]))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1291
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1292 self.w.picksizebutton = W.Button((8, 50, 80, 16), "Front window", self.picksize)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1293 self.w.xsizelabel = W.TextBox((98, 32, 40, 14), "Width:")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1294 self.w.ysizelabel = W.TextBox((148, 32, 40, 14), "Height:")
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1295 self.w.xsize = W.EditText((98, 48, 40, 20), `self.windowsize[0]`)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1296 self.w.ysize = W.EditText((148, 48, 40, 20), `self.windowsize[1]`)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1297
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1298 self.w.cancelbutton = W.Button((-180, -26, 80, 16), "Cancel", self.cancel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1299 self.w.okbutton = W.Button((-90, -26, 80, 16), "Done", self.ok)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1300 self.w.setdefaultbutton(self.w.okbutton)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1301 self.w.bind('cmd.', self.w.cancelbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1302 self.w.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1303
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1304 def picksize(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1305 app = W.getapplication()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1306 editor = findeditor(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1307 if editor is not None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1308 width, height = editor._parentwindow._bounds[2:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1309 self.w.xsize.set(`width`)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1310 self.w.ysize.set(`height`)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1311 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1312 raise W.AlertError, "No edit window found"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1313
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1314 def dofont(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1315 import FontSettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1316 settings = FontSettings.FontDialog(self.fontsettings, self.tabsettings)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1317 if settings:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1318 self.fontsettings, self.tabsettings = settings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1319 sys.exc_traceback = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1320 self.w.fonttext.set(self.template % (self.fontsettings[0], self.fontsettings[2]))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1321
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1322 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1323 self.w.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1324 del self.w
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1325
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1326 def cancel(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1327 self.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1328
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1329 def ok(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1330 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1331 width = string.atoi(self.w.xsize.get())
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1332 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1333 self.w.xsize.select(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1334 self.w.xsize.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1335 raise W.AlertError, "Bad number for window width"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1336 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1337 height = string.atoi(self.w.ysize.get())
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1338 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1339 self.w.ysize.select(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1340 self.w.ysize.selectall()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1341 raise W.AlertError, "Bad number for window height"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1342 self.windowsize = width, height
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1343 seteditorprefs(self.fontsettings, self.tabsettings, self.windowsize)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1344 self.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1345
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1346 def geteditorprefs():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1347 import MacPrefs
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1348 prefs = MacPrefs.GetPrefs(W.getapplication().preffilepath)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1349 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1350 fontsettings = prefs.pyedit.fontsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1351 tabsettings = prefs.pyedit.tabsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1352 windowsize = prefs.pyedit.windowsize
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1353 except:
20835
3fbd253dea5d some support for syntax coloring, disabled for now
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
1354 fontsettings = prefs.pyedit.fontsettings = ("Geneva", 0, 10, (0, 0, 0))
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1355 tabsettings = prefs.pyedit.tabsettings = (8, 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1356 windowsize = prefs.pyedit.windowsize = (500, 250)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1357 sys.exc_traceback = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1358 return fontsettings, tabsettings, windowsize
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1359
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1360 def seteditorprefs(fontsettings, tabsettings, windowsize):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1361 import MacPrefs
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1362 prefs = MacPrefs.GetPrefs(W.getapplication().preffilepath)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1363 prefs.pyedit.fontsettings = fontsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1364 prefs.pyedit.tabsettings = tabsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1365 prefs.pyedit.windowsize = windowsize
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1366 prefs.save()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1367
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1368 _defaultSettingsEditor = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1369
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1370 def EditorDefaultSettings():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1371 global _defaultSettingsEditor
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1372 if _defaultSettingsEditor is None or not hasattr(_defaultSettingsEditor, "w"):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1373 _defaultSettingsEditor = _EditorDefaultSettings()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1374 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1375 _defaultSettingsEditor.w.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1376
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1377 def resolvealiases(path):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1378 try:
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
1379 fsr, d1, d2 = File.FSResolveAliasFile(path, 1)
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
1380 path = fsr.as_pathname()
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
1381 return path
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 27408
diff changeset
1382 except (File.Error, ValueError), (error, str):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1383 if error <> -120:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1384 raise
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1385 dir, file = os.path.split(path)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1386 return os.path.join(resolvealiases(dir), file)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1387
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1388 searchengine = SearchEngine()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1389 tracebackwindow = Wtraceback.TraceBack()