Newer
Older
Import / projects / LGN-IP3870 / t / orig / message.py
from basemodel import ListStage, NotifyStage, EntryStage, YesNoStage, TerminalNumberStage
from smsstage import SMSStage,MessageNotify
from mmscomposestage import MMSComposeStage
import runtime, uiconfig, config
from setting import setting
from smsmanager import smsmgr
from mmstemplate import TemplateStage
from profile import profile
import status
# RHC / [20061123_5]
from mmsutils import MessageHotkeyStage
# RHC / [20061123_5]--


class MessageNotifyStage(NotifyStage):
	def __init__(self, message, icon=None):
		if not icon:
			icon = uiconfig.baloon_message_icon
		NotifyStage.__init__(self, message, icon, cb=self.timeout)

	def timeout(self):
		runtime.manager.back_stage()
		return False

class DeleteYesNo(YesNoStage):
	def __init__(self, type):
		self.type = type

		if type == 'sms':
			msg = _('Delete all SMS?')
		elif type == 'mms':
			msg = _('Delete all MMS?')
		elif type == 'ipemail':
			msg = _('Delete all EMail?')
		elif type == 'all':
			msg = _('Delete all Messages?')
		else:
			#print 'Unknown type [%s]' % type
			#assert False
			pass

		YesNoStage.__init__(self, msg, self.yes_cb, self.no_cb, '', uiconfig.baloon_message_delete_icon)

	def yes_cb(self):
		import utils
		utils.remove_messages(self.type, False)
		runtime.manager.change_stage(DeletedNotify(self.type))

	def no_cb(self):
		runtime.manager.back_stage()

from vmHandler import MessageNotifyStage
class DeletedNotify(MessageNotifyStage):
	def __init__(self, type):
		self.type = type
		if type == 'sms':
			msg = _('All SMS deleted!')
		elif type == 'mms':
			msg = _('All MMS deleted!')
		elif type == 'ipemail':
			msg = _('All email deleted!')
		elif type == 'all':
			msg = _('All messages deleted!')
		else:
			#print 'Unknown type [%s]' % type
			#assert False
			pass

		NotifyStage.__init__(self, msg, uiconfig.baloon_message_delete_icon)

	def timeout(self):
		if self.type == 'all':
			runtime.manager.queue_backward(2)
		else:
			runtime.manager.back_stage()
		return False

class MessageDeleteStage(ListStage):
	def __init__(self):
		self.title = _('DELETE')

		_unselbarpos=[]
		if profile.get_profile()  == 0:#pstn이면
			_choice = (_('SMS'),_('MMS'),_('All messages'))
		else:
			_choice = (_('SMS'),_('All messages'))
		ListStage.__init__(self, choice=_choice,title=None,icon=uiconfig.message_delete_icon,titleimage=None,left=_('OK'),right=_('BACK'),isactivate2=False, unselbarpos=_unselbarpos)

	def activate(self, index):
		from ipemailmanager import ipemailmgr
		if profile.get_profile()  == 0:#pstn이면
			type = ('sms', 'mms', 'all')[index]
		else:
			type = ('sms', 'all')[index]
		if type == 'sms':
			if smsmgr.count_allsms() <= 0:
				runtime.manager.stack_stage(MessageNotifyStage(_('No SMS')))
				return
		elif type == 'mms':
			from mmsmanager import mmsmgr
			if mmsmgr.count_total() <= 0:
				runtime.manager.stack_stage(MessageNotifyStage(_('No MMS')))
				return
		elif type == 'ipemail':

			if ipemailmgr.count_allipemail() <= 0:
				runtime.manager.stack_stage(MessageNotifyStage(_('No email')))
				return
		elif type == 'all':
			from mmsmanager import mmsmgr
			if profile.get_profile() == 0:#pstn이면
				if (smsmgr.count_allsms() + mmsmgr.count_total()) <= 0:
					runtime.manager.stack_stage(MessageNotifyStage(_('No messages')))
					return
			else:
				if ipemailmgr.count_allipemail() <= 0:
					runtime.manager.stack_stage(MessageNotifyStage(_('No messages')))
					return
		else:
			return
		runtime.manager.stack_stage(DeleteYesNo(type))

