# File: maileditor.rb # Author: Craig Smith # This source code copyright (C) 2009 Craig Smith # All rights reserved. # # Released under the terms of the GNU Public License # See COPYING file for additional information. # require 'utility/log' require 'olc/editor' require 'core/world' # Mail Editor Wrapper for olc/editor class MailEditor < Editor logger 'DEBUG' attr_accessor :ch, :classname, :method, :editstr, :title, :menu, :menu_stack # Initializes an OLC Object def initialize(id, classname, method) self.title = "Mail Editor" if not title self.ch = get_object(id) self.classname = classname self.method = method if not classname.respond_to?(method) or not classname.respond_to?("#{method}=") ch.sendto("ERROR: Invalid method (#{method}) for class #{classname}") exit_olc(true) end self.editstr = classname.send(method) if not editstr self.editstr = String.new elsif not editstr.is_a? String ch.sendto("Method #{method} is not a String.") exit_olc(true) end self.menu = olc_basemenu(title,self,nil) self.menu_stack = [] ch.mode = :olc ch.sendroom("#{ch.name} starts composing a mail message...") show_menu end # Creates a basic menu with just a Quit button # [+title+] title of the menu # [+calling+] Calling object (one who controls this menu) # [+init+] Init function that sets up this menu # [+reset+] Optional reset # [+return+] basic menu object def olc_basemenu(title,calling,init,reset=nil) if reset == "reset" m = menu else m = OlcMenu.new(title,calling,init) end m.add_std_option(nil, "Subject", classname.subject, self, :set_subj) m.add_editor_option("E","Edit", editstr, self, :edit_str) m.add_text_option("X","Abort", self, :abort_menu) m.add_text_option("Q","Quit", self, :quit_menu) m end # Exits the OLC session and sends the mail if not aborted def exit_olc(cancel=false) ch.mode = :playing ch.olc = nil self.menu = nil if not cancel and editstr.size > 0 # Strip off ALL \r\n at the end of sentences self.editstr.gsub!(/([\r\n]+)$/,"") classname.send("#{method}=", editstr) recipient = get_object(classname.to) recipient.mailbox << classname.id if get_object(0).connected_characters.include? classname.to get_object(classname.to).sendto("You have new mail.") end ch.sendto("Message Sent.") else classname.reset classname.unused = true end ch.sendroom("#{ch.name} has finished writing.") end def set_subj(str) classname.subject = str if str.size > 0 show_menu classname.subject end end