summaryrefslogtreecommitdiff
path: root/slime-0.11/ui_compose.py
diff options
context:
space:
mode:
Diffstat (limited to 'slime-0.11/ui_compose.py')
-rw-r--r--slime-0.11/ui_compose.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/slime-0.11/ui_compose.py b/slime-0.11/ui_compose.py
new file mode 100644
index 0000000..1fd970b
--- /dev/null
+++ b/slime-0.11/ui_compose.py
@@ -0,0 +1,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()