class IpEmailNotifyStage(NotifyStage):
	def __init__(self, message, deststage=None):
		self.deststage = deststage
		icon = uiconfig.baloon_email_icon
		NotifyStage.__init__(self, message, icon, self.quitcb)

	def quitcb(self):
		if self.deststage:
			runtime.manager.back_stage(self.deststage)
		else:
			runtime.manager.back_stage()
		return False

class IpEmailUserAccountEdit(EntryStage):
	name = 'ipemailuseraccountedit'
	title = ''

	def __init__(self, mode=None, accountidx=None):
		self.mode = mode
		self.accountidx = accountidx

		EntryStage.__init__(self, _('User/Account'), self.title, _('OK'), _('BACK'))
		self.ui.set_max(40)
		self.ui.set_automata('multitap', 'lower')

		if 'modify' == self.mode:
			itemvalue = setting.get_selectedaccount(self.accountidx)[5]
			self.ui.set_text(itemvalue)
		elif 'add' == self.mode:
			self.ui.set_text('$telefonica.net')
			self.ui.entry.cursor_start()

	def show(self):
		EntryStage.show(self)
		self.update_F1key()

	def activate_menu1(self):
		if self.mode == 'add':
			runtime.manager.stack_stage(IpEmailPassEdit('add'))
		elif self.mode == 'modify':
			runtime.manager.stack_stage(IpEmailPassEdit('modify', self.accountidx))

	def set_text(self, text):
		self.ui.set_text(text)
		self.update_F1key()

	def update_F1key(self):
		if self.ui.is_t9_add_word_mode():
			self.ui.set_left(_('OK'))
			return

		if self.ui.get_text():
			self.ui.set_left(_('OK'))
		else:
			self.ui.set_left('')

	def handle_key(self, key):
		if key == config.Menu1 and self.ui.left != _('OK'):
			return True
		else:
			ret = EntryStage.handle_key(self, key)
			if ret and self.is_active():
				self.update_F1key()
			return ret

class IpEmailSMTPUserEdit(IpEmailUserAccountEdit):
	name = 'ipemailsmtpuseredit'
	def __init__(self, mode=None, accountidx=None):
		self.mode = mode
		self.accountidx = accountidx

		EntryStage.__init__(self, _('SMTP/Account'), self.title, _('OK'), _('BACK'))
		self.ui.set_max(40)
		self.ui.set_automata('multitap', 'lower')

		if 'modify' == self.mode:
			itemvalue = setting.get_selectedaccount(self.accountidx)[11]
			self.ui.set_text(itemvalue)
		elif 'add' == self.mode:
			self.ui.set_text('$telefonica.net')
			self.ui.entry.cursor_start()

	def activate_menu1(self):
		if self.mode == 'add':
			runtime.manager.stack_stage(IpEmailSMTPPassEdit('add'))
		elif self.mode == 'modify':
			runtime.manager.stack_stage(IpEmailSMTPPassEdit('modify', self.accountidx))

class IpEmailInputPassEdit(EntryStage):
	name = 'ipemailinputpassedit'

	# RHC / [20061123_5]
	def __init__(self, hotkey=False):
		self.hotkey = hotkey
	# RHC / [20061123_5]--
		account = setting.email_account[setting.find_defaultaccountidx()][1]
		self.title = account+'['+setting.email_userid+']'
		EntryStage.__init__(self, _('Input password'), self.title)
		self.ui.set_max(40)
		self.ui.set_automata('123', False)
		# RHC / [20061123_2]
		self.ui.set_left('')	
		# RHC / [20061123_2]--

	# RHC / [20061123_3]
	def show(self):
		status.password_style = True
		EntryStage.show(self)

	def destroy(self):
		status.password_style = False
		EntryStage.destroy(self)
	# RHC / [20061123_3]--

	# RHC / [20061123_2]
	def update_F1key(self):
		if self.ui.is_t9_add_word_mode():
			self.ui.set_left(_('OK'))
			return

		if self.ui.get_text():
			self.ui.set_left(_('OK'))
		else:
			self.ui.set_left('')

	def handle_key(self, key):
		if key == config.Menu1 and self.ui.left != _('OK'):
			return True
		else:
			ret = EntryStage.handle_key(self, key)
			if ret and self.is_active():
				self.update_F1key()
			return ret
			
	def activate_menu1(self):
		# RHC / [20061123_3]
		status.password_style = False
		# RHC / [20061123_3]--
		setting.email_password = self.ui.get_text()
		runtime.manager.back_stage()

		# RHC / [20061123_5]
		if self.hotkey:
				from ipemailmanager import ipemailmgr
				_count = 0
				_count += ipemailmgr.countInboxCount()
				if _count <= 0:
					runtime.manager.stack_stage(NotifyStage(_('Message empty'), uiconfig.baloon_message_icon))
				else:
					runtime.manager.stack_stage(MessageHotkeyStage(True))
		else:
			from ipemailstage import IpEmailStage
			runtime.manager.stack_stage(IpEmailStage)
		# RHC / [20061123_5]--
	# RHC / [20061123_2]--

