Newer
Older
Import / projects / LGN-IP3870 / t / orig / alarm.py
# -*- coding: utf-8 -*-

from basemodel import Stage,ListStage, YesNoStage, NotifyStage, RichTextEditStage, ListCalendarStage
import baseui, utils
import runtime, uiconfig, config, status, config
from setting import setting
import time
from sounds import get_audio_gallery_list
from alarmdb import alarmdb


class AlarmListStage(ListCalendarStage):	
	def __init__(self):
		self.alarmdb_indexes, self.choice = self.get_alarmlist()
		ListCalendarStage.__init__(self, choice=self.choice, left=_('EDIT'), right=_('ADD'), title=_('ALARM'), menu3=_('DELETE'), title_image=uiconfig.Third_title_alarm, list_icon=uiconfig.alarm_list_icon)
		dirname, lists = get_audio_gallery_list('ring')	
		self.audio_dir = dirname
		self.lists = lists
		if len(self.alarmdb_indexes) > 0 and status.editing_alarm_index==0:
			ListCalendarStage.set_current_pos(self, 0)

	def get_current_name(self):
		name = self.lists[0][0]
		dot = name.rfind('.')
		if dot >= 0:
			name = name[:dot]
		return name
		
	def activate(self,index):
		return
		
	def show(self):
		if alarm_valid():
			setting.set_agenda_time(5*1000, alarm_activate)
			
		self.alarmdb_indexes, self.choice = self.get_alarmlist()
		if len(self.choice) == 0:	
			'''
			def cb():
				status.alarm_item = alarmdb.new_item()
				status.alarm_item[0] = str(alarmdb.count())
				status.editing_alarm_index = -1			
				status.alarm_item[11] = self.get_current_name()
				item = status.alarm_item
				runtime.manager.stack_stage(DisplayAlarmStage(item,1))
			runtime.manager.change_stage(NotifyStage(_('Alarm empty'),icon = None, cb=cb))
			'''
			def yes():
				status.alarm_item = alarmdb.new_item()
				status.alarm_item[0] = str(alarmdb.count())
				status.editing_alarm_index = -1			
				status.alarm_item[11] = self.get_current_name()
				item = status.alarm_item
				runtime.manager.stack_stage(DisplayAlarmStage(item,1))	
			def no():
				runtime.manager.back_stage('service stage')
				return
			stage = YesNoStage(_('Alarm empty. Add alarm?'), yes, no, '', icon = None)
			runtime.manager.change_stage(stage)	
		else:
			if ListCalendarStage.get_current_pos(self) >= len(self.alarmdb_indexes) or \
			   ListCalendarStage.get_current_pos(self) == -1:
				ListCalendarStage.set_current_pos(self, len(self.alarmdb_indexes)-1)
				status.editing_alarm_index = ListCalendarStage.get_current_pos(self)
			self.change_choice(self.choice)		
			ListCalendarStage.show(self)
			
	def get_alarmlist(self):
		return range(alarmdb.count()), alarmdb.get_names()
		
	def handle_key(self,key):
		ret = ListCalendarStage.handle_key(self,key)	
		if key == config.Menu1 or key == 'OK':	# Edit
			item = alarmdb.get_item(status.editing_alarm_index)
			ListCalendarStage.set_current_pos(self, status.editing_calendar_index)
			runtime.manager.stack_stage(DisplayAlarmStage(item,1))
		elif	key == config.Menu2:				# Add
			if alarmdb.count() >= config.max_alarm_count:
				stage = NotifyStage(_('You can add no more'), uiconfig.baloon_agenda_icon)
				runtime.manager.stack_stage(stage)
				return True
			else:
				status.alarm_item = alarmdb.new_item()
				status.alarm_item[0] = str(alarmdb.count())
				status.alarm_item[11] = self.get_current_name()
				status.editing_alarm_index = -1						
				ListCalendarStage.set_current_pos(self, -1)
				item = status.alarm_item
				runtime.manager.stack_stage(DisplayAlarmStage(item,1))
		elif key == config.Menu3:				# Delete
			self.delete_item()
		elif key == config.Menu4 or key == 'CLR':	# Back
			runtime.manager.back_stage('service stage')
		elif key in ('Up', 'Down'):
			status.editing_alarm_index = self.alarmdb_indexes[self.ui.get_focus()]
			ListCalendarStage.set_current_pos(self, status.editing_alarm_index)
		return ret

	def delete_item(self):
		def yes():		
			if not alarmdb.is_empty():
				# Delete This Item
				setting.agenda_disable()
				alarmdb.remove(status.editing_alarm_index)	
				utils.player.play_effect(config.SETTING_SUCCEEDED)
				stage = NotifyStage(_('Entry deleted'),icon = None)
				runtime.manager.change_stage(stage)			
			else:			
				utils.player.play_effect(config.SETTING_FAILED)
				stage = NotifyStage(_('Calendar empty'),icon = None)
				runtime.manager.change_stage(stage)				
			return		
		def no():
			runtime.manager.back_stage()
			return
		stage = YesNoStage(_('Delete this entry?'), yes, no, '', icon = None)
		runtime.manager.stack_stage(stage)		


deltay_alarm = uiconfig.alarm_font[1]/2+2

