1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
from Tkinter import *
from ScrolledText import *
from ui_helpers import *
from ui_config import config
import Shells, Menu, StringIO, helpers, spawn, os, tempfile
class ComposeWindow(Shells.NonModal):
def __init__(self, master, msg, feedback):
Shells.NonModal.__init__(self, master)
self.msg = msg
self.feedback = feedback
self.top.title("Slime Composition Window")
self.top.iconname("Slime Composition Window")
menubar = Menu.Menubar(self.top)
Menu.Pulldown(menubar, "Menu",
["Use external editor", self.use_external],
["Save", self.save_msg],
["Postpone", self.postpone_msg],
["Send", self.send_msg],
["Abort", self.abort_msg])
buttonbar = Frame(self.top)
buttonbar.pack(fill=X)
CommandButton(buttonbar, "Send", self.send_msg)
self.textwin = ScrolledText(self.top)
self.textwin.pack(expand=YES, fill=BOTH)
self.textwin.focus_set()
self.textwin.config(background="white")
self.textwin.config(font=config["normal-font"])
self.textwin.insert('0.0', self.msg.getfulltext())
self.textwin.mark_set('insert', '0.0')
def use_external(self):
name = config["external-editor"]
if not name:
return
self.save_msg()
tempname = tempfile.mktemp()
text = self.textwin.get('0.0', 'end')
helpers.write_text_to_named_file(tempname, text)
self.top.iconify()
exit_code, stdout, stderr = \
spawn.run(name, stdin='', args=[tempname],
env=os.environ)
self.top.deiconify()
if exit_code != 0 or stderr != '':
d = ErrorBox(self, "External editor failed",
"The external editor failed:\n" + stderr)
d.show()
os.remove(tempname)
return
text = helpers.read_text_from_named_file(tempname)
os.remove(tempname)
self.textwin.delete('0.0', 'end')
self.textwin.insert('0.0', text)
self.textwin.mark_set('insert', '0.0')
def save_msg(self):
txt = self.textwin.get('0.0', 'end')
txtfile = StringIO.StringIO(txt)
self.msg.change_text(txtfile)
self.feedback.refresh_draft_toc()
def send_msg(self):
d = YesNoDialog(self.top, "Send message?")
if d.show():
self.save_msg()
if self.feedback.send_msg(self.msg):
self.terminate()
def postpone_msg(self):
self.save_msg()
self.terminate()
d = InfoBox(self.top, "Message postponed",
"Message has been postponed.")
d.show()
def abort_msg(self):
d = YesNoDialog(self.top, "Abort message?")
if d.show():
self.msg.delete_self()
self.save_msg()
self.terminate()
def deleteWindow(self):
self.abort_msg()
def show(self):
Shells.NonModal.show(self)
self.textwin.focus_set()
|