import config
import baseui, ui
import runtime, utils, status
from setting import setting
from ui import PINInputUI
import uiconfig
#예외 발생 class raise StorageFullError, 'A' => .........StorageFullError:A
class StorageFullError(Exception):
pass
class Stage:
#__metaclass__ = checkdup.CheckDup
name = ''
agenda_forbidden = False
domonitor_forbidden = False
def set_name(self, name):
self.name = name
def get_name(self):
return self.name
def destroy(self):
self.ui.destroy()
self.ui = None
def is_active(self):
return self == runtime.manager.stage
def show(self):
self.ui.show()
def hide(self):
self.ui.hide()
def handle_key(self, key):
return False
def handle_modem(self, *ev):
return False
def oninit(self):
pass
def SMS_Notify_show(self, msg=None):
self.ui.SMS_Notify_show(msg)
def SMS_Notify_free(self):
self.ui.SMS_Notify_free()
class TempStage(Stage):
agenda_forbidden = True
def __init__(self, cb):
def run_cb():
self.cb_tag = None
cb()
return False
self.cb_tag = runtime.evas.idle_add(cb)
self.ui = baseui.BaseUI('', '', '')
def destroy(self):
Stage.destroy(self)
if self.cb_tag:
runtime.evas.idle_remove(self.cb_tag)
class ListStage(Stage):
# start shchun : add two additional option... May-11
# in order to have good scan ui.
#
# num_col : activate/deactivate numer icon in front of listitems.
# x : to specify x value of list items.
# def __init__(self,choice=None,title=None,icon=None,titleimage=None,left=_('OK'),right=_('BACK'),isactivate2=False, unselbarpos=[]):
def __init__(self, choice=None, title=None, icon=None, titleimage=None, left=_('OK'), right='', menu3='', menu4=_('BACK'), isactivate2=False, unselbarpos=[], num_col=True, x=uiconfig.list_pos_x):
self.num_col = num_col
self.x = x
# end shchun
self.isactivate2 = isactivate2
if title == None:
try:
title = self.title
except:
title = ''
if choice == None:
try:
choice = self.choice
except:
choice = ''
self.choice = ''
if icon == None:
try:
icon = self.icon
except:
pass
if titleimage == None:
try:
if self.titleimage and self.titleimage != None:
titleimage = self.titleimage
else:
titleimage = uiconfig.gen_big_title
except:
titleimage = uiconfig.gen_big_title
self.choice_updated = False
# yylee modified to add new soft key
# start shchun : add addition argument, x, numcol May-11
self.ui = baseui.ListUI(left, right, title, menu3, menu4, titleimage, icon=icon, num_col = self.num_col,x = self.x)
# self.ui = baseui.ListUI(left, right, title, titleimage=titleimage, icon=icon)
# end shchun
self.ui.set_list(choice, unselbarpos)
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
if self.ui.get_focus() >= 0:
self.activate(self.ui.get_focus())
return True
# yylee modified to add new soft key
# elif key == config.Menu2:
elif key == config.Menu4 or key == 'CLR':
if self.isactivate2:
self.activate2(self.ui.get_focus())
else:
runtime.manager.back_stage()
return True
elif key in ('Up', 'Down'):
return self.ui.handle_key(key)
elif key in '123456789':
nkey = int(key)
if nkey <= len(self.ui.list.labels):
self.activate(nkey-1)
return True
'''
elif key == '1':
self.activate(0)
return True
elif key == '2':
self.activate(1)
return True
elif key == '3':
self.activate(2)
return True
elif key == '4':
self.activate(3)
return True
elif key == '5':
self.activate(4)
return True
elif key == '6':
self.activate(5)
return True
elif key == '7':
self.activate(6)
return True
elif key == '8':
self.activate(7)
return True
elif key == '9':
self.activate(8)
return True
'''
return False
def show(self):
if self.choice_updated:
self.ui.update_lists(self.choice)
self.choice_updated = False
Stage.show(self)
def change_choice(self, choice):
self.choice_updated = True
self.choice = choice
def set_focus(self, focus):
self.ui.set_focus(focus)
class ListTimeStage(Stage):
def __init__(self, choice=None, title=None, icon=None, titleimage=None, left='', right='', menu3='', menu4=_('BACK'), isactivate2=False, unselbarpos=[]):
self.isactivate2 = isactivate2
if title == None:
title = self.title
if choice == None:
try:
choice = self.choice
except:
choice = ''
self.choice = ''
if icon == None:
try:
icon = self.icon
except:
pass
if titleimage == None:
try:
titleimage = self.titleimage
except:
pass
self.choice_updated = False
self.ui = baseui.TimeListUI(left, right, title, titleimage=titleimage, icon=icon)
self.ui.set_list(choice, unselbarpos)
def handle_key(self, key):
if key == config.Menu1:
if self.ui.get_focus() >= 0:
self.activate(self.ui.get_focus())
return True
if key == config.Menu4 or key == 'CLR':
if self.isactivate2:
self.activate2(self.ui.get_focus())
else:
runtime.manager.back_stage()
return True
elif key in ('Up', 'Down'):
return self.ui.handle_key(key)
return False
def show(self):
if self.choice_updated:
self.ui.update_lists(self.choice)
self.choice_updated = False
Stage.show(self)
def change_choice(self, choice):
self.choice_updated = True
self.choice = choice
class ListCalendarStage(Stage):
def __init__(self, choice=None, left='', right='', menu3='', menu4=_('BACK'), isactivate2=False, unselbarpos=[], title_image=uiconfig.calendar_title, list_icon=uiconfig.calendar_list_icon, x=uiconfig.list2_pos_x, title=''):
self.isactivate2 = isactivate2
if choice == None:
try:
choice = self.choice
except:
choice = ''
self.choice = ''
self.choice_updated = False
self.ui = baseui.CalendarListUI(left, right, menu3, title_image=title_image, list_icon=list_icon, x=x, title=title)
self.ui.set_list(choice, unselbarpos)
self.current_pos = -1
def handle_key(self, key):
if key == config.Menu1:
if self.ui.get_focus() >= 0:
self.activate(self.ui.get_focus())
return True
if key == config.Menu4:
if self.isactivate2:
self.activate2(self.ui.get_focus())
else:
runtime.manager.back_stage()
return True
elif key in ('Up', 'Down'):
return self.ui.handle_key(key)
return False
def show(self):
if self.choice_updated:
self.ui.update_lists(self.choice)
self.choice_updated = False
if self.current_pos != -1:
self.ui.set_focus(self.current_pos)
Stage.show(self)
def change_choice(self, choice):
self.choice_updated = True
self.choice = choice
def set_current_pos(self, pos):
self.current_pos = pos
def get_current_pos(self):
return self.current_pos
# KA: [20080311] phonebook UI
class EA_SearchStage(Stage): # ListStage
def __init__(self, group_index=-1, left=_('OK'), right=_('DELETE'), menu3=_('KOR'), menu4=_('BACK'), isactivate2=False, unselbarpos=[], myann_flag=False):
from phonedb import phonedb
if phonedb.is_empty():
import uiconfig
def back_cb():
runtime.eaHandler.closePhonebook()
runtime.manager.stack_stage(NotifyStage(_('Phonebook empty'), uiconfig.baloon_phonebook_icon, back_cb))
return
self.group_index = group_index
self.isactivate2 = isactivate2
self.choose_move = 0
self.myann_flag = myann_flag
self.choice_updated = False
self.ui = baseui.SearchUI(left, right, menu3, menu4)
#self.ui.set_fixed_automata(None, False)
self.ui.set_automata('hangul', False)
self.phonedb_indexes, self.choice = self.get_list()
if self.choice:
self.ui.set_list(self.choice, unselbarpos)
self.ui.set_focus(0)
self.ui.update_info()
# return self.ui.entry.handle_key(key)
def handle_key(self, key):
if key in (config.Red, config.Menu4):
runtime.manager.back_stage()
#runtime.eaHandler.sendPhonebookData()
runtime.eaHandler.closePhonebook()
return True
if key == config.Menu1 or key == 'OK':
#phonebookList = []
number = self.ui.get_priority_number()
name = self.ui.item[0]
name = unicode(name, 'utf-8').encode('euc-kr')
phonebookList = (number, name)
#phonebookList.append((sel_number, sel_name))
runtime.eaHandler.closePhonebook()
runtime.eaHandler.sendPhonebookData(phonebookList)
runtime.manager.back_stage()
return True
elif key == config.Menu2:
# delete
status.editing_phone_number_index = self.ui.get_focus()
status.phone_item = self.ui.get_item()
self.delete_item()
'''
if self.choose_move == 0:
self.choose_move = 1
self.ui.sel_number.file = uiconfig.image_dir + uiconfig.PB_sel_number_file[1]
else:
self.choose_move = 0
self.ui.sel_number.file = uiconfig.image_dir + uiconfig.PB_sel_number_file[0]
return True
'''
elif key == config.Menu3:
self.ui.automata_idx = utils.get_automata_idx(*self.ui.automata)
self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list_hangul)
self.ui.automata = config.automata_list_hangul[self.ui.automata_idx]
self.ui.set_automata(*self.ui.automata)
return True
elif key == 'CLR':
self.ui.entry.handle_key(key)
text_len = len(self.ui.entry.get_text())
if text_len > 0:
self.ui.entry.backspace(1)
text_len = len(self.ui.entry.get_text()) # it's needed because of hangul
if text_len:
#self.sort()
#if len(self.ui.entry.get_text()) == 0:self.ui.set_right('')
self.sorting()
else:
'''
self.phonedb_indexes, self.choice = self.get_list()
print 'jun================================ self.phonedb_indexes=', self.phonedb_indexes
print 'jun================================ self.choice=', self.choice
if self.choice:
unselbarpos = []
self.ui.set_list(self.choice, unselbarpos)
self.ui.set_focus(0)
self.ui.update_info()
self.sorting()
'''
runtime.manager.back_stage()
from phonedb import phonedb
if phonedb.is_empty():
if self.ui.notify_timer:
return
self.ui.notify_msg_show(msg = _('Phonebook empty'))
else:
runtime.manager.stack_stage(EA_SearchStage)
else:
runtime.manager.back_stage()
runtime.eaHandler.closePhonebook()
# 2008.04.25 TEST
#from phonedb import phonedb
#index = phonedb.find_by_name_near(self.ui.entry.get_text())
#self.ui.set_focus(index)
# 2008.04.25 TEST ==
return True
elif key in ('Up', 'Down') or ((self.choose_move ==1) and key in ('Left','Right')):
#self.ui.set_right('DELETE')
return self.ui.handle_key(key)
elif key in ('Left','Right'):
if len(self.ui.entry.get_text()) <= 0:
return
else:
return self.ui.entry.handle_key(key)
#elif key == config.Red:
# runtime.manager.back_stage()
# return True
elif key in (config.Green, config.OffHook, config.Video):
return True
else:
#self.ui.sel_number.file = uiconfig.image_dir + uiconfig.PB_sel_number_file[0]
#self.ui.set_right('DELETE')
result = self.ui.entry.handle_key(key)
# KA:[20080331] NEW PHONEBOOK - search
#from phonedb import phonedb
# 2008.04.25 TEST
#index = phonedb.find_by_name_near(self.ui.entry.get_text())
#self.ui.set_focus(index)
self.sorting()
#self.sort()
return result
def sort(self):
from phonedb import phonedb
# 2008.04.25 TEST
#index = phonedb.find_by_name_near(self.ui.entry.get_text())
#self.ui.set_focus(index)
choice = phonedb.find_by_all_near(self.ui.entry.get_text())
if choice:
self.choice = choice
#self.ui.set_left(_('MSG_SEND'))
self.ui.set_right(_('DELETE'))
else:
self.choice = _('No result'),
self.ui.set_left('')
self.ui.set_right('')
self.ui.update_lists(self.choice)
self.choice_updated = True
self.ui.set_focus(0)
self.ui.update_info()
Stage.show(self)
# 2008.04.25 TEST ==
def sorting(self):
text = self.ui.entry.get_text()
if len(text) == 0:
self.choice = _('No result'),
if self.myann_flag:
self.ui.set_left(_('OK'))
self.ui.set_right('')
else:
#self.ui.set_left(_('MSG_SEND'))
self.ui.set_right(_('DELETE'))
else:
from phonedb import phonedb
choice = phonedb.get_phonelist_by_text(text)
if choice:
self.choice = choice
if self.myann_flag:
self.ui.set_left(_('OK'))
self.ui.set_right('')
else:
#self.ui.set_left(_('MSG_SEND'))
self.ui.set_right(_('DELETE'))
else:
self.choice = _('No result'),
self.ui.set_left('')
self.ui.set_right('')
self.ui.update_lists(self.choice)
self.choice_updated = True
self.ui.set_focus(0)
self.ui.update_info()
Stage.show(self)
def activate_menu1(self):
# 'Find'
text = self.ui.get_text()
self.update_phonelist(text)
def update_phonelist(self, text):
if len(self.choice) == 0:
return
# focus를 맨 위로 보내기위해서
if type(text) == type(''):
if text:
from phonedb import phonedb
focus = phonedb.find_by_name_near(text, self.phonedb_indexes)
else:
focus = 0
self.ui.set_focus(0)
self.ui.set_focus(focus)
self.change_choice(self.choice)
def get_list(self):
from phonedb import phonedb
#print 'ka............group_index=', self.group_index
if self.group_index >= 0:
phonedb.load_group_db(self.group_index)
#print 'ka............phonedb.get_names_by_group()=', phonedb.get_names_by_group()
return range(phonedb.count()), phonedb.get_names_by_group()
else:
#phonedb.load_db()
#print 'ka....phonedb.get_names()=', phonedb.get_names()
return range(phonedb.count()), phonedb.get_names()
def show(self):
self.phonedb_indexes, self.choice = self.get_list()
self.ui.update_lists(self.choice)
self.choice_updated = False
self.ui.set_focus(0)
self.ui.update_info()
if self.ui.entry.get_text():
self.sorting()
Stage.show(self)
#if self.call_flag or status.video_mode != status.VideoIdle:
# self.ui.set_left('')
# return
def hide(self):
self.ui.hide()
def destroy(self):
Stage.destroy(self)
status.editing_phone_number_index = -1
status.phone_item = None
if self.group_index >= 0:
from phonedb import phonedb
phonedb.load_db()
def delete_item(self):
def yes():
# Delete This Item
from phonedb import phonedb
from speeddb import speeddb
name = phonedb.get_sym_name(status.editing_phone_number_index)
pb_item = phonedb.get_item(status.editing_phone_number_index)
speeddb.clear_speed_num(pb_item[6])
phonedb.remove(status.editing_phone_number_index)
# stage = runtime.manager.find_stage('phone list')
# stage.refresh_lists()
if phonedb.is_empty():
'''
if runtime.manager.find_stage('phonebook'):
runtime.manager.back_stage('phonebook')
else:
runtime.manager.queue_backward(3)
stage = NotifyStage(_('Entry deleted') + '\n' + _('Phonebook empty'), uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
'''
if runtime.manager.find_stage('phonebook'):
runtime.manager.back_stage('phonebook')
else:
from model import IdleStage
runtime.manager.change_stage(IdleStage, True)
stage = NotifyStage(_('Phonebook empty'), uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
stage = NotifyStage(_('Entry deleted'), uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
else:
stage = NotifyStage(_('Entry deleted'), uiconfig.baloon_phonebook_icon)
runtime.manager.change_stage(stage)
return
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Delete this entry?'), yes, no, '', uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
def handle_call(self, video_call=False):
from runtime import mmiDebug as MD
if status.video_mode != status.VideoIdle:
MD.mmiTrace('PHONEBOOK dialing: cancel(CALL)')
return
status.dial_number = self.ui.get_priority_number()
MD.mmiTrace('status.dial_number = ', status.dial_number)
from mmiSoundPath import SP_State, Device, SP_Context
from dectHandler import DectCallManager
status.videocall_byuser = video_call
dectStatus = runtime.dectCallManager.getDectStatus()
if status.dial_number and dectStatus == DectCallManager.IDLE:
spkOffHook = runtime.SP_context.SPK_OffHook(dialNumber=True)
else:
spkOffHook = runtime.SP_context.SPK_OffHook(dialNumber=False)
if spkOffHook.next():
if spkOffHook.next():
if dectStatus == DectCallManager.IDLE:
runtime.mmiDebug.mmiTrace('call start')
#runtime.vdci_stop_tone()
runtime.SP_context.stopTonePlay()
if status.videocall_byuser:
runtime.manager.start_call(number=status.dial_number, video_call=True)
else:
runtime.manager.start_call(number=status.dial_number, video_call=False)
else:
if dectStatus == DectCallManager.IDLE:
runtime.SP_context.speaker.setTone(config.PLAY_DIAL_TONE)
else:
runtime.SP_context.speaker.setTone(config.PLAY_BUSY_TONE)
runtime.SP_context.startTonePlay()
else:
if spkOffHook.next():
status.dial_number = ''
status.dialed_by_user = False
#runtime.vdci_stop_tone()
runtime.SP_context.stopTonePlay()
runtime.manager.stop_call(IdleStage)
else:
spkOffHook.next() # SP_HS_OffHook_SPK_OffHook 상태를 위한 것.
if dectStatus == DectCallManager.IDLE:
runtime.SP_context.speaker.setTone(config.PLAY_DIAL_TONE)
else:
runtime.SP_context.speaker.setTone(config.PLAY_BUSY_TONE)
runtime.SP_context.startTonePlay()
# KA: [20080311] phonebook UI
class SearchStage(Stage): # ListStage
name = 'phonebook search stage'
def __init__(self, group_index=-1, left='', right=_('DELETE'), menu3=_('KOR'), \
menu4=_('BACK'), unselbarpos=[], myann_flag=False, call_flag=False, vm_flag=False):
#choice=None, title=None, icon=None, titleimage=None,
if config.mmi_debug: print 'left=%s, myann_flag=%s, call_flag=%s' %(left, myann_flag, call_flag)
self.group_index = group_index
self.choose_move = 0
self.myann_flag = myann_flag
self.vm_flag = vm_flag
self.call_flag = call_flag
if self.call_flag == True:
left = ''
self.choice_updated = False
# shchun : global automata change
if setting.lang == 'Korean':
menu3=_('KOR')
else:
menu3=_('abc')
# end shchun
self.ui = baseui.SearchUI(left, right, menu3, menu4)
#self.ui.set_fixed_automata(None, False)
# shchun : global automata change
# self.ui.set_automata('hangul', False)
#self.ui.set_fixed_automata(self.ui.list.entrys[0], None, False)
if setting.lang == 'Korean':
self.ui.set_automata('hangul', False)
else:
self.ui.set_automata('multitap', 'lower')
#debugLogC('*__init__ automata_idx=', self.ui.automata_idx, ', automata=', self.ui.automata)
#self.set_menu3()
# end shchun
self.phonedb_indexes, self.choice = self.get_list()
if self.choice:
self.ui.set_list(self.choice, unselbarpos)
self.ui.set_focus(0)
self.ui.update_info()
#return self.ui.entry.handle_key(key)
status.real_phonedb_index =[0]
self.sortingTimer = None
def handle_key(self, key):
# not for general phonebook search but for web phonebook search
if config.mmi_debug:
print '[basemodel.search.HK] key=', key
print 'self.myann_flag=', self.myann_flag
if self.myann_flag:
if key == config.Menu1 or key == 'OK':
if self.ui.left == _('OK'):
import myannapp
if config.myann_debug:
print '## browser phonebook search is deactivated by', key
from phonedb import phonedb
sel_number = self.ui.get_priority_number()
runtime.myannapp.send_mesg(config.EVT_APP_RESUME, 0, sel_number)
runtime.manager.back_stage()
myannapp.active_myann()
return True
elif key == config.Menu2:
return True
elif key == config.Menu4:
import myannapp
if config.myann_debug:
print '## browser phonebook search is deactivated by', key
runtime.myannapp.send_mesg(config.EVT_APP_RESUME, 1)
runtime.manager.back_stage()
myannapp.active_myann()
return True
elif key == config.Red:
import myannapp
if config.myann_debug:
print '## browser phonebook search is deactivated by', key
runtime.myannapp.send_mesg(config.EVT_APP_RESUME, 1)
myannstage = runtime.manager.find_stage('myann')
myannstage.handle_key(key)
return True
elif key == config.OffHook or key == config.Green or key == config.Video:
import myannapp
if config.myann_debug:
print '## browser phonebook search is deactivated by', key
#runtime.myannapp.send_mesg(config.EVT_APP_RESUME, 1)
myannstage = runtime.manager.find_stage('myann')
myannstage.handle_key(key)
return True
if self.vm_flag:
if key in (config.Red, config.Menu4):
runtime.manager.back_stage('EaNotifyStage')
#runtime.eaHandler.sendPhonebookData()
runtime.eaHandler.closePhonebook()
return True
if key == config.Menu1 or key == 'OK':
#phonebookList = []
number = self.ui.get_priority_number()
name = self.ui.item[0]
name = unicode(name, 'utf-8').encode('euc-kr')
phonebookList = (number, name)
#phonebookList.append((sel_number, sel_name))
runtime.eaHandler.closePhonebook()
runtime.eaHandler.sendPhonebookData(phonebookList)
runtime.manager.back_stage('EaNotifyStage')
return True
elif key in (config.Green, config.OffHook, config.Video, config.Menu2):
return True
from mmiSoundPath import SP_Context
from dectHandler import DectCallManager
baseCallStatus, baseStatus, dectCallStatus, dectStatus = status.getCurrentCallStatus()
# print 'ka...## baseCallStatus, baseStatus, dectCallStatus, dectStatus=', baseCallStatus, baseStatus, dectCallStatus, dectStatus
# Base가 in use...
if status.video_mode != status.VideoIdle: #and \
if baseStatus == SP_Context.CONNECTED or (dectStatus == DectCallManager.CONNECTED and baseCallStatus in [SP_Context.OUTGOING_VIDEO, SP_Context.INCOMING_VIDEO]):
if dectStatus == DectCallManager.CONNECTED:
if key in (config.Green, config.OnHook):
return True
if key in (config.Green, config.Red, config.OffHook, config.OnHook):
if runtime.manager.find_stage('AudioCallConnected'):
CallConnetStage = runtime.manager.find_stage('AudioCallConnected')
else:
CallConnetStage = runtime.manager.find_stage('VideoCallConnected')
CallConnetStage.handle_key(key)
return True
'''
if key in (config.Green, config.OffHook):
stage = NotifyStage(message=_('Change of the sound path is not supported in phonebook'), duration=3000,vm_flag=True )
runtime.manager.stack_stage(stage)
return True
elif key in (config.OnHook, config.Red):
runtime.SP_context.goIdleState()
runtime.vdci_send_mesg(code1=config.MESG_HANGUP)
return True
'''
# Enblcokedit에서 호출된 경우
if self.call_flag:
if key in (config.OnHook, config.Red):
runtime.SP_context.goIdleState()
runtime.manager.back_stage('idle')
return True
elif key in (config.Menu1, config.Menu2, 'OK'):
return True
if key == 'OK': # Edit phonebook
if self.choice[0] == _('No result'):
return True
if 0 and config.mmi_debug:
print 'status.real_phonedb_index =', status.real_phonedb_index
print 'len(status.real_phonedb_index) =', len(status.real_phonedb_index)
print 'self.ui.get_focus()=', self.ui.get_focus()
if len(status.real_phonedb_index) == 0 or \
(len(status.real_phonedb_index) == 1 and status.real_phonedb_index[0] == 0):
status.editing_phone_number_index = self.ui.get_focus()
status.phone_item = self.ui.get_item()
else:
try:
index = status.real_phonedb_index[self.ui.get_focus()]
except:
print '&&& status.real_phonedb_index db error'
index = 0
from phonedb import phonedb
if phonedb.count()<= index:
index = 0
if config.mmi_debug:
print '## phonedb.db=', phonedb.db
print '## index=', index
status.editing_phone_number_index = index
status.phone_item = phonedb.get_item(index)
if config.mmi_debug:
print '## status.phone_item=', status.phone_item
import phonebook
stage = phonebook.AddPhoneBookStage
runtime.manager.stack_stage(stage)
elif key == config.Menu1: # Send message
# shchun : disable messaging for Telio version.
# # send SMS
# if self.choice[0] == _('No result'):
# return True
# number= self.ui.get_priority_number()
# name = self.ui.item[0]
# from eaHandler import EaHandler
# runtime.eaHandler.sendMmsMessageInMmi(number, name)
return True
elif key == config.Menu2:
# delete
if self.choice[0] == _('No result'):
return True
if len(status.real_phonedb_index) == 0 or \
(len(status.real_phonedb_index) == 1 and status.real_phonedb_index[0] == 0):
status.editing_phone_number_index = self.ui.get_focus()
status.phone_item = self.ui.get_item()
else:
try:
index = status.real_phonedb_index[self.ui.get_focus()]
except:
index = 0
from phonedb import phonedb
if phonedb.count()<= index:
index = 0
status.editing_phone_number_index = index
status.phone_item = phonedb.get_item(index)
if config.mmi_debug:
print '## status.phone_item=', status.phone_item
self.delete_item()
'''
if self.choose_move == 0:
self.choose_move = 1
self.ui.sel_number.file = uiconfig.image_dir + uiconfig.PB_sel_number_file[1]
else:
self.choose_move = 0
self.ui.sel_number.file = uiconfig.image_dir + uiconfig.PB_sel_number_file[0]
return True
'''
elif key == config.Menu3:
# shchun: global input change
if setting.lang == 'Korean':
self.ui.automata_idx = utils.get_automata_idx(*self.ui.automata)
self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list_hangul)
self.ui.automata = config.automata_list_hangul[self.ui.automata_idx]
else:
self.ui.automata_idx = utils.get_automata_idx(*self.ui.automata)
self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list)
self.ui.automata = config.automata_list[self.ui.automata_idx]
self.ui.set_automata(*self.ui.automata)
# end shchun
return True
elif key == config.Menu4: #options Menu(left key)
runtime.manager.back_stage()
return True
elif key == 'CLR':
text_len = len(self.ui.entry.get_text())
if text_len > 0:
#self.ui.entry.backspace()
self.ui.entry.handle_key('\b')
text_len = len(self.ui.entry.get_text()) # it's needed because of hangul
if text_len:
# soring 속도 향상을 위해 1초 Timer를 둔다.
self.sortingTimer = None
self.sortingTimer = utils.Timer(500, self.sort)
#self.sorting()
else:
'''
self.phonedb_indexes, self.choice = self.get_list()
print 'jun================================ self.phonedb_indexes=', self.phonedb_indexes
print 'jun================================ self.choice=', self.choice
if self.choice:
unselbarpos = []
self.ui.set_list(self.choice, unselbarpos)
self.ui.set_focus(0)
self.ui.update_info()
self.sorting()
'''
runtime.manager.back_stage()
from phonedb import phonedb
if phonedb.is_empty():
if self.ui.notify_timer:
return
self.ui.notify_msg_show(msg = _('Phonebook empty'))
else:
if self.myann_flag:
runtime.manager.stack_stage(SearchStage(left=_('OK'), right='', myann_flag=True))
elif self.vm_flag:
runtime.manager.stack_stage(SearchStage(left=_('OK'), right='', vm_flag=True))
else:
runtime.manager.stack_stage(SearchStage(call_flag=self.call_flag))
else:
#self.ui.set_right('')
if self.myann_flag:
import myannapp
if config.myann_debug:
print '## browser phonebook search is deactivated by', key
runtime.myannapp.send_mesg(config.EVT_APP_RESUME, 1)
runtime.manager.back_stage()
myannapp.active_myann()
elif self.vm_flag:
runtime.manager.back_stage()
runtime.eaHandler.closePhonebook()
else:
runtime.manager.back_stage()
# 2008.04.25 TEST
#from phonedb import phonedb
#index = phonedb.find_by_name_near(self.ui.entry.get_text())
#self.ui.set_focus(index)
# 2008.04.25 TEST ==
return True
elif key == config.LongMenu2:
if config.mmi_debug: print 'Basemodel.search.handle_key(), pressed *LongMenu2*'
self.ui.entry.handle_key(key)
runtime.manager.back_stage()
from phonedb import phonedb
if phonedb.is_empty():
##CHECKME : IF open the below 3-line, no attribute error happen
#if self.ui.notify_timer:
# return
#self.ui.notify_msg_show(msg = _('Phonebook empty'))
pass
else:
if self.myann_flag:
runtime.manager.stack_stage(SearchStage(left=_('OK'), right='', myann_flag=True))
elif self.vm_flag:
runtime.manager.stack_stage(SearchStage(left=_('OK'), right='', vm_flag=True))
else:
runtime.manager.stack_stage(SearchStage(call_flag=self.call_flag))
return True
elif key in ('Up', 'Down') or ((self.choose_move ==1) and key in ('Left','Right')):
#self.ui.set_right('DELETE')
if self.choice[0] == _('No result'):
return
return self.ui.handle_key(key)
elif key in ('Left','Right'):
if len(self.ui.entry.get_text()) <= 0:
return
else:
return self.ui.entry.handle_key(key)
#elif key == config.Red:
# runtime.manager.back_stage()
# return True
elif key == config.Green:
#self.handle_call(False)
#return True
#jun -------------------------------- 0723 (QA 2-43)
if len(status.real_phonedb_index) != 0:
self.handle_call(False)
return True
pass
#jun -------------------------------- 0723 (QA 2-43)
elif key == config.Video:
#self.handle_call(True)
#return True
#jun -------------------------------- 0723 (QA 2-43)
if len(status.real_phonedb_index) != 0:
self.handle_call(True)
return True
pass
#jun -------------------------------- 0723 (QA 2-43)
#elif key == config.OffHook:
#if self.call_flag or status.video_mode != status.VideoIdle:
# return True
# pass
elif key == config.OnHook:
# if baseStatus == SP_Context.IDLE and dectStatus == DectCallManager.IDLE:
# #runtime.SP_context.goIdleState()
runtime.manager.back_stage('idle')
return True
elif key == config.Red:
#if baseStatus == SP_Context.IDLE and dectStatus == DectCallManager.IDLE:
# #runtime.SP_context.goIdleState()
runtime.manager.back_stage('idle')
return True
elif key in (config.VideoMute, config.HookFlash, config.Transfer, config.MyAnn, config.Camera):
return True
else:
result = self.ui.entry.handle_key(key)
# soring 속도 향상을 위해 1초 Timer를 둔다.
self.sortingTimer = None
self.sortingTimer = utils.Timer(500, self.sort)
return result
def sort(self):
self.sortingTimer = None
self.sorting()
def sorting(self):
initFlag = False
text = self.ui.entry.get_text()
no_result = False
if config.mmi_debug: print '##len(text)=', len(text)
if len(text) == 0:
self.choice = _('No result'),
initFlag = True
if self.myann_flag or self.vm_flag:
self.ui.set_left(_('OK'))
self.ui.set_right('')
else:
#self.ui.set_left(_('MSG_SEND'))
self.ui.set_right(_('DELETE'))
else:
#print 'ka........####### self.ui.entry.is_cursor_show=', self.ui.entry.is_cursor_show()
from phonedb import phonedb
choice = phonedb.get_phonelist_by_text(text)
if 0 and config.mmi_debug:
print '## choice=', choice
print '## status.real_phonedb_index=', status.real_phonedb_index
if choice:
self.choice = choice
if self.myann_flag or self.vm_flag:
self.ui.set_left(_('OK'))
self.ui.set_right('')
elif self.call_flag:
self.ui.set_left('')
self.ui.set_right('')
else:
#self.ui.set_left(_('MSG_SEND'))
self.ui.set_right(_('DELETE'))
else:
#initFlag = True
self.choice = _('No result'),
self.ui.set_left('')
self.ui.set_right('')
status.real_phonedb_index = []
no_result = True
self.ui.update_lists(self.choice)
self.choice_updated = True
#self.ui.set_focus(0)
self.ui.update_info(initFlag, no_result)
Stage.show(self)
def activate_menu1(self):
# 'Find'
text = self.ui.get_text()
self.update_phonelist(text)
def update_phonelist(self, text):
if len(self.choice) == 0:
return
# focus를 맨 위로 보내기위해서
if type(text) == type(''):
if text:
from phonedb import phonedb
focus = phonedb.find_by_name_near(text, self.phonedb_indexes)
else:
focus = 0
self.ui.set_focus(0)
self.ui.set_focus(focus)
self.change_choice(self.choice)
def get_list(self):
from phonedb import phonedb
if config.mmi_debug:
print '## group_index=', self.group_index
if self.group_index >= 0:
phonedb.load_group_db_new(self.group_index)
status.real_phonedb_index = phonedb.group_db_index
return phonedb.group_db_index, phonedb.get_names_by_group_new()
else:
#phonedb.load_db()
#print 'ka....phonedb.get_names()=', phonedb.get_names()
return range(phonedb.count()), phonedb.get_names()
def show(self):
self.phonedb_indexes, self.choice = self.get_list()
if 0 and config.mmi_debug:
print '## self.phonedb_indexes=', self.phonedb_indexes
print '## self.choice=', self.choice
if len(self.phonedb_indexes) == 0:
import phonebook
stage = phonebook.PhonebookNotifyStage(_('Group is empty'))
runtime.manager.change_stage(stage)
return
self.ui.update_lists(self.choice)
self.choice_updated = False
#self.ui.set_focus(0)
self.ui.update_info()
if self.ui.entry.get_text():
self.sorting()
else:
if self.group_index == -1:
if config.mmi_debug: print '@@@@ initialize status.real_phonedb_index=[]'
status.real_phonedb_index = [0]
if 0 and config.mmi_debug: print '## status.real_phonedb_index =', status.real_phonedb_index
Stage.show(self)
if self.call_flag:
self.ui.set_left('')
self.ui.set_right('')
if self.vm_flag:
self.ui.set_left(_('OK'))
self.ui.set_right('')
def hide(self):
self.ui.hide()
self.sortingTimer = None
def destroy(self):
Stage.destroy(self)
self.sortingTimer = None
status.editing_phone_number_index = -1
status.phone_item = None
if self.group_index >= 0:
from phonedb import phonedb
phonedb.load_db()
def delete_item(self):
def yes():
# Delete This Item
from phonedb import phonedb
from speeddb import speeddb
name = phonedb.get_sym_name(status.editing_phone_number_index)
pb_item = phonedb.get_item(status.editing_phone_number_index)
speeddb.clear_speed_num(pb_item[6])
phonedb.remove(status.editing_phone_number_index)
# stage = runtime.manager.find_stage('phone list')
# stage.refresh_lists()
if phonedb.is_empty():
'''
if runtime.manager.find_stage('phonebook'):
runtime.manager.back_stage('phonebook')
else:
runtime.manager.queue_backward(3)
stage = NotifyStage(_('Entry deleted') + '\n' + _('Phonebook empty'), uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
'''
if runtime.manager.find_stage('phonebook'):
runtime.manager.back_stage('phonebook')
else:
from model import IdleStage
runtime.manager.change_stage(IdleStage, True)
stage = NotifyStage(_('Phonebook empty'), uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
stage = NotifyStage(_('Entry deleted'), uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
else:
stage = NotifyStage(_('Entry deleted'),uiconfig.baloon_phonebook_icon)
runtime.manager.change_stage(stage)
return
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Delete this entry?'), yes, no, '', uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
def handle_call(self, video_call=False):
from runtime import mmiDebug as MD
if status.video_mode != status.VideoIdle:
MD.mmiTrace('PHONEBOOK dialing: cancel(CALL)')
return
status.dial_number = self.ui.get_priority_number()
if not status.dial_number:
return
runtime.mmedia.unload()
MD.mmiTrace('status.dial_number = ', status.dial_number)
from mmiSoundPath import SP_State, Device, SP_Context
from dectHandler import DectCallManager
status.videocall_byuser = video_call
dectStatus = runtime.dectCallManager.getDectStatus()
if status.dial_number and dectStatus == DectCallManager.IDLE:
spkOffHook = runtime.SP_context.SPK_OffHook(dialNumber=True)
else:
spkOffHook = runtime.SP_context.SPK_OffHook(dialNumber=False)
if spkOffHook.next():
if spkOffHook.next():
if dectStatus == DectCallManager.IDLE:
runtime.mmiDebug.mmiTrace('call start')
#runtime.vdci_stop_tone()
runtime.SP_context.stopTonePlay()
runtime.SP_context.setBaseStatus(SP_Context.DIALING)
if status.videocall_byuser:
runtime.manager.start_call(number=status.dial_number, video_call=True)
else:
runtime.manager.start_call(number=status.dial_number, video_call=False)
else:
if dectStatus == DectCallManager.IDLE:
runtime.SP_context.speaker.setTone(config.PLAY_DIAL_TONE)
else:
runtime.SP_context.speaker.setTone(config.PLAY_BUSY_TONE)
runtime.SP_context.startTonePlay()
else:
if spkOffHook.next():
status.dial_number = ''
status.dialed_by_user = False
#runtime.vdci_stop_tone()
runtime.SP_context.stopTonePlay()
runtime.manager.stop_call(IdleStage)
else:
spkOffHook.next() # SP_HS_OffHook_SPK_OffHook 상태를 위한 것.
if dectStatus == DectCallManager.IDLE:
runtime.SP_context.speaker.setTone(config.PLAY_DIAL_TONE)
else:
runtime.SP_context.speaker.setTone(config.PLAY_BUSY_TONE)
runtime.SP_context.startTonePlay()
# KA: [20080311] phonebook UI ==
#Thang: [20080502-1] phonebook UI
class ExtPhotoGalleryCheckListStage(Stage):
def __init__(self,choice=None, titleimage=None):
if choice == None:
choice = self.choice
self.ui = baseui.PhotoGalleryCheckList(_('COPY'), _('SELECT'),'',_('BACK'), titleimage)
self.ui.set_list(choice)
def handle_key(self, key):
if key == config.ok or key == config.Menu2:
self.ui.toggle()
return True
elif key == config.Menu4:
runtime.manager.back_stage()
return True
return self.ui.handle_key(key)
class PhotoGalleryCheckListStage(Stage):
def __init__(self,choice=None):
if choice == None:
choice = self.choice
self.ui = baseui.PhotoGalleryCheckList(_('MENU'), _('SELECT'),_('LARGE'),_('BACK'))
self.ui.set_list(choice)
def handle_key(self, key):
if key == config.Menu2 or key == 'OK':
self.ui.toggle()
return True
elif key == config.Menu4 or key == 'CLR':
runtime.manager.back_stage()
return True
return self.ui.handle_key(key)
class SlideshowSelectCheckListStage(Stage):
def __init__(self,choice=None, titleimage=None):
if choice == None:
choice = self.choice
self.ui = baseui.PhotoGalleryCheckList(_('SET'), _('SELECT'),'',_('BACK'), titleimage)
self.ui.set_list(choice)
def handle_key(self, key):
if key == config.Menu2 or key == 'OK':
self.ui.toggle()
return True
elif key == config.Menu4 or key == 'CLR':
runtime.manager.back_stage()
return True
return self.ui.handle_key(key)
class GaugeStage(Stage):
def __init__(self, value, title=None, titleimage=None):
if title == None:
title = self.title
if titleimage == None:
try:
titleimage = self.titleimage
except:
titleimage = None
self.ui = baseui.GaugeUI(_('SAVE'), '','',_('BACK'),titleimage, title=title)
self.ui.set_value(value)
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
self.activate(self.ui.get_value())
elif key == config.Menu4 or key == 'CLR':
# Back
runtime.manager.back_stage()
elif key in ('Up', 'Down', 'Right', 'Left'):
self.ui.handle_key(key)
else:
return False
return True
class YesNoStage(Stage):
def __init__(self, message, yes_cb, no_cb, title, icon):
self.ui = baseui.YesNoUI(title, message, icon)
self.yes_cb = yes_cb
self.no_cb = no_cb
def handle_key(self, key):
if key == config.Menu2: self.yes_cb()
elif key == config.Menu3: self.no_cb()
else: return False
return True
class OkNoStage(YesNoStage):
def __init__(self, message, yes_cb, no_cb, title, icon):
self.ui = baseui.OkNoUI(title, message, icon)
self.yes_cb = yes_cb
self.no_cb = no_cb
class EntryStage(Stage):
def __init__(self, sub_label, title, left=_('OK'), right='', ismms=False, menu3='', menu4=_('BACK'), need_hangul=True):
self.ui = baseui.EntryUI(left, right, title, sub_label, ismms, menu3, menu4, need_hangul)
self.set_fixed_automata(None, False)
def show(self):
status.editing = True
Stage.show(self)
def hide(self):
status.editing = False
Stage.hide(self)
def destroy(self):
status.editing = False
Stage.destroy(self)
def set_fixed_automata(self, name, casemode):
self.ui.set_fixed_automata(name, casemode)
def t9_add_word(self, word):
self.ui.entry.t9_add_word(word)
self.ui.update_entry_info()
def insert_symbol(self, s):
before_text = self.ui.get_text()
self.ui.insert_text(s)
after_text = self.ui.get_text()
if before_text == after_text:
runtime.manager.change_stage(NotifyStage(_('Max length exceeded'), uiconfig.baloon_message_icon))
else:
runtime.manager.back_stage()
def is_valid_email(self):
t = self.ui.get_text()
if t.find('@') >= 0 and t.find('.') >= 0:
return True
return False
def activate_menu2(self):
runtime.manager.back_stage()
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
if self.ui.is_t9_add_word_mode():
runtime.manager.stack_stage(T9AddWordStage(self))
else:
self.ui.reset_automata()
self.activate_menu1()
return True
elif key == config.Menu4:
runtime.manager.back_stage()
return True
else:
return self.ui.handle_key(key)
return False
# KA: [20070121] phonebook UI
class PhoneBookEntryStage(Stage):
def __init__(self, sub_label, title, left=_('OK'), right=_('BACK'), menu3='', menu4=''):
self.ui = baseui.PhoneBookUI(left, right, title, menu3, menu4)
self.set_fixed_automata(None, False)
def show(self):
status.editing = True
Stage.show(self)
def hide(self):
status.editing = False
Stage.hide(self)
def destroy(self):
status.editing = False
Stage.destroy(self)
def set_fixed_automata(self, name, casemode):
self.ui.set_fixed_automata(name, casemode)
def t9_add_word(self, word):
self.ui.entry.t9_add_word(word)
self.ui.update_entry_info()
def insert_symbol(self, s):
before_text = self.ui.get_text()
self.ui.insert_text(s)
after_text = self.ui.get_text()
if before_text == after_text:
runtime.manager.change_stage(NotifyStage(_('Max length exceeded'), uiconfig.baloon_message_icon))
else:
runtime.manager.back_stage()
def is_valid_email(self):
t = self.ui.get_text()
if t.find('@') >= 0 and t.find('.') >= 0:
return True
return False
def activate_menu2(self):
runtime.manager.back_stage()
def set_focus(self):
focus = 0
max_entry = 2
self.ui.entry = self.ui.entry_total[focus+1]
def show_cursor(self, show):
if show:
if not self.cursor:
import cursor
self.cursor = cursor.Cursor(self)
self.add(self.cursor)
else:
if self.cursor:
self.remove(self.cursor)
self.cursor.free()
self.cursor = None
def handle_key(self, key):
if key == 'Up' or key == 'Down':
self.set_focus()
if key == config.Menu1:
if self.ui.is_t9_add_word_mode():
runtime.manager.stack_stage(T9AddWordStage(self))
else:
self.ui.reset_automata()
self.activate_menu1()
return True
elif key == config.Menu2:
if self.ui.handle_key(key):
return True
if self.ui.right == _('BACK'):
runtime.manager.back_stage()
return True
else:
self.activate_menu2()
return True
else:
return self.ui.handle_key(key)
return False
# KA: [20070121] phonebook UI ==
#ka...phonebook 2006.10.12
class EntryNumberStage(Stage):
def __init__(self, sub_label, title, left=_('OK'), right=_('PHONEBOOK'), ismms=False, org_stage=''):
self.ui = baseui.EntryUI(left, right, title, sub_label, ismms)
self.org_stage = org_stage
def activate_menu2(self):
runtime.manager.back_stage()
def handle_key(self, key):
if key == config.Menu1:
self.ui.reset_automata()
self.activate_menu1()
return True
elif key == config.Menu2:
if self.ui.handle_key(key):
return True
if self.ui.right == _('PHONEBOOK'):
from phonedb import phonedb
if phonedb.is_empty():
runtime.manager.stack_stage(NotifyStage(_('Phonebook empty'), uiconfig.baloon_phonebook_icon))
return
from phonebook import SearchPhoneBookStage
runtime.manager.stack_stage(SearchPhoneBookStage(self.org_stage))
return True
else:
self.activate_menu2()
else:
return self.ui.handle_key(key)
return False
class NotifyStage(Stage):
agenda_forbidden = True
def __init__(self, message, icon=None, cb=None, duration=0, isred=True, vm_flag=False):
status.supervision_not_allowed = 1
self.isred = isred
self.vm_flag = vm_flag
self.ui = baseui.NotifyUI(message, icon)
# 지정된 시간이 지나면 이전 화면으로 돌아감.
def destroy():
status.supervision_not_allowed = 0
runtime.manager.back_stage()
return False
self.cb = cb or destroy
self.duration = duration or uiconfig.notify_duration
def show(self):
# RHC / [20060925_1]
status.supervision_not_allowed = 1
# RHC / [20060925_1]--
def run_cb():
self.destroy_tag = 0
self.cb()
self.destroy_tag = utils.Timer(self.duration, run_cb)
Stage.show(self)
if self.duration == 1:
runtime.evas.render_now()
def hide(self):
self.destroy_tag = None
Stage.hide(self)
def handle_key(self, key):
if self.vm_flag:
return True
if key == config.Red or key == config.CLEAR:
if not self.isred:
return True
self.destroy_tag = 0
self.cb()
return True
return Stage.handle_key(self, key)
def destroy(self):
status.supervision_not_allowed = 0
Stage.destroy(self)
self.destroy_tag = 0
# KA: [20080403] snmp UI
class FullNotifyStage(Stage):
agenda_forbidden = True
def __init__(self, message, icon, cb=None, duration=0, isred=True):
status.supervision_not_allowed = 1
self.isred = isred
self.ui = baseui.FullNotifyUI(message, icon)
# 지정된 시간이 지나면 이전 화면으로 돌아감.
def destroy():
status.supervision_not_allowed = 0
runtime.manager.back_stage()
return False
self.cb = cb or destroy
self.duration = duration or uiconfig.notify_duration
def show(self):
# RHC / [20060925_1]
status.supervision_not_allowed = 1
# RHC / [20060925_1]--
def run_cb():
self.destroy_tag = 0
self.cb()
self.destroy_tag = utils.Timer(self.duration, run_cb)
Stage.show(self)
if self.duration == 1:
runtime.evas.render_now()
def hide(self):
self.destroy_tag = None
Stage.hide(self)
def handle_key(self, key):
if key == config.Red:
if not self.isred:
return True
self.destroy_tag = 0
self.cb()
return True
return Stage.handle_key(self, key)
def destroy(self):
status.supervision_not_allowed = 0
Stage.destroy(self)
self.destroy_tag = 0
# KA: [20080403] snmp UI ==
class SetDateStage(Stage):
def __init__(self, title, date, done_cb, icon=None):
self.ui = ui.DateEditUI(title, _('Set date'), date, icon)
self.done_cb = done_cb
def handle_key(self, key):
if key == config.Menu1:
if self.ui.handle_key(key):
year, mon, day = self.ui.date
self.done_cb((year, mon, day))
return True
else:
return self.ui.handle_key(key)
class TerminalNumberStage(Stage):
def __init__(self, our_terminal, issetting=False):
self.issetting = issetting
self.ui = ui.DigitEditUI(' ', _('TERMINAL NUMBER'), _('Number')+ ': ')
self.our_terminal = our_terminal
if our_terminal:
self.ui.handle_key(setting.terminal_number)
self.ui.set_right(_('BACK'))
else:
if status.callee_terminal_number:
self.ui.handle_key(status.callee_terminal_number)
self.ui.set_right(_('DELETE'))
else:
self.ui.set_right(_('BACK'))
def activate_menu1(self):
if len(self.ui.get_text()) == 0 and not self.our_terminal:
status.callee_terminal_number = self.ui.get_text()
if self.issetting:
icon = uiconfig.baloon_message_setting_icon
else:
icon = uiconfig.baloon_message_icon
stage = NotifyStage(_('Terminal number not set!'), icon)
runtime.manager.change_stage(stage)
elif len(self.ui.get_text()) >= 1:
if self.our_terminal:
setting.terminal_number = self.ui.get_text()
else:
status.callee_terminal_number = self.ui.get_text()
if self.issetting:
icon = uiconfig.baloon_message_setting_icon
else:
icon = uiconfig.baloon_message_icon
stage = NotifyStage(_('Terminal number set!'), icon)
runtime.manager.change_stage(stage)
def activate_menu2(self):
runtime.manager.back_stage()
def handle_key(self, key):
if key in '123456789':
self.ui.handle_key(key)
if not self.our_terminal:
self.ui.set_right(_('CLEAR'))
else:
self.ui.set_right(_('BACK'))
return True
elif key == config.Menu1:
self.activate_menu1()
return True
elif key == config.Menu2:
if self.ui.get_text() and not self.our_terminal:
self.ui.delete_char()
return True
self.activate_menu2()
return True
return False
class SetTimeStage(Stage):
def __init__(self, title, hourmin, done_cb):
self.ui = ui.TimeEditUI(title, _('Set time'), hourmin)
self.done_cb = done_cb
def handle_key(self, key):
if key == config.Menu1:
self.done_cb(self.ui.time)
return True
else:
return self.ui.handle_key(key)
class GalleryStage(Stage):
def __init__(self, image_list, selected, done_cb):
self.lists = image_list
self.done_cb = done_cb
self.current = selected
self.ui = baseui.GalleryUI(_('OK'),_('BACK'),_('GALLERY - VIEW'))
if self.current >= 0:
self.ui.set_preview(self.get_current_file())
def get_current_file(self):
return self.base_dir + self.lists[self.current]
def handle_key(self, key):
if key == config.Menu1:
self.done_cb(self.current)
elif key == config.Menu2:
runtime.manager.back_stage()
elif key == 'Up':
if self.current > 0:
self.current -= 1
else:
self.current = len(self.lists) - 1
self.ui.set_preview(self.get_current_file())
elif key == 'Down':
if self.current < len(self.lists) - 1:
self.current += 1
else:
self.current = 0
self.ui.set_preview(self.get_current_file())
else:
return False
return True
def show(self):
self.ui._show_arrow = len(self.lists) > 1
Stage.show(self)
class PINInputStage(Stage):
def __init__(self, left, right, menu3, menu4):
self.ui = ui.PINInputUI(_('OK'), '', '', _('BACK'))
self.password_reset_password = '123456789012'
self.input_key = ''
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
self.activate(self.ui.pin)
self.ui.reset()
elif key == config.Menu2 or key == 'CLR':
if len(self.ui.pin) > 0:
self.ui.delete_backward()
elif key == 'CLR':
runtime.manager.back_stage()
elif key == config.Menu4:
runtime.manager.back_stage()
else:
self.input_key += key
if self.input_key == self.password_reset_password:
self.activate(self.input_key)
else:
self.ui.handle_key(key)
def show(self):
Stage.show(self)
class RichTextStage(Stage):
def __init__(self, title, left=_('OK'), right=_('BACK'), text_font=uiconfig.richtext_font, text_color=uiconfig.richtext_color):
self.ui = baseui.RichTextUI(left, right, title, '', text_font, text_color)
def set_text(self, text):
self.ui.set_text(text)
def activate_menu1(self):
pass
def activate_menu2(self):
pass
def handle_key(self, key):
if key == config.Menu1:
self.activate_menu1()
elif key == config.Menu2:
self.activate_menu2()
else:
return self.ui.handle_key(key)
return True
class T9MessageNotify(NotifyStage):
def __init__(self, msg):
NotifyStage.__init__(self, msg, uiconfig.baloon_message_icon)
class T9AddWordStage(EntryStage):
def __init__(self, editstage):
EntryStage.__init__(self,_('Add word'), '', left=_('OK'), right=_('BACK'))
self.ui.set_max(32)
self.set_fixed_automata('multitap_addword', 'lower')
self.editstage = editstage
def activate_menu1(self):
if self.ui.get_text():
try:
self.editstage.t9_add_word(self.ui.get_text())
except StorageFullError:
runtime.manager.change_stage(T9MessageNotify(_('T9 Storage is full')))
return
runtime.manager.back_stage()
class RichTextEditStage(Stage):
def __init__(self, title, small_title = '', left=_('OK'), right=_('BACK'), isenter=True):
self.isenter = isenter
self.ui = baseui.RichTextEditUI(left, right, title, small_title)
self.ui.set_automata(*utils.get_def_automata()) #입력 방식 설정
self.ui.automata_idx = utils.get_def_automata_idx() #입력 방식 index
def show(self):
status.editing = True #입력 중 show 상태인가 hide상태인가?
Stage.show(self)
def hide(self):
status.editing = False
Stage.hide(self)
def destroy(self):
status.editing = False
Stage.destroy(self)
def get_text(self):
return self.ui.get_text()
def activate_menu2(self):
runtime.manager.back_stage()
def t9_add_word(self, word):
self.ui.edit.t9_add_word(word)
def insert_symbol(self, s):
before_text = self.ui.get_text()
self.ui.insert_text(s)
after_text = self.ui.get_text()
if before_text == after_text:
runtime.manager.change_stage(NotifyStage(_('Max length exceeded'), uiconfig.baloon_message_icon))
else:
runtime.manager.back_stage()
def handle_key(self, key):
if key == config.Menu1: #options Menu(left key)
if self.ui.is_t9_add_word_mode():
runtime.manager.stack_stage(T9AddWordStage(self))
return True
self.ui.reset_automata()
self.activate_menu1()
elif key == config.Menu2:
if self.ui.handle_key(key):
return True
if self.ui.right == _('BACK'):
runtime.manager.back_stage()
return True
else:
self.activate_menu2()
elif key == config.Menu3 and not self.ui.is_t9_editing_mode():
self.ui.reset_automata()
runtime.manager.stack_stage(SymbolSelectionStage(self, True))
return self.ui.handle_key(key) # Automata.handle_key에서 한글 입력후에 Editing mode를 0 으로 만든다.
# KA: [20070831] hangul lvp-2000
elif key == config.Menu4:
if self.ui.is_t9_add_word_mode():
return True
# vpark 2006.08.28 automata
self.ui.automata_idx = utils.get_automata_idx(*self.ui.automata)
if setting.lang == 'Korean':
self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list_hangul)
self.ui.automata = config.automata_list_hangul[self.ui.automata_idx]
else:
self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list)
self.ui.automata = config.automata_list[self.ui.automata_idx]
self.ui.set_automata(*self.ui.automata)
# KA: [20070831] hangul lvp-2000 ==
else:
return self.ui.handle_key(key)
return True
class SymbolSelectionStage(Stage):
def __init__(self, edit, isentry=False, case=-1):
self.ui = baseui.SymbolSelectionUI(isentry, case)
self.edit = edit
def handle_key(self, key):
if self.ui.handle_key(key):
return True
if key == config.Menu1 or key == 'OK':
c = self.ui.get_symbol()
self.edit.insert_symbol(c)
return True
elif key == config.Menu4 or key == config.Menu3:
runtime.manager.back_stage()
return True
elif key == config.OnHook or key == config.Red:
from mmiSoundPath import SP_State, Device, SP_Context
from dectHandler import DectCallManager
baseCallStatus, baseStatus, dectCallStatus, dectStatus = status.getCurrentCallStatus()
if baseStatus == SP_Context.CONNECTED or dectStatus == DectCallManager.CONNECTED:
if runtime.manager.find_stage('AudioCallConnected'):
runtime.manager.back_stage('AudioCallConnected')
elif runtime.manager.find_stage('VideoCallConnected'):
runtime.manager.back_stage('VideoCallConnected')
else:
return False
runtime.SP_context.goIdleState()
runtime.vdci_send_mesg(code1=config.MESG_HANGUP)
return True
else:
if runtime.manager.find_stage( 'enblock edit'):
runtime.manager.back_stage('enblock edit')
return True
else:
return False
return False