class DisplayAlarmStage(Stage):	
	name = 'display alarm stage'
	#titleimage = uiconfig.title_agenda
	def __init__(self,item,action = 0):
		self._ready_to_save = False
		self.ui = baseui.AlarmUI(_('SAVE'),'','',_('BACK'))		
		self.item = item
		self.names = []
		status.alarm_item = item
		self.set_morning = (_('Disable'), _('Once'), _('Everyday'), _('Mon~Fri'), _('Mon~Sat'))
		self.set_interval = (1,2,3,4,5,10)
		self.set_count = (1,2,3,4,5,6,7,8,9,10)
		dirname, lists = get_audio_gallery_list('ring')	
		self.audio_dir = dirname
		self.player_pid = None
		self.lists = lists
		for item in self.lists:
			name = self.get_list_label(item)
			self.names.append(name)

		name,pos = uiconfig.alarm_icon_morningset
		morningset = utils.put_image(name,pos)
		self.ui.add(morningset)
		#morningset_text = runtime.evas.text(text=_('Set'),font=uiconfig.alarm_font,pos=(114,57-deltay_alarm),color=uiconfig.list_text_color)
		morningset_text = runtime.evas.text(text=_('Set'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[0]), color=uiconfig.list_text_color)
		self.ui.add(morningset_text)
		name = uiconfig.alarm_icon_select
		morningset_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[0]))
		self.ui.add(morningset_sel)
		#Thang[20080325 -2] 
		self.idx_morning = self.find_pos(self.item[1], self.set_morning)
		self.idx_interval = self.find_pos(self.item[8], self.set_interval)
		self.idx_count = self.find_pos(self.item[9], self.set_count)
		self.audio_index = self.find_pos(self.item[11], self.names) 

		'''
		self.check = self.item[5]
		if self.item[5] == '1':
			name,pos = uiconfig.alarm_icon_check
			self.check = 1
		else:
			name,pos = uiconfig.alarm_icon_check_box
			self.check = 0
		self.holidayset = utils.put_image(name,pos)
		self.ui.add(self.holidayset)
		
		name = uiconfig.check_focus
		self.check_focus = utils.put_image(name,pos)
		self.ui.add(self.check_focus)
		self.check_focus.hide()
		
		holidayset_text = runtime.evas.text(text=_('Holiday'), font=uiconfig.alarm_font, pos=(287, 80), color=uiconfig.list_text_color)
		self.ui.add(holidayset_text)
		'''
		
		name,pos = uiconfig.alarm_icon_timeset
		timeset = utils.put_image(name,pos)
		self.ui.add(timeset)
		
		timeset_text = runtime.evas.text(text=_('Time'), font=uiconfig.alarm_font, pos=(uiconfig.input5_x2, uiconfig.input5_y2[1]), color=uiconfig.list_text_color)
		self.ui.add(timeset_text)
		
		hour = int(self.item[6])
		min = int(self.item[7])

		self.set_ap = 0 # dummy
		if config.datetime_24hour:
			self.editing_text = [(hour)/10, (hour)%10, min/10, min%10]

		else:
			if hour >= 12:			
				self.set_ap = 1
				name,pos = uiconfig.alarm_icon_pm			
			else:
				self.set_ap = 0
				name,pos = uiconfig.alarm_icon_am
				
			self.timeset_ap = utils.put_image(name,pos)
			self.ui.add(self.timeset_ap)
			
			if hour == 12: # 오후 12시 - 12:00
				self.editing_text = [(hour)/10, (hour)%10, min/10, min%10]
			elif hour == 0: # 오전 12시 - 00:00
				self.editing_text = [1, 2, min/10, min%10]
			else:
				self.editing_text = [(hour%12)/10, (hour%12)%10, min/10, min%10]
		self.timeset_values = runtime.evas.text(text=self.get_text(),font=uiconfig.date_edit_font,pos=(267,uiconfig.input5_y2[1]),color=uiconfig.list_text_color)
		self.ui.add(self.timeset_values)

		name,pos = uiconfig.alarm_icon_interval
		interval = utils.put_image(name,pos)
		self.ui.add(interval)
		interval_text = runtime.evas.text(text=_('Interval'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[2]),color=uiconfig.list_text_color)
		self.ui.add(interval_text)
		name = uiconfig.alarm_icon_select
		interval_sel = utils.put_image(name,(uiconfig.input5_x3,uiconfig.input5_y3[2]))
		self.ui.add(interval_sel)

		name,pos = uiconfig.alarm_icon_count
		count = utils.put_image(name,pos)
		self.ui.add(count)
		count_text = runtime.evas.text(text=_('Count'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[3]),color=uiconfig.list_text_color)
		self.ui.add(count_text)
		name = uiconfig.alarm_icon_select
		count_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[3]))
		self.ui.add(count_sel)
		
		name,pos = uiconfig.alarm_icon_bell
		bell = utils.put_image(name,pos)
		self.ui.add(bell)
		bell_text = runtime.evas.text(text=_('Bell'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[4]),color=uiconfig.list_text_color)
		self.ui.add(bell_text)
		name = uiconfig.alarm_icon_select
		bell_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[4]))
		self.ui.add(bell_sel)
		
		self.index = 0
		name = uiconfig.alarm_icon_select_r
		self.alarm_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[0]))
		self.ui.add(self.alarm_sel)
		self.alarm_sel.hide()
		
		self.cursor_pos = 0
		self.underline = runtime.evas.text(text='_', font=uiconfig.date_edit_font)
		self.underline.color = uiconfig.date_edit_entry_color
		self.ui.add(self.underline)
		
		self.underline.hide()
		self.update_time()
		self.set_focus(self.index)
		self.set_text(item)

		self.play_audio_timer = None

	def align_center(self, l, pos):
		x, y = pos
		width,height = l.size
		l.move(x - width/2, y)
		
	def find_pos(self,values,list):
		i = 0		
		for chk in list:
			if str(chk).lower() == str(values).lower():
				return i
			else:
				i = i + 1
		return 0

	def save_ready(self):
		self._ready_to_save = True
		
	def show(self):
		self.ui.show()
		#self.check_focus.hide()
		self.underline.hide()
		self._ready_to_save = False
		self.save_ready_timer = utils.Timer(500, self.save_ready)
	
	def set_text(self,item):		
		self.date = runtime.evas.text(text=self.item[1],font=uiconfig.alarm_font,pos=(240,45),color=uiconfig.list_text_color)
		self.ui.add(self.date)
		self.align_center(self.date, (302, uiconfig.input5_y4[0]))
		
		interval_text = self.item[8]+' '+_('Minutes')
		self.interval = runtime.evas.text(text=interval_text, font=uiconfig.alarm_font,pos=(240,141), color=uiconfig.list_text_color)
		self.ui.add(self.interval)
		self.align_center(self.interval, (302, uiconfig.input5_y4[2]))
		
		count_text = self.item[9]+' '+_('Times')
		self.count = runtime.evas.text(text=count_text,font=uiconfig.alarm_font,pos=(240,175),color=uiconfig.list_text_color)
		self.ui.add(self.count)
		self.align_center(self.count, (302, uiconfig.input5_y4[3]))

		ring = self.item[11]
		ring = unicode(ring, 'euc-kr').encode('utf-8')		
		self.ringname = runtime.evas.text(text=ring,font=uiconfig.alarm_font,pos=(240, 209),color=uiconfig.list_text_color)
		self.ui.add(self.ringname)
		self.align_center(self.ringname, (302, uiconfig.input5_y4[4]))
		
	def get_list_label(self, item):
		fullname = self.audio_dir + item[0]
		name = item[0]
		last_dot = name.rfind('.')
		if last_dot > 0:
			name = name[:last_dot]		
		return name
		
	def update_underline(self):
		font_width = 9
		font_height = 7
		pos = (267, uiconfig.input5_y2[1])
		xpos = (0, 1, 3, 4)[self.cursor_pos]
		x = pos[0] + xpos * font_width
		self.underline.pos = x, pos[1] + font_height
		
	def update_time(self):
		hour = self.editing_text[0] * 10 + self.editing_text[1]
		min = self.editing_text[2] * 10 + self.editing_text[3]
		self.time = (hour, min)
		self.timeset_values.text = self.get_text()
		
	def get_text(self):
		text = "%01d%01d:%01d%01d" % tuple(self.editing_text)
		return text
		
	def set_focus(self,index):		
		if index == 0:
			self.stop_audio()
			self.alarm_sel.show()
			self.underline.hide()
			#self.check_focus.hide()
			self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[0])	
			self.ui.set_right('')

