znmud-0.0.1/benchmark/
znmud-0.0.1/cmd/
znmud-0.0.1/cmd/emotes/
znmud-0.0.1/cmd/objects/
znmud-0.0.1/cmd/tiny/
znmud-0.0.1/doc/
znmud-0.0.1/farts/
znmud-0.0.1/lib/
znmud-0.0.1/lib/combat/
znmud-0.0.1/lib/core/bodytypes/
znmud-0.0.1/lib/engine/
znmud-0.0.1/lib/farts/
znmud-0.0.1/logs/
# File: olcmenuoption.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'

# Options for the OlcMenu
class OlcMenuOption
   logger "DEBUG"
   attr_accessor :pick, :name, :target, :obj, :func, :regex, :match_case, :toggle, :get_string, :multi_line, :numbered_array, :numbered_hash, :named, :active_hash
   def initialize
	self.pick = nil
	self.name = "Undefined Option:"
	self.target = nil
	self.toggle = false
	self.obj = nil
	self.func = nil
	self.regex = nil
	self.named = false
	self.match_case = false
	self.get_string = false
	self.multi_line = false
	self.numbered_array = false
	self.numbered_hash = false
	self.active_hash = {}
   end

   # Determines if m matches pick
   # [+m+] message from user input
   def is_match?(m)
	return false if m.size < 1
	match = false
	if numbered_array or numbered_hash
		if m.to_i > 0
			idx = m.to_i
			if idx < 0 or idx > target.size
				return false
			else
				return true
			end
		end
		return false
	end
	return false if not pick
	pick.gsub!(/[# ]/,'')
	if regex
		if match_case
			match = true if m=~/#{regex}/
		else
			match = true if m=~/#{regex}/i
		end
	else
		if match_case
			match = true if m == pick
		else
			match = true if m=~/^#{pick}/i
		end
	end
	match
   end

   # Print menu option
   # [+opt1+] Optional Argument
   # [+opt2+] Optional Argument
   def to_s(opt1=nil,opt2=nil)
	msg = ""
	if numbered_array
		cnt = 1
		# When a toggled numbered_array opt1=defaults opt2=current
		if toggle and opt1 and opt2
			self.target = opt1.concat(opt2)
			self.target.uniq!
		end
		target.each do |item|
			mark = ""
			oname = ""
			if toggle
				mark="*" if opt2.include? item
			end
			if named
				oid = item.to_i
				if oid > 0
					oname = "  (#{get_object(oid).shortname})"
				end	
			end
			msg << "[color Yellow]#{cnt}[/color]) [color Green]#{mark}#{item}[/color] #{oname}\n"
			cnt += 1
		end
		return msg
	elsif numbered_hash
		cnt = 1
		target.each do |key|
			msg << "[color Yellow]#{cnt}[/color]) [color Green]#{key}[/color]"
			msg << " (#{active_hash[key]})" if active_hash.has_key? key
			msg << "\n"
			cnt += 1
		end
		return msg
	end
	if target
		msg = "[color Yellow]#{pick}[/color]) #{name}: [color Green]#{target.inspect}[/color]\n"
	else
		msg = "[color Yellow]#{pick}[/color]) #{name}\n"
	end
	msg
   end

  def get_object(oid)
    Engine.instance.db.get(oid)
  end

end