class IpEmailPassEdit(EntryStage):#messages->settings->email account-> ... ->password 설정.
	name = 'ipemailpassedit'
	title = ''

	def __init__(self, mode=None, accountidx=None):
		self.accountidx = accountidx
		self.mode = mode

		EntryStage.__init__(self, _('Input password'), self.title, _('OK'), _('BACK'))
		self.ui.set_max(40)
		self.ui.set_automata('123', False)

	def show(self):
		status.password_style = True
		EntryStage.show(self)

	def destroy(self):
		status.password_style = False
		EntryStage.destroy(self)

	def activate_menu1(self):
		status.password_style = False
		if 'add' == self.mode:
			stage = IpEmailAccountEditStage(_('SMTP server'), _('SMTP SERVER'))
			runtime.manager.stack_stage(stage)
		elif 'modify' == self.mode:
			stage = runtime.manager.find_stage('ipemailuseraccountedit')
			if stage:
				useraccount = stage.ui.get_text()

			setting.set_newaccountitem(self.accountidx, 5, useraccount)
			setting.set_newaccountitem(self.accountidx, 6, self.ui.get_text())
			runtime.manager.back_stage('ipemailaccountmodifystage')

	def handle_key(self, key):
		if key == '#':
			if self.ui.is_t9_add_word_mode():
				return True
			# KA: [20070831]hangul lvp-2000
			# vpark 2007.08.28 automata	
			self.automata_idx = (self.automata_idx + 1) % len(config.automata_list)		
			self.ui.automata = config.automata_list[self.automata_idx]			
			self.ui.set_fixed_automata(*self.ui.automata)
			# KA: [20070831]hangul lvp-2000 ==
			return True
		else:
			return EntryStage.handle_key(self, key)

class IpEmailSMTPPassEdit(IpEmailPassEdit):
	name = 'ipemailsmtppassedit'
	def __init__(self, mode=None, accountidx=None):
		self.accountidx = accountidx
		self.mode = mode
		EntryStage.__init__(self, _('SMTP/Password'), self.title, _('OK'), _('BACK'))
		self.ui.set_max(40)
		self.ui.set_automata('123', False)

	def activate_menu1(self):
		status.password_style = False
		if 'add' == self.mode:
			runtime.manager.stack_stage(IpEmailAccountEditStage(_('Username'), _('USER NAME')))
		elif 'modify' == self.mode:
			setting.set_newaccountitem(self.accountidx, 10, 'Yes', False)
			stage = runtime.manager.find_stage('ipemailsmtpserverstage')
			if stage:
				smtpserver = stage.ui.get_text()
				setting.set_newaccountitem(self.accountidx, 7, smtpserver, False)

			stage = runtime.manager.find_stage('ipemailsmtpuseredit')
			if stage:
				smtpid = stage.ui.get_text()
				setting.set_newaccountitem(self.accountidx, 11, smtpid, False)

			smtppass = self.ui.get_text()
			setting.set_newaccountitem(self.accountidx, 12, smtppass)
			runtime.manager.back_stage('ipemailaccountmodifystage')