#		elif index == 1:
#			self.stop_audio()
#			self.alarm_sel.hide()
#			self.underline.hide()
#			self.check_focus.show()
#			self.ui.set_right(_('SELECT'))

		elif index == 1:	
			self.stop_audio()
			self.cursor_pos = 0
			self.alarm_sel.hide()
			#self.check_focus.hide()
			self.underline.show()
			self.update_underline()
			if config.datetime_24hour:
				self.ui.set_right('')
			else:
				if self.set_ap == 1:
					self.ui.set_right(_('AM'))
				else:
					self.ui.set_right(_('PM'))
		elif index == 2:
			self.stop_audio()
			self.alarm_sel.show()
			self.underline.hide()
			#self.check_focus.hide()
			self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[2])
			self.ui.set_right('')
		elif index == 3:
			self.stop_audio()
			self.alarm_sel.show()
			self.underline.hide()
			#self.check_focus.hide()
			self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[3])
			self.ui.set_right('')
		elif index == 4:
			self.alarm_sel.show()
			self.underline.hide()
			#self.check_focus.hide()
			self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[4])
			self.ui.set_right('')
			self.stop_audio()
			self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
			#self.play_audio()	
		else:
			self.underline.hide()
			self.alarm_sel.hide()
			#self.check_focus.hide()
			
	def get_current_file(self):
		if config.mm_debug:
			print '************** get current', self.audio_index
		return self.audio_dir + self.lists[self.audio_index][0]
		
	
