diff options
Diffstat (limited to 'slime-0.11/ui_compose.py')
-rw-r--r-- | slime-0.11/ui_compose.py | 96 |
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() |