class IpEmailSelectReceivingProtocol(ListStage):
	name = 'ipemailselectreceivingprotocol'

	def __init__(self, accountidx=None):
		self.title = _('RECEIVING PROTOCOL')
		self.choice = (_('POP'), _('IMAP'))

		self.accountidx = accountidx
		self.selectprotocol = ''
		self.icon = uiconfig.message_setting_icon
		ListStage.__init__(self)

		if None != self.accountidx:
			protocol = setting.get_selectedaccount(self.accountidx)[2]
			if 'POP' == protocol:
				self.ui.set_focus(0)
			elif 'IMAP' == protocol:
				self.ui.set_focus(1)

	def activate(self, index):
		if None != self.accountidx:
			if _('POP') == self.choice[index]:
				setting.set_newaccountitem(self.accountidx, 2 , 'POP')
			elif _('IMAP') == self.choice[index]:
				setting.set_newaccountitem(self.accountidx, 2 , 'IMAP')
			msg = self.choice[index] + ' ' + _('is selected') + '\n' + \
				_('as receiving protocol')
			runtime.manager.stack_stage(IpEmailNotifyStage(msg, 'ipemailaccountmodifystage'))
		else:
			if _('POP') == self.choice[index]:
				self.selectprotocol = 'POP'
				runtime.manager.stack_stage(IpEmailAccountEditStage(_('POP server'), _('POP SERVER')))
			elif _('IMAP') == self.choice[index]:
				self.selectprotocol = 'IMAP'
				runtime.manager.stack_stage(IpEmailAccountEditStage(_('IMAP server'), _('IMAP SERVER')))


class IpEmailSMTPYesNo(YesNoStage):
	def __init__(self, edit=False, accountidx=0):
		self.edit = edit
		self.accountidx = accountidx
		YesNoStage.__init__(self, _('SMTP authentication required?'), self.Yes_CB, self.No_CB, \
			'',	uiconfig.baloon_email_icon)

	def Yes_CB(self):
		if self.edit:
			runtime.manager.change_stage(IpEmailSMTPUserEdit('modify', self.accountidx))
		else:
			runtime.manager.change_stage(IpEmailSMTPUserEdit('add', None))

	def No_CB(self):
		if self.edit:
			stage = runtime.manager.find_stage('ipemailsmtpserverstage')
			if stage:
				setting.set_newaccountitem(self.accountidx, 7, \
					stage.ui.get_text(), False)

			setting.set_newaccountitem(self.accountidx, 10, 'No')
			runtime.manager.back_stage('ipemailaccountmodifystage')
		else:
			runtime.manager.change_stage(IpEmailAccountEditStage(_('Username'), _('USER NAME')))