##############################################
	def play_audio(self):
		if status.phone_status != status.Disconnected:
			return
		if len(self.lists) == 0:
			return
		audio_file = self.get_current_file()
		#self.player_pid = utils.player.play(audio_file)
		self.player_pid = utils.player.play_alarm(audio_file)

	def stop_audio(self):
		if status.phone_status != status.Disconnected:
			return
		#utils.player.stop(self.player_pid)
		utils.player.stop_alarm()
		
	def get_current_name(self):
		name = self.lists[self.audio_index][0]
		dot = name.rfind('.')
		if dot >= 0:
			name = name[:dot]
		return name
		
	def destroy(self):		
		Stage.destroy(self)		
		self.stop_audio()
		self.play_audio_timer = None
		
	def handle_key(self,key):
		if key == config.Menu4 or key == 'CLR':		# Back
			runtime.manager.back_stage()
			return True
		elif key == config.Menu1 or key =='OK':		# Save
			# 화면이 display 되기 전에 키입력 받으면, 무시 (QE 요청사항 - 28179)
			if not self._ready_to_save:
				return True
			setting.agenda_disable()
			import time,ntptime
			year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]
			index = status.editing_alarm_index			
			status.alarm_item[1] = self.set_morning[self.idx_morning]
			if self.set_morning[self.idx_morning] == _('Once'): #'Once':
				status.alarm_item[2] = str(day)
				status.alarm_item[3] = str(month)
				status.alarm_item[4] = str(year)
			#status.alarm_item[5] = str(self.check)
			status.alarm_item[5] = '0'
			
			if config.datetime_24hour:
				status.alarm_item[6] = str(self.time[0])
				status.alarm_item[7] = str(self.time[1])
			else:
				
				if self.set_ap == 1:
					if self.time[0] == 12:
						status.alarm_item[6] = str(self.time[0])
					else:
						status.alarm_item[6] = str(self.time[0] + 12)
					status.alarm_item[7] = str(self.time[1])
				else:
					if self.time[0] == 12:
						status.alarm_item[6] = '0'
					else:
						status.alarm_item[6] = str(self.time[0])
					status.alarm_item[7] = str(self.time[1])
			status.alarm_item[8] = str(self.set_interval[self.idx_interval])
			status.alarm_item[9] = str(self.set_count[self.idx_count])
			status.alarm_item[10] = self.get_current_file()
			status.alarm_item[11] = self.get_current_name()
			if index != -1:
				alarmdb.remove(index)
			alarmdb.insert_item(status.alarm_item)
			self.item = status.alarm_item
			#status.editing_alarm_index =  -1
			setting._alarm_tag = 0
			
			
			#runtime.manager.back_stage()
			def cb():
				stage = AlarmListStage
				runtime.manager.change_stage(stage)
			stage = NotifyStage(_('Set is saved'), uiconfig.baloon_agenda_icon, cb = cb)
			runtime.manager.change_stage(stage)
			utils.player.play_effect(config.SETTING_SUCCEEDED)
			return True
		elif key == config.Menu2:			# AM/PM
			'''
			if self.index == 1:
				if self.check == 1:
					self.check = 0
					self.holidayset.file = uiconfig.image_dir + uiconfig.alarm_icon_check_box[0]
				else:
					self.check = 1
					self.holidayset.file = uiconfig.image_dir + uiconfig.alarm_icon_check[0]
			'''
			if config.datetime_24hour:
				self.ui.set_right('')
			else:			
				if self.index == 1:
					if self.set_ap == 1:
						self.set_ap = 0
						self.timeset_ap.file = uiconfig.image_dir + uiconfig.alarm_icon_am[0]
						self.ui.set_right(_('PM'))
					else:
						self.set_ap = 1
						self.timeset_ap.file = uiconfig.image_dir + uiconfig.alarm_icon_pm[0]
						self.ui.set_right(_('AM'))
			return True
		elif key in "0123456789" and self.index == 1:
			if config.datetime_24hour:
				if self.cursor_pos == 0:
					#hour 10
					if not key in "012":
						return True
					if key == '2' and self.editing_text[1] > 3:
						self.editing_text[1] = 3
				elif self.cursor_pos == 1:
					#hour 1
					if self.editing_text[0] == 2 and key not in "0123": return True
					hour = self.editing_text[0] * 10 + ord(key) - ord('0')
					if hour > 23:
						return True
				elif self.cursor_pos == 2:
					#min 10
					if not key in "012345":
						return True
				elif self.cursor_pos == 3:
					pass

			else:
				if self.cursor_pos == 0:
					#hour 10
					if not key in "01":
						return True
					if key == '1' and self.editing_text[1] > 2:
						self.editing_text[1] = 2
				elif self.cursor_pos == 1:
					#hour 1
					if self.editing_text[0] == 1 and key not in "012": return True
					hour = self.editing_text[0] * 10 + ord(key) - ord('0')
					if hour > 23:
						return True
				elif self.cursor_pos == 2:
					#min 10
					if not key in "012345":
						return True
				elif self.cursor_pos == 3:
					pass
			
			self.editing_text[self.cursor_pos] = ord(key) - ord('0')
			self.update_time()
			self.cursor_pos += 1
			if self.cursor_pos > 3:
				self.cursor_pos = 0
			self.update_underline()
			return True
		##################################	
		elif key == 'Up':
			self.play_audio_timer = None
			self.index = self.index - 1
			if self.index < 0: self.index = 4
			self.set_focus(self.index)
			return True
		elif key == 'Down':
			self.play_audio_timer = None
			self.index = self.index + 1
			if self.index > 4: self.index = 0
			self.set_focus(self.index)
			return True
		elif key == 'Left':
			self.play_audio_timer = None
			if self.index == 1:
				self.cursor_pos = self.cursor_pos - 1
				if self.cursor_pos < 0: self.cursor_pos = 3
				self.underline.show()
				self.update_underline()
			elif self.index == 0:
				self.idx_morning = self.idx_morning - 1
				if self.idx_morning < 0: self.idx_morning = 4
				self.date.text_set(self.set_morning[self.idx_morning])
				self.align_center(self.date, (302, uiconfig.input5_y4[0]))
			elif self.index == 2:
				self.idx_interval = self.idx_interval - 1
				if self.idx_interval < 0: self.idx_interval = len(self.set_interval) - 1
				interval_text = str(self.set_interval[self.idx_interval])+' '+_('Minutes')
				self.interval.text_set(interval_text)
				self.align_center(self.interval, (302, uiconfig.input5_y4[2]))
			elif self.index == 3:
				self.idx_count = self.idx_count - 1
				if self.idx_count < 0: self.idx_count = len(self.set_count) - 1
				count_text = str(self.set_count[self.idx_count])+' '+_('Times')
				self.count.text_set(count_text)
				self.align_center(self.count, (302, uiconfig.input5_y4[3]))
			elif self.index == 4:
				self.audio_index = self.audio_index - 1
				if self.audio_index < 0:
					self.audio_index = len(self.names) - 1
				
				ring =self.names[self.audio_index]
				ring = unicode(ring, 'euc-kr').encode('utf-8')
				self.ringname.text_set(ring)
				self.align_center(self.ringname, (302, uiconfig.input5_y4[4]))
				self.stop_audio()
				self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
				#self.play_audio()
			return True
		elif key == 'Right':
			self.play_audio_timer = None
			if self.index == 1:
				self.cursor_pos = self.cursor_pos + 1
				if self.cursor_pos > 3: self.cursor_pos = 0
				self.underline.show()
				self.update_underline()
			elif self.index == 0:
				self.idx_morning = self.idx_morning + 1
				if self.idx_morning > 4: self.idx_morning = 0
				self.date.text_set(self.set_morning[self.idx_morning])
				self.align_center(self.date, (302, uiconfig.input5_y4[0]))
			elif self.index == 2:
				self.idx_interval = self.idx_interval + 1
				if self.idx_interval > len(self.set_interval) - 1: self.idx_interval = 0
				interval_text = str(self.set_interval[self.idx_interval]) + ' ' + _('Minutes')
				self.interval.text_set(interval_text)
				self.align_center(self.interval, (302, uiconfig.input5_y4[2]))
			elif self.index == 3:
				self.idx_count = self.idx_count + 1
				if self.idx_count > len(self.set_count) - 1: self.idx_count = 0
				count_text = str(self.set_count[self.idx_count]) + ' ' + _('Times')
				self.count.text_set(count_text)
				self.align_center(self.count, (302, uiconfig.input5_y4[3]))
			elif self.index == 4:
				self.audio_index = self.audio_index + 1
				if self.audio_index > len(self.names) - 1:
					self.audio_index = 0

				ring =self.names[self.audio_index]
				ring = unicode(ring, 'euc-kr').encode('utf-8')
				self.ringname.text_set(ring)
				self.align_center(self.ringname, (302, uiconfig.input5_y4[4]))
				self.stop_audio()
				self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
				#self.play_audio()	
			return True
		return Stage.handle_key(self,key)	
		

