5 #$ event <<open-window-from-file>>
7 #$ unix <Control-x><Control-f>
9 #$ event <<save-window>>
11 #$ unix <Control-x><Control-s>
13 #$ event <<save-window-as-file>>
15 #$ unix <Control-x><Control-w>
17 #$ event <<save-copy-of-window-as-file>>
19 #$ unix <Control-x><w>
24 def __init__(self
, editwin
):
25 self
.editwin
= editwin
26 self
.text
= editwin
.text
27 self
.__id
_open
= self
.text
.bind("<<open-window-from-file>>", self
.open)
28 self
.__id
_save
= self
.text
.bind("<<save-window>>", self
.save
)
29 self
.__id
_saveas
= self
.text
.bind("<<save-window-as-file>>",
31 self
.__id
_savecopy
= self
.text
.bind("<<save-copy-of-window-as-file>>",
35 # Undo command bindings
36 self
.text
.unbind("<<open-window-from-file>>", self
.__id
_open
)
37 self
.text
.unbind("<<save-window>>", self
.__id
_save
)
38 self
.text
.unbind("<<save-window-as-file>>",self
.__id
_saveas
)
39 self
.text
.unbind("<<save-copy-of-window-as-file>>", self
.__id
_savecopy
)
43 self
.filename_change_hook
= None
46 return self
.editwin
.get_saved()
48 def set_saved(self
, flag
):
49 self
.editwin
.set_saved(flag
)
52 self
.editwin
.reset_undo()
54 filename_change_hook
= None
56 def set_filename_change_hook(self
, hook
):
57 self
.filename_change_hook
= hook
61 def set_filename(self
, filename
):
62 self
.filename
= filename
64 if self
.filename_change_hook
:
65 self
.filename_change_hook()
67 def open(self
, event
):
68 if self
.editwin
.flist
:
69 filename
= self
.askopenfile()
71 self
.editwin
.flist
.open(filename
)
75 # Code for use outside IDLE:
77 reply
= self
.maybesave()
81 filename
= self
.askopenfile()
83 self
.loadfile(filename
)
88 def loadfile(self
, filename
):
94 tkMessageBox
.showerror("I/O Error", str(msg
), master
=self
.text
)
96 self
.text
.delete("1.0", "end")
97 self
.set_filename(None)
98 self
.text
.insert("1.0", chars
)
100 self
.set_filename(filename
)
101 self
.text
.mark_set("insert", "1.0")
102 self
.text
.see("insert")
108 message
= "Do you want to save %s before closing?" % (
109 self
.filename
or "this untitled document")
110 m
= tkMessageBox
.Message(
111 title
="Save On Close",
113 icon
=tkMessageBox
.QUESTION
,
114 type=tkMessageBox
.YESNOCANCEL
,
119 if not self
.get_saved():
121 self
.text
.focus_set()
124 def save(self
, event
):
125 if not self
.filename
:
128 if self
.writefile(self
.filename
):
130 self
.text
.focus_set()
133 def save_as(self
, event
):
134 filename
= self
.asksavefile()
136 if self
.writefile(filename
):
137 self
.set_filename(filename
)
139 self
.text
.focus_set()
142 def save_a_copy(self
, event
):
143 filename
= self
.asksavefile()
145 self
.writefile(filename
)
146 self
.text
.focus_set()
149 def writefile(self
, filename
):
152 f
= open(filename
, "w")
153 chars
= self
.text
.get("1.0", "end-1c")
156 ## print "saved to", `filename`
159 tkMessageBox
.showerror("I/O Error", str(msg
),
163 def fixlastline(self
):
164 c
= self
.text
.get("end-2c")
166 self
.text
.insert("end-1c", "\n")
172 ("Python and text files", "*.py *.pyw *.txt", "TEXT"),
173 ("All text files", "*", "TEXT"),
177 def askopenfile(self
):
178 dir, base
= self
.defaultfilename("open")
179 if not self
.opendialog
:
180 self
.opendialog
= tkFileDialog
.Open(master
=self
.text
,
181 filetypes
=self
.filetypes
)
182 return self
.opendialog
.show(initialdir
=dir, initialfile
=base
)
184 def defaultfilename(self
, mode
="open"):
186 return os
.path
.split(self
.filename
)
194 def asksavefile(self
):
195 dir, base
= self
.defaultfilename("save")
196 if not self
.savedialog
:
197 self
.savedialog
= tkFileDialog
.SaveAs(master
=self
.text
,
198 filetypes
=self
.filetypes
)
199 return self
.savedialog
.show(initialdir
=dir, initialfile
=base
)
205 def __init__(self
, text
):
208 self
.text
.bind("<Control-o>", self
.open)
209 self
.text
.bind("<Control-s>", self
.save
)
210 self
.text
.bind("<Alt-s>", self
.save_as
)
211 self
.text
.bind("<Alt-z>", self
.save_a_copy
)
212 def get_saved(self
): return 0
213 def set_saved(self
, flag
): pass
214 def reset_undo(self
): pass
215 def open(self
, event
):
216 self
.text
.event_generate("<<open-window-from-file>>")
217 def save(self
, event
):
218 self
.text
.event_generate("<<save-window>>")
219 def save_as(self
, event
):
220 self
.text
.event_generate("<<save-window-as-file>>")
221 def save_a_copy(self
, event
):
222 self
.text
.event_generate("<<save-copy-of-window-as-file>>")
226 editwin
= MyEditWin(text
)
227 io
= IOBinding(editwin
)
230 if __name__
== "__main__":
231 from Tkinter
import *