class IpEmailAccountEditStage(EntryStage):

	def __init__(self, sub_label, title, edit=False, accountidx=0):
		self.title = title
		self.edit = edit
		self.accountidx = accountidx
		self.edititem = None

		#'0:default','1:email-account','2:receiving-protocol','3:pop-server','4:imap-server',
		#'5:user-account','6:user-password','7:smtp-server','8:user-name','9:email-address'
		#'10:smtp-auth', '11:smtp-id', '12:smtp-password'
		if _('ACCOUNT NAME') == self.title:
			self.name = 'ipemailaccountnamestage'
			self.edititem = 1
		elif _('POP SERVER') == self.title:
			self.name = 'ipemailpopserverstage'
			self.edititem = 3
		elif _('SMTP SERVER') == self.title:
			self.name = 'ipemailsmtpserverstage'
			self.edititem = 7
		elif _('USER NAME') == self.title:
			self.name = 'ipemailusernamestage'
			self.edititem = 8
		elif _('EMAIL ADDRESS') == self.title:
			self.name = 'ipemailemailaddressstage'
			self.edititem = 9
		elif _('IMAP SERVER') == self.title:
			self.name = 'ipemailimapserverstage'
			self.edititem = 4

		EntryStage.__init__(self, sub_label, self.title, _('OK'), _('BACK'))
		if _('EMAIL ADDRESS') == self.title:
			self.ui.entry.email_mode = True
		self.ui.set_max(40)
		self.ui.set_automata('multitap', 'lower')

		if self.edit and None != self.edititem:
			itemvalue = setting.get_selectedaccount(self.accountidx)[self.edititem]
			self.ui.set_text(itemvalue)
		else:
			if _('ACCOUNT NAME') == self.title:
				#self.ui.set_text('$telefonica.net')
				#self.ui.entry.cursor_start()
				pass
			elif _('POP SERVER') == self.title:
				self.ui.set_text('pop3.telefonica.net')
			elif _('SMTP SERVER') == self.title:
				self.ui.set_text('smtp.telefonica.net')
			elif _('EMAIL ADDRESS') == self.title:
				self.ui.set_text('@telefonica.net')
				self.ui.entry.cursor_start()
			elif _('IMAP SERVER') == self.title:
				self.ui.set_text('imap.telefonica.net')

	def show(self):
		EntryStage.show(self)
		self.update_F1key()

	def activate_menu1(self):
		if _('ACCOUNT NAME') == self.title:
			if self.edit:
				if setting.check_accountname(self.ui.get_text(), True, \
					self.accountidx):
					setting.set_newaccountitem(self.accountidx, self.edititem,
						self.ui.get_text())
					runtime.manager.back_stage()
				else:
					msg = '<'+self.ui.get_text()+'>' + ' ' + _('already exists')
					runtime.manager.stack_stage(MessageNotifyStage(msg, uiconfig.baloon_email_icon))
			else:
				if self.ui.get_text():
					if setting.check_accountname(self.ui.get_text()):
						runtime.manager.stack_stage(IpEmailSelectReceivingProtocol)
					else:
						msg = '<'+self.ui.get_text()+'>' + ' ' + _('already exists')
						runtime.manager.stack_stage(MessageNotifyStage(msg, uiconfig.baloon_email_icon))
				else:
					msg = _('No account name inserted')
					runtime.manager.stack_stage(MessageNotifyStage(msg, uiconfig.baloon_email_icon))
		elif _('POP SERVER') == self.title:
			if self.edit:
				setting.set_newaccountitem(self.accountidx, self.edititem, \
					self.ui.get_text())
				runtime.manager.back_stage()
			else:
				runtime.manager.stack_stage(IpEmailUserAccountEdit('add', None))
		elif _('SMTP SERVER') == self.title:
			runtime.manager.stack_stage(IpEmailSMTPYesNo(self.edit, self.accountidx))
		elif _('USER NAME') == self.title:
			if self.edit:
				setting.set_newaccountitem(self.accountidx, self.edititem, \
					self.ui.get_text())
				runtime.manager.back_stage()
			else:
				runtime.manager.stack_stage(IpEmailAccountEditStage(_('Email address'), \
					_('EMAIL ADDRESS')))
		elif _('IMAP SERVER') == self.title:
			if self.edit:
				setting.set_newaccountitem(self.accountidx, self.edititem, \
					self.ui.get_text())
				runtime.manager.back_stage()
			else:
				runtime.manager.stack_stage(IpEmailUserAccountEdit('add', None))
		elif _('EMAIL ADDRESS') == self.title:
			if self.is_valid_email():
				if self.edit:
					setting.set_newaccountitem(self.accountidx, self.edititem, \
						self.ui.get_text())
					runtime.manager.back_stage()
				else:
					#전체 입력값을 얻어서 계정을 추가한다.
					self.Get_InputData()
					if runtime.manager.find_stage('ipemailaccountsettingstage'):
						runtime.manager.back_stage('ipemailaccountsettingstage')
					else:
						runtime.manager.back_stage('messagesetting')
						runtime.manager.stack_stage(IpEmailAccountSettingStage)
			else:
				runtime.manager.stack_stage(MessageNotify(_('Not valid email address')))

	def Get_InputData(self):
		emailaddress = ''
		username = ''
		smtpserver = ''
		password = ''
		useraccount = ''
		#Roxia Begin cmlim 06.06.12
		#popserver = ''
		#imapserver = ''
		popserver = 'pop3.telefonica.net'
		imapserver = 'imap.telefonica.net'
		#Roxia End cmlim
		receivingprotocol = ''
		accoountname = ''
		smtpauth = 'No'
		smtpid = ''
		smtppass = ''

		emailaddress = self.ui.get_text()

		stage = runtime.manager.find_stage('ipemailusernamestage')
		if stage:
			username = stage.ui.get_text()

		stage = runtime.manager.find_stage('ipemailsmtpserverstage')
		if stage:
			smtpserver = stage.ui.get_text()

		stage = runtime.manager.find_stage('ipemailpassedit')
		if stage:
			password = stage.ui.get_text()

		stage = runtime.manager.find_stage('ipemailuseraccountedit')
		if stage:
			useraccount = stage.ui.get_text()

		stage = runtime.manager.find_stage('ipemailpopserverstage')
		if stage:
			popserver = stage.ui.get_text()

		stage = runtime.manager.find_stage('ipemailimapserverstage')
		if stage:
			imapserver = stage.ui.get_text()

		stage = runtime.manager.find_stage('ipemailselectreceivingprotocol')
		if stage:
			receivingprotocol = stage.selectprotocol

		stage = runtime.manager.find_stage('ipemailaccountnamestage')
		if stage:
			accoountname = stage.ui.get_text()

		stage = runtime.manager.find_stage('ipemailsmtpuseredit')
		if stage:
			smtpauth = 'Yes'
			smtpid = stage.ui.get_text()
			stage = runtime.manager.find_stage('ipemailsmtppassedit')
			if stage:
				smtppass = stage.ui.get_text()

		#'0:default','1:email-account','2:receiving-protocol','3:pop-server','4:imap-server',
		#'5:user-account','6:user-password','7:smtp-server','8:user-name','9:email-address'
		#'10:smtp-auth', '11:smtp-id', '12:smtp-password'

		newaccount = ['', accoountname, receivingprotocol, popserver, imapserver, \
			useraccount, password, smtpserver, username, emailaddress, \
			smtpauth, smtpid, smtppass]
		setting.add_emailaccount(newaccount)

	def set_text(self, text):
		self.ui.set_text(text)
		self.update_F1key()

	def update_F1key(self):
		if self.ui.is_t9_add_word_mode():
			self.ui.set_left(_('OK'))
			return

		if self.ui.get_text():
			self.ui.set_left(_('OK'))
		else:
			self.ui.set_left('')

	def handle_key(self, key):
		if key == config.Menu1 and self.ui.left != _('OK'):
			return True
		else:
			ret = EntryStage.handle_key(self, key)
			if ret and self.is_active():
				self.update_F1key()
			return ret