################################################
def alarm_rotation():
	if status.alarm_active_item == None:
		return True
	utils.Timer
	#global item 
	#global cnt
	#item = status.alarm_item_bak
	
	item, cnt = status.alarm_active_item
	#cnt = setting._agenda_snooze_cnt
	#print 'ka...### alarm_rotation', status.alarm_active_item

	#check the snoozed alarm is valid or not
	alarm_deleted = True
	if alarmdb.count() > 0:
		#import time,ntptime
		#year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]	
		for a_item in alarmdb.db:
			if item[0] == a_item[0]:
				if a_item[1] == _('Disable'):	
					print "[alarm] snoozed alarm is disabled"
					setting.agenda_disable()
					setting.set_agenda_time(5 * 1000, alarm_activate)	 
					return True
				else:
					alarm_deleted = False
					
		if alarm_deleted:
			print "[alarm] snoozed alarm is deleted"
			setting.agenda_disable()
			setting.set_agenda_time(5 * 1000, alarm_activate)	 
			return True
	else:
		print "[alarm] snoozed alarm is not exist"
		setting.agenda_disable()
		setting.set_agenda_time(5 * 1000, alarm_activate)	 
		return True
	
	if cnt > 0:
		if check_alarm_delay():
			#setting.set_agenda_time(5*1000, alarm_delay)
			#setting.set_agenda_snooze_time()
			return True # RE: snoose

		# VM
		from eaHandler import EaNotifyStage
		if runtime.eaHandler.isAppInUse():
			currentName = runtime.eaHandler.getDestination().getName()
			#print 'currentName = ', currentName
			if currentName == 'MULTIMEDIA':
				runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
				runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
			elif currentName == 'BROWSER':
				runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
				runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
			elif currentName == 'MMSC':
				runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
				runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
			else: # bank
				#print 'ka...############## 2 MMI UP !!!!!!!!!!!!!!'
				return True

		curr_stage_name = runtime.manager.stage.get_name()
		if curr_stage_name == 'Calculator':
			runtime.manager.stage.rollback_handle_key()
		elif curr_stage_name == 'dectPaging':
			runtime.manager.stage.handle_key(config.Menu4)
			
		# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
		setting.stop_slideshow()
				
		stage = AlarmActivateStage(item,cnt)
		# pause ack를 받은 후에 Stage를 전환하도록 한다. 			
		if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
			runtime.eaHandler.rcvPauseAckDoFunction(stage)
			return False
		
		runtime.manager.stack_stage(stage)
	return False

def alarm_delay():
	global item 
	global cnt
	item, cnt = status.alarm_item_bak
	#cnt = setting._agenda_snooze_cnt
	#print 'ka...### alarm_delay', status.alarm_item_bak
	from eaHandler import EaNotifyStage
	if check_alarm_delay():
		#setting.set_agenda_time(5*1000, alarm_delay)
		return True

		# VM
		
	if runtime.eaHandler.isAppInUse():
		currentName = runtime.eaHandler.getDestination().getName()
		#print 'currentName = ', currentName
		if currentName == 'MULTIMEDIA':
			runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
			runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
		elif currentName == 'BROWSER':
			runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
			runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
		elif currentName == 'MMSC':
			runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
			runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
		else: # bank
			#print 'ka...############## 1 MMI UP !!!!!!!!!!!!!!'
			return True
			
	# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
	setting.stop_slideshow()
	stage = AlarmActivateStage(item,cnt)
	# pause ack를 받은 후에 Stage를 전환하도록 한다. 			
	if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
		runtime.eaHandler.rcvPauseAckDoFunction(stage)
		return False 
	runtime.manager.stack_stage(stage)
	return False

def alarm_hold():
	#global item 
	#global cnt
	item, cnt = status.alarm_hold_item
	#cnt = setting._agenda_snooze_cnt
	#print 'ka...### alarm_hold', status.alarm_hold_item

	if check_alarm_delay():
		#setting.set_agenda_time(5*1000, alarm_delay)
		return True

	if runtime.eaHandler.isAppInUse():
		currentName = runtime.eaHandler.getDestination().getName()
		#print 'currentName = ', currentName
		if currentName == 'MULTIMEDIA':
			runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
			runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
		elif currentName == 'BROWSER':
			runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
			runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
		elif currentName == 'MMSC':
			runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
			runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
		else: # bank
			#print 'ka...############## 1 MMI UP !!!!!!!!!!!!!!'
			return True		
	else:
		# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
		setting.stop_slideshow()
		status.alarm_hold_item = None
		stage = AlarmActivateStage(item,cnt)
		# pause ack를 받은 후에 Stage를 전환하도록 한다. 			
		if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
			runtime.eaHandler.rcvPauseAckDoFunction(stage)
			return False
		runtime.manager.stack_stage(stage)
	return False
	

def check_alarm_delay():
	# exception 상황에서  Alarm이 울리면, snooze 됨.
	#if runtime.myannapp and runtime.myannapp.is_running() == True	or\
	#	runtime.browserapp and runtime.browserapp.is_running() == True or\
	#if status.phone_status != status.Disconnected or\
	if runtime.manager.stage.agenda_forbidden or\
		'ipemailsendstage' == runtime.manager.stage.name or \
		'smsreceivingstage' == runtime.manager.stage.name or \
		'incoming_mms' == runtime.manager.stage.name or \
		'mmsdownloadstage' == runtime.manager.stage.name or\
		'enblock edit' == runtime.manager.stage.name or\
		'H2B_Transfer' == runtime.manager.stage.name or\
		'InUseByDect' == runtime.manager.stage.name or\
		'alarmactivatestage' == runtime.manager.stage.name:
		#status.first_video_mode != status.VideoIdle or \
		#status.second_video_mode != status.VideoIdle:
		return True
	from mmiSoundPath import SP_Context
	from dectHandler import DectCallManager			
	baseCallStatus, baseStatus, dectCallStatus, dectStatus = status.getCurrentCallStatus()
	# Base가 in use...	
	if baseStatus != SP_Context.IDLE:
		return True
	
	return False
		
def alarm_valid():
	global check 
	check = False
	if alarmdb.count() > 0:
		import time,ntptime
		year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]		
		for item in alarmdb.db:
			if item[1] in (_('Mon~Fri'), _('Mon~Sat'), _('Everyday')):
				check = True
			elif item[1] == _('Once'):				
				if int(item[4]) > year:					
					check = True
				elif int(item[4]) == year and int(item[3]) > month:					
					check = True
				elif int(item[4]) == year and int(item[3]) == month and int(item[2]) > day:					
					check = True
				elif int(item[4]) == year and int(item[3]) == month and int(item[2]) == day and int(item[6]) > h:					
					check = True
				elif int(item[4]) == year and int(item[3]) == month and int(item[2]) == day and int(item[6]) == h and int(item[7]) > m:					
					check = True
	return check

def warning_activate():
	global chk 
	#setting._warning_tag = None	
	if False and runtime.manager.stage.name != 'idle':
		# idle상태가 아니면 다음으로 미룬다
		setting.set_warning_time(5 * 1000, warning_activate)
		return False
	if status.phone_status != status.Disconnected:
		# Disconnected 상태가 아니면 다음으로 미룬다
		setting.set_warning_time(5 * 1000, warning_activate)
		return False
	# vpark 06.02.10
	if status.first_video_mode != status.VideoIdle or \
		status.second_video_mode != status.VideoIdle:
		setting.set_warning_time(5 * 1000, warning_activate)
		return False
	# vpark 06.02.10
	
	if runtime.manager.stage.agenda_forbidden:
		setting.set_warning_time(5 * 1000, warning_activate)
		return False

	#브라우저 실행중이면 다음으로 미룬다
	if runtime.browserapp and runtime.browserapp.is_running() == True:
		setting.set_warning_time(5 * 1000, warning_activate)
		return False

	if runtime.myannapp and runtime.myannapp.is_running() == True:
		setting.set_warning_time(5 * 1000, warning_activate)
		return False

	if 'ipemailsendstage' == runtime.manager.stage.name or \
	'smsreceivingstage' == runtime.manager.stage.name or \
	'incoming_mms' == runtime.manager.stage.name or \
	'mmsdownloadstage' == runtime.manager.stage.name:
		setting.set_warning_time(5*1000, warning_activate)
		return False
	
	chk = 1
	import time,ntptime
	year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]	
	if  status.warning_item != None:			
		item = status.warning_item	
		chk = 1					
		if  setting._warning_tag == None and item[0] <> _('Disable'):				
			if  eval(item[3]) <> h or eval(item[4]) <> m:
				chk = 0
	else:
		chk = 0			
	if chk == 1:				
		stage = WarningActivateStage(item)
		runtime.manager.stack_stage(stage)				
	setting.set_warning_time(5*1000, warning_activate)
	return False