class IpEmailAccountUIModifyStage(ListStage):
	name = 'ipemailaccountUImodifystage'
	icon = uiconfig.message_setting_icon

	def __init__(self, accountidx):
		self.title = _('USER INFORMATION')
		self.choice = (_('User name'), _('Email address'))

		self.accountidx = accountidx
		ListStage.__init__(self)

	def activate(self, index):
		if _('User name') == self.choice[index]:
			stage = IpEmailAccountEditStage(_('User name'), _('USER NAME'),\
				True, self.accountidx)
			runtime.manager.stack_stage(stage)
		elif  _('Email address') == self.choice[index]:
			stage = IpEmailAccountEditStage(_('Email address'),\
				_('EMAIL ADDRESS'),	True, self.accountidx)
			runtime.manager.stack_stage(stage)


class IpEmailAccountModifyStage(ListStage):
	name = 'ipemailaccountmodifystage'
	icon = uiconfig.message_setting_icon

	def __init__(self, selectedindex):
		self.title = _('EMAIL SERVER')
		self.selectedindex = selectedindex
		ListStage.__init__(self)

	def show(self):
		self.update_addlist()
		ListStage.show(self)

	def update_addlist(self):
		choice = []
		protocol = setting.get_selectedaccount(self.selectedindex)[2]
		if 'POP' == protocol:
			choice += [_('SMTP server'), _('Receiving protocol'), \
				_('POP server'), _('User/Account'), _('User information')]
		elif 'IMAP' == protocol:
			choice += [_('SMTP server'), _('Receiving protocol'), \
				_('IMAP server'), _('User/Account'), _('User information')]

		self.change_choice(choice)

	def activate(self, index):
		if _('SMTP server') == self.choice[index]:
			stage = IpEmailAccountEditStage(_('SMTP server'), \
				_('SMTP SERVER'), True, self.selectedindex)
			runtime.manager.stack_stage(stage)
		elif _('Receiving protocol') == self.choice[index]:
			stage = IpEmailSelectReceivingProtocol(self.selectedindex)
			runtime.manager.stack_stage(stage)
		elif _('POP server') == self.choice[index]:
			stage = IpEmailAccountEditStage(_('POP server'), \
				_('POP SERVER'), True, self.selectedindex)
			runtime.manager.stack_stage(stage)
		elif _('IMAP server') == self.choice[index]:
			stage = IpEmailAccountEditStage(_('IMAP server'), \
				_('IMAP SERVER'), True, self.selectedindex)
			runtime.manager.stack_stage(stage)
		elif _('User/Account') == self.choice[index]:
			stage = IpEmailUserAccountEdit('modify', \
				self.selectedindex)
			runtime.manager.stack_stage(stage)
		elif _('User information') == self.choice[index]:
			stage = IpEmailAccountUIModifyStage(self.selectedindex)
			runtime.manager.stack_stage(stage)
		elif _('Account name') == self.choice[index]:
			stage = IpEmailAccountEditStage(_('Account name'),
				_('ACCOUNT NAME'), True, self.selectedindex)
			runtime.manager.stack_stage(stage)
		else:
			pass

class JobAndNotify(NotifyStage):
	def __init__(self, message, cb = None, d=3000, icon=None):
		if not icon:
			icon = uiconfig.baloon_message_icon
		NotifyStage.__init__(self, message, icon, cb = cb, duration = d)
		import utils
		self.job = utils.Idle(self.job_cb)

	def destroy(self):
		self.job = None
		NotifyStage.destroy(self)

	def job_cb(self):
		self.do_job()
		return False

	def do_job(self):
		pass

class IpEmailAccountDeleteYesNo(YesNoStage):
	def __init__(self, mode, idx=None):
		self.mode = mode
		self.idx = idx
		msg = ''
		if 'delete' == self.mode:
			msg = _('Delete account?')
		elif 'delete all' == self.mode:
			msg = _('Delete all accounts?')
		YesNoStage.__init__(self, msg, self.yes_cb, self.no_cb, '', uiconfig.baloon_message_delete_icon)

	def yes_cb(self):
		runtime.manager.change_stage(IpEmailAccountDeleteNotify(self.mode, \
		self.idx))

	def no_cb(self):
		runtime.manager.back_stage()

class IpEmailAccountDeleteNotify(JobAndNotify):
	def __init__(self, mode, idx=None):
		self.mode = mode
		self.selectedindex = idx
		msg = ''
		if 'delete' == self.mode:
			account = setting.get_selectedaccount(self.selectedindex)[1]
			msg = _('Email account deleted')
		elif 'delete all' == self.mode:
			msg = _('All of email account is deleted')

		#print msg
		JobAndNotify.__init__(self, msg, cb=self.timeout, d=3000, icon=uiconfig.baloon_message_delete_icon)

	def do_job(self):
		if 'delete' == self.mode:
			setting.delete_emailaccount(self.selectedindex)
		elif 'delete all' == self.mode:
			setting.delete_allemailaccount()

	def timeout(self):
		if setting.email_account:
			runtime.manager.back_stage('ipemailaccountsettingstage')
		else:
			runtime.manager.back_stage('messagesetting')
		return False

class IpEmailAccountOptinsStage(ListStage):
	name = 'ipemailaccountoptinsstage'
	icon = uiconfig.message_setting_icon

	def __init__(self, selectedindex):
		self.title = _('OPTIONS')

		from setting import MAX_EMAIL_ACCOUNT
		if len(setting.email_account) < MAX_EMAIL_ACCOUNT:
			self.choice = (_('Add new'), _('Modify'), _('Delete'), _('Delete all'), _('Set as default'))
		else:
			self.choice = (_('Modify'), _('Delete'), _('Delete all'), _('Set as default'))
		self.selectedindex = selectedindex
		ListStage.__init__(self)

	def activate(self, index):
		if _('Add new') == self.choice[index]:
			stage = IpEmailAccountEditStage(_('Account name'), _('ACCOUNT NAME'))
			runtime.manager.stack_stage(stage)
		elif _('Modify') == self.choice[index]:
			stage = IpEmailAccountModifyStage(self.selectedindex)
			runtime.manager.stack_stage(stage)
		elif _('Delete') == self.choice[index]:
			runtime.manager.stack_stage(IpEmailAccountDeleteYesNo('delete', self.selectedindex))
		elif _('Delete all') == self.choice[index]:
			runtime.manager.stack_stage(IpEmailAccountDeleteYesNo('delete all'))
		elif _('Set as default') == self.choice[index]:
			setting.set_defaultaccount(self.selectedindex)
			msg = _('Set as default.')
			runtime.manager.stack_stage(IpEmailNotifyStage(msg, 'ipemailaccountsettingstage'))
		else:
			pass