def alarm_activate():
	#print "[yylee debug] alarm_activate"
	global chk 
	#print 'ka.................Time check'
	# _agenda_tag 살아揚獵?상태 
	if setting._agenda_hold_tag != None or setting._agenda_snooze_tag != None:
		#print 'ka........._agenda_hold_tag=', setting._agenda_hold_tag
		#print 'ka........._agenda_snooze_tag=', setting._agenda_snooze_tag
		#print "[yylee debug] alarm_activate #1"
		return True
	
	chk = 1
	alarmList = []
	import time,ntptime
	year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]
	#print 'ka....Now time=', year,month,day,h,m,ss,w
	#print 'ka....setting.h/m=', setting._agenda_disable_hour, setting._agenda_disable_min
	#print "[yylee debug] alarm_activate :", h, m

	if h == setting._agenda_disable_hour and m == setting._agenda_disable_min:
		#print "[yylee debug] alarm_activate #2"
		pass
	elif  alarmdb.count()>0:			
		for item in alarmdb.db:
			#print 'ka....check item=', item
			chk = 1
			#print 'ka...._alarm_tag=', setting._alarm_tag # 알람 울리는 중
			if  setting._alarm_tag == 0 and item[1] != _('Disable'):				
				if item[1] == _('Once'): 
					if eval(item[2]) != day or eval(item[3]) != month or eval(item[4]) != year or eval(item[6]) != h or eval(item[7]) != m:
						chk = 0
				elif item[1] == _('Mon~Fri'):
					if w in [5,6] or eval(item[6]) != h or eval(item[7]) != m:
						chk = 0
				elif item[1] == _('Mon~Sat'):
					if w == 6 or eval(item[6]) != h or eval(item[7]) != m:
						chk = 0
				elif item[1] == _('Everyday'):
					#print 'ka...............eval(item[6]) /eval(item[7]) =', eval(item[6]) , eval(item[7]) 
					#print 'ka................h/m=', h, m
					if  eval(item[6]) != h or eval(item[7]) != m:
						chk = 0
			else:
				chk = 0

			if chk == 0:
				#print "[yylee debug] alarm_activate #3"
				#print 'ka.....current time or stage  is not valid'
				continue
				
			if chk == 1:
				# exception 상황에서  Alarm이 울리면, snooze 됨.
				if check_alarm_delay(): 
					#print 'ka...#########3 delay'
					#setting._alarm_tag = 1
					#status.alarm_item_bak = item, eval(item[9])
					#setting._agenda_snooze_cnt = eval(item[9])
					#setting.set_agenda_time(5*1000, alarm_delay)
					status.alarm_item_bak = item, eval(item[9])
					setting.set_agenda_snooze_time(5*1000, alarm_delay)
					return False

				# for VM
				from eaHandler import EaNotifyStage
				if runtime.eaHandler.isAppInUse():
					currentName = runtime.eaHandler.getDestination().getName()
					print 'currentName = ', currentName
					if currentName == 'MULTIMEDIA':
						runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
						#runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
						runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')						
					elif currentName == 'BROWSER':
						runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
						runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
					elif currentName == 'MMSC':
						runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
						runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
					else: # bank / MMI화면이 위로 올라온 경우 
						#print 'ka...############## MMI UP !!!!!!!!!!!!!!'
						#setting._alarm_tag = 1
						#status.alarm_item_bak = item
						#setting._agenda_snooze_cnt = eval(item[9])
						#setting.set_agenda_time(5*1000, alarm_delay)
						status.alarm_item_bak = item, eval(item[9])
						setting.set_agenda_snooze_time(5*1000, alarm_delay)
						return False

				curr_stage_name = runtime.manager.stage.get_name()
				if curr_stage_name == 'Calculator':
					runtime.manager.stage.rollback_handle_key()
				elif curr_stage_name == 'dectPaging':
					runtime.manager.stage.handle_key(config.Menu4)
				
				#print 'ka...######### Valid alarm !!!--item=',item
				alarmList.append(item)

		#print "[yylee debug] alarm_activate #4", len(alarmList)
				
		# 같은 시간대에 울려야할 알람이 한개 이상이면 내용 체크 - 동일하면 하나를 삭제
		if len(alarmList) >=1:		
			def check_max_cnt():
				index = 0
				cnt = 1
				for i in range(len(alarmList)):
					if cnt < eval(alarmList[i][9]):	
						cnt = eval(alarmList[i][9])
						index = i				
				for j in range(len(alarmList)):
					if j != index:
						if alarmList[j][1] == _('Once'):	
							delIndex = alarmdb.find_by_item(alarmList[j])
							alarmdb.remove(delIndex)
				return index
			index = check_max_cnt()
			# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
			setting.stop_slideshow()
			stage = AlarmActivateStage(alarmList[index],eval(alarmList[index][9]))
			# pause ack를 받은 후에 Stage를 전환하도록 한다. 			
			if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
				runtime.eaHandler.rcvPauseAckDoFunction(stage)
				return			
			runtime.manager.stack_stage(stage)
			
		'''
		# 현재 울려야 할 알람이 한개 초과이면 one active / the others delay
		for i in range(len(alarmList)):

			print 'ka... check snoose=', status.alarm_active_item
			if status.alarm_active_item: # snoose수행 중인 경우 
				item, cnt = status.alarm_active_item
				if item == alarmList[i]:
					continue
				else:
					print 'ka...############## alarmList NEW !!!!!!!!!!!!!!'
					setting.agenda_disable()
					#status.alarm_hold_item = (alarmList[i], eval(alarmList[i][9]))
					#setting.set_agenda_hold_time(5*1000, alarm_hold)
					stage = AlarmActivateStage(alarmList[i],eval(alarmList[i][9]))
					runtime.manager.stack_stage(stage)	
					return True
			
			if i == 0:
				print 'ka...############## alarmList First !!!!!!!!!!!!!!'
				stage = AlarmActivateStage(alarmList[i],eval(alarmList[i][9]))
				runtime.manager.stack_stage(stage)				
			else:
				#stage = AlarmActivateStage(alarmList[0],eval(alarmList[0][9]))
				print 'ka...############## alarmList Later !!!!!!!!!!!!!!'
				#setting._alarm_tag = 1
				#status.alarm_item_bak = item[i]
				#setting._agenda_snooze_cnt = eval(alarmList[i][9])
				#status.alarm_hold_item = (alarmList[i], eval(alarmList[i][9]))
				#setting.set_agenda_hold_time(5*1000, alarm_hold)
				#setting._alarm_tag = 1					
				#status.alarm_item_bak = self.item
				#setting._agenda_snooze_cnt = self.cnt
				#agenda_time = self.interval * 60 * 1000
				#setting.set_agenda_snooze_time(agenda_time, alarm_rotation)
		#stage = AlarmActivateStage(item,eval(item[9]))
		#runtime.manager.stack_stage(stage)
		'''
	#setting.set_agenda_time(5*1000, alarm_activate)
		return True
	return True

class WarningActivateStage(Stage):
	name = 'warningactivatestage'
	def __init__(self, item):
		self.item = item
		status.supervision_not_allowed = 1
		self.player_pid = None
		message = _('<Attention>')
		self.ui = baseui.AgendaActiveUI(message)
		setting.reset_screen_saver_timer()
		status.screensaver_activated = False

	def handle_key(self, keyname):
		if keyname == config.Menu1:
			stage = AlarmNotifyStage(_('5 minutes\nAlarm post-poned!'))
			runtime.manager.change_stage(stage)
			setting._warning_snooze_cnt = setting._warning_snooze_cnt + 1			
			setting.set_warning_time(5 * 60 * 1000, warning_activate)
			
		elif keyname == config.Menu2:
			setting.warning_disable()
			runtime.manager.back_stage()
			
		else:
			return False
		return True

	def warning_stop(self):
### eicho 06.11.07
		setting.warning_disable()
### end.
		runtime.manager.back_stage()
		return False

	def show(self):
		#self.player_pid = utils.player.play(self.item[5])
		utils.player.play_alarm(self.item[5])
		Stage.show(self)
		self.warning_stop_timer = utils.Timer(5*60*1000, self.warning_stop)

	def destroy(self):
		self.warning_stop_timer = None
		Stage.destroy(self)
		#utils.player.stop(self.player_pid)
		utils.player.stop_alarm()
		status.supervision_not_allowed = 0
		
class AlarmActivateStage(Stage):
	name = 'alarmactivatestage'
	def __init__(self,item,cnt):
		self.item = item
		status.supervision_not_allowed = 1
		self.player_pid = None
		message =self.item[12]
		#default alarm message		
		message = _('Wake up')
		self.ui = baseui.AgendaActiveUI(message)
		setting.reset_screen_saver_timer()
		status.screensaver_activated = False
		setting._alarm_tag = 1
		self.cnt = cnt
		self.cnt = self.cnt - 1		
		if self.cnt == 0:
			self.ui.set_left('')			
		self.interval = eval(self.item[8])

		status.alarm_active_item = self.item, self.cnt

		def alarm_timeout_cb():
			self.handle_key('CLR')
			self._alarm_timeout_tag = None

		self._alarm_timeout_tag = utils.Timer(50*1000, alarm_timeout_cb)

	def handle_key(self, keyname):
		'''
		Menu4와 Red Key 입력 시 알람 종료
		그 외의 다름 모든 key는 snooze 처리
		'''
		'''
		if runtime.eaHandler.isAppInUse():
			runtime.mmiDebug.mmiTrace('=============>>> START end Alarm()')
			if keyname in (config.Menu4, config.Red):
				setting.agenda_disable()
				stage = AlarmNotifyStage(_('Alarm stopped'))
				runtime.manager.change_stage(stage)	
			else:
				if self.cnt > 0:	
					stage = AlarmNotifyStage(_('Alarm snoozed'))
					runtime.manager.change_stage(stage)								
					setting._alarm_tag = 1					
					status.alarm_item_bak = self.item
					setting._agenda_snooze_cnt = self.cnt
					agenda_time = self.interval * 60 * 1000
					setting.set_agenda_time(agenda_time, alarm_rotation)
					
				else:				
					setting.agenda_disable()				
			#runtime.eaHandler.deactivateApplication()
			runtime.manager.back_stage()
			runtime.eaHandler.endCall()
			return True
		'''
		
		if keyname == config.Menu4 or keyname == config.Red:
			if self.item[1] == _('Once'):
				index = alarmdb.find_by_item(self.item)
				alarmdb.remove(index)
				
			if runtime.eaHandler.isAppInUse():
				runtime.mmiDebug.mmiTrace('=============>>> START end Alarm()')
				#runtime.eaHandler.endCall()
				setting.agenda_disable()
				#runtime.eaHandler.deactivateApplication()
				runtime.manager.back_stage()
				runtime.eaHandler.endCall()
			else:
				setting.agenda_disable()
				stage = AlarmNotifyStage(_('Alarm stopped'))
				runtime.manager.change_stage(stage)	
				#runtime.manager.back_stage('idle')
		else:					
			if self.cnt > 0:	
				#setting.agenda_disable(snooze=True)
				if runtime.eaHandler.isAppInUse():
					runtime.mmiDebug.mmiTrace('=============>>> START snooze Alarm()')
					#runtime.eaHandler.endCall()
					#runtime.eaHandler.deactivateApplication()
					runtime.manager.back_stage()
					runtime.eaHandler.endCall()
				else:
					stage = AlarmNotifyStage(_('Alarm snoozed'))
					runtime.manager.change_stage(stage)								
				#setting._alarm_tag = 1					
				#status.alarm_item_bak = self.item
				#setting._agenda_snooze_cnt = self.cnt
				agenda_time = self.interval * 60 * 1000
				setting.set_agenda_snooze_time(agenda_time, alarm_rotation)
			else:
				if self.item[1] == _('Once'):
					index = alarmdb.find_by_item(self.item)
					alarmdb.remove(index)				
				if runtime.eaHandler.isAppInUse():
					runtime.mmiDebug.mmiTrace('=============>>> START end Alarm()')
					#runtime.eaHandler.endCall()
					#runtime.eaHandler.deactivateApplication()
					setting.agenda_disable()
					runtime.manager.back_stage()
					runtime.eaHandler.endCall()
				else:
					setting.agenda_disable()				
					runtime.manager.back_stage('idle')
		return True

	def alarm_stop(self):
		setting.agenda_disable()
		runtime.manager.back_stage()
		return False

	def show(self):
		ring = self.item[10]		
		#self.player_pid = utils.player.play(ring)
		utils.player.play_alarm(ring)
		Stage.show(self)		
		self.agenda_stop_timer = utils.Timer(self.interval * 60 * 1000, self.alarm_stop)
		
	def destroy(self):
		calc_stage = runtime.manager.find_stage('Calculator')
		if calc_stage:
			calc_stage.change_handle_key()
		
		self.agenda_stop_timer = None
		Stage.destroy(self)
		#utils.player.stop(self.player_pid)
		utils.player.stop_alarm()
		status.supervision_not_allowed = 0
		setting._alarm_tag = 0
		self._alarm_timeout_tag = None
		print 'ka...############# destroy alarm'
		if status.alarm_active_item:
			# 외부 이벤트에 의해 destory되는 경우
			print 'ka...######  auto snoose'
			if self.cnt > 0:	
				agenda_time = self.interval * 60 * 1000
				setting.set_agenda_snooze_time(agenda_time, alarm_rotation)
			else:
				setting.agenda_disable()
				if self.item[1] == _('Once'):
					index = alarmdb.find_by_item(self.item)
					alarmdb.remove(index)
			
		if alarm_valid():
			setting.set_agenda_time(5 * 1000, alarm_activate)	 
		

class AlarmEditTextStage(RichTextEditStage):
	def __init__(self,item,action):
		self.item = item 
		self.action = action
		mess = item[12]
		if mess == '0':
			mess = ''
		RichTextEditStage.__init__(self, _('CALENDAR'), small_title=_('Write'), isenter=False)
		self.ui.set_max(40)
		#if setting._agenda_message != None:
		self.ui.set_text(mess)
		status.save_callback_other = self.save_callback

	def activate_menu1(self):		
		if self.action == 1:
			ind = status.editing_alarm_index		
			status.alarm_item[0] = str(ind)
			status.alarm_item[12] = str(self.get_text())			
			alarmdb.remove(ind)
			alarmdb.insert_item(status.alarm_item)	
		runtime.manager.back_stage()
		runtime.manager.change_stage(DetailAlarmStage(status.alarm_item,self.action))

	def save_callback(self):
		if self.action == 1:
			index = status.editing_alarm_index		
			status.alarm_item[0] = str(index)
			status.alarm_item[12] = str(self.get_text())			
			alarmdb.remove(index)
			alarmdb.insert_item(status.alarm_item)
		return (_('Calendar saved.'), uiconfig.baloon_agenda_icon)

	def destroy(self):
		status.save_callback_other = None
		RichTextEditStage.destroy(self)
		

class AlarmNotifyStage(NotifyStage):
	def __init__(self, message, cb=None):
		NotifyStage.__init__(self, message, uiconfig.baloon_agenda_icon, cb)