class IpEmailAccountSettingStage(ListStage):
	name = 'ipemailaccountsettingstage'

	def __init__(self):
		choice = []
		icon = uiconfig.message_setting_icon
		ListStage.__init__(self, choice, _('EMAIL ACCOUNT'), icon, None, \
			_('OPTIONS'))

	def show(self):
		self.update_addlist()
		ListStage.show(self)

	def update_addlist(self):
		choice = []
		choice = setting.get_emailaccountnamelist()
		self.change_choice(choice)

	def activate(self, index):
		runtime.manager.stack_stage(IpEmailAccountOptinsStage(index))

class UserAccountSelectListStage(ListStage):
	name = 'UserAccountSelectListStage'

	# RHC / [20061123_5]
	def __init__(self, hotkey=False):
		self.title = _('Select default user/account')

		self.hotkey = hotkey
	# RHC / [20061123_5]--
		self.choice = []
		icon = uiconfig.message_setting_icon
		ListStage.__init__(self, self.choice, self.title, icon)

	def show(self):
		self.update_addlist()
		ListStage.show(self)
		self.ui.set_focus(setting.find_defaultaccountidx())

	def update_addlist(self):
		choice = []
		choice = setting.get_emailaccountnamelist()
		self.change_choice(choice)

	def activate(self, index):
		setting.set_defaultaccount(index)

		# RHC / [20061123_5]
		if setting.email_password:
			if self.hotkey:
				from ipemailmanager import ipemailmgr
				# RHC / [20061124_2]
				_count = 0
				# RHC / [20061124_2]--
				_count += ipemailmgr.countInboxCount()
				if _count <= 0:
					runtime.manager.stack_stage(NotifyStage(_('Message empty'), uiconfig.baloon_message_icon))
				else:
					runtime.manager.stack_stage(MessageHotkeyStage(True))
			else:
				from ipemailstage import IpEmailStage
				runtime.manager.stack_stage(IpEmailStage)
		else:
			if self.hotkey:
				runtime.manager.stack_stage(IpEmailInputPassEdit(True))
			else:
				runtime.manager.stack_stage(IpEmailInputPassEdit)			
		# RHC / [20061123_5]--

class SettingStage(ListStage):
	name = 'messagesetting'
	def __init__(self):
		if profile.get_profile()  == 0:
			_choice = (_('MMS retrieval mode'), _('Terminal number'))
			ListStage.__init__(self, _choice, _('SETTINGS'), uiconfig.message_setting_icon)
		else:
			_choice = (_('Email account'),)
			ListStage.__init__(self, _choice, _('SETTINGS'), uiconfig.message_setting_icon, left=_('OK'), right=_('BACK'), isactivate2=False)

	def activate(self, index):
		stage = None
		if profile.get_profile()  == 0:
			stage = (MMSRetrievalStage, TerminalNoStage)[index]
		else:
			if setting.email_account:
				stage = IpEmailAccountSettingStage
			else:
				stage = IpEmailAccountEditStage(_('Account name'), _('ACCOUNT NAME'))
		if stage != None:
			runtime.manager.stack_stage(stage)

class MMSRetrievalStage(ListStage):
	icon = uiconfig.message_setting_icon
	def __init__(self):
		self.title = _('RETRIEVAL MODE')
		self.choice = _('Automatic'), _('Manual')

		ListStage.__init__(self)
		if not setting.mms_retrieval:
			self.ui.set_focus(1)

	def activate(self, index):
		if index == 0:
			setting.mms_retrieval = 1
			runtime.manager.change_stage(MessageNotifyStage(_('Automatic retrieval mode enabled.'), uiconfig.baloon_message_setting_icon))
		else:
			setting.mms_retrieval = 0
			runtime.manager.change_stage(MessageNotifyStage(_('Manual retrieval mode enabled.'), uiconfig.baloon_message_setting_icon))

def TerminalNoStage():
	return TerminalNumberStage(True, True)

def get_stage(index):
	if profile.get_profile()  == 0 and index == 2:
		return TemplateStage()
	elif profile.get_profile()  != 0 and index == 1:#3:
		return TemplateStage()
	else:
		if profile.get_profile()  == 0:#pstn이면
			_stages = SMSStage, MMSComposeStage,  None, MessageDeleteStage, SettingStage
		else:
			#_stages = SMSStage, None, MessageDeleteStage, SettingStage
			_stages = SMSStage, None
		return _stages[index]