from basemodel import ListStage, EntryStage, Stage, NotifyStage, YesNoStage, EntryNumberStage, PhoneBookEntryStage, SearchStage
from model import PhoneListBase
import ui, baseui, runtime, uiconfig
import config, status, utils
from phonedb import phonedb
from speeddb import speeddb
from setting import setting
from roxiadebug import *
import entry,controls
import errorcode
NAME, GROUP, PRIORITY, HOME, MOBILE, OFFICE, EMAIL, SPEED, MELODY, SNAPSHOT = range(10)
class PhonebookNotifyStage(NotifyStage):
def __init__(self, message, cb=None):
icon = uiconfig.baloon_phonebook_icon
NotifyStage.__init__(self, message, icon, cb)
class FindStage(EntryStage):
def __init__(self, flag=False, org_stage=''): # flag Insert phone number 용으로 추가
EntryStage.__init__(self, _('Name'), _('SEARCH'), left=_('OK'), right=_('BACK'))
self.ui.set_max(config.max_pb_name)
# KA: [20070831] hangul lvp-2000
#ka...hangul add 2007.01.25
# self.ui.set_automata('multitap','lower')
# if setting.lang == 'Korean':
# self.ui.set_automata('hangul', False)
# else:
# self.ui.set_automata('multitap', 'lower')
# --- End of adding
# vpark 2006.08.28 automata
self.ui.set_fixed_automata(None, False)
# KA: [20070831] hangul lvp-2000
self.flag = flag
self.org_stage = org_stage
def activate_stage(self, focus):
if phonedb.is_empty():
if config.stage_debug:
print self, 'phonedb is empty'
return PhoneBookEmptyStage()
else:
#ka...modify 2006.10.16
if self.flag == True:
if focus:
return InsertPhoneListStage(focus, self.org_stage)
else:
return InsertPhoneListStage(0, self.org_stage)
else:
if focus:
return PhoneListStage(focus)
else:
return PhoneListStage(0)
def handle_key(self, key):
if not self.ui.get_text():
if key == 'Up':
stage = self.activate_stage(0);
runtime.manager.change_stage(stage)
return True
elif key == 'Down':
stage = self.activate_stage(-1);
runtime.manager.change_stage(stage)
return True
return EntryStage.handle_key(self, key)
def activate_menu1(self):
# 'Find'
text = self.ui.get_text()
stage = self.activate_stage(text)
runtime.manager.change_stage(stage)
def activate_menu2(self):
runtime.manager.back_stage()
status.assign_melody = ''
status.assign_image = ''
def destroy(self):
EntryStage.destroy(self)
class FindForCallStage(FindStage):
# idle에서 Down key에의해 나오는 화면
def __init__(self, include_all=False, _isemergency=False):
FindStage.__init__(self)
self.include_all = include_all
self._isemergency = _isemergency
def activate_stage(self, focus):
if self._isemergency:
return PhoneDialListStage(focus, not self.include_all)
else:
if phonedb.is_empty():
if config.stage_debug:
print self, 'phonedb is empty'
return PhoneBookEmptyStage()
return PhoneDialListStage(focus, not self.include_all)
def VIPStage():
if status.phone_item.vip == 'true':
def yes():
status.phone_item.vip = ''
phonedb.save()
stage = NotifyStage(_('Deleted from VIP list'), uiconfig.baloon_pbook_vip_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
icon = uiconfig.baloon_pbook_vip_icon
stage = YesNoStage(_('Already in VIP list.') + '\n' + _('Remove?'), yes, no, '', icon)
else:
status.phone_item.vip = 'true'
stage = NotifyStage(_('Set as VIP.'), uiconfig.baloon_pbook_vip_icon)
return stage
def AssignSnapshotStage():
import images
return images.ImagesForPhonebookStage()
class AddLastStage(ListStage):
name = 'add last'
icon = uiconfig.phonebook_icon
def __init__(self):
self.title = _('ADD NEW')
if status.phonebook_in_calling:
self.choice = _('Save'), _('Set as VIP')
else:
self.choice = _('Save'), _('Assign melody'), _('Set as VIP'), _('Assign image')
ListStage.__init__(self, self.choice)
status.save_callback_other = self.save_callback
def activate(self, index):
if self.choice[index] == _('Save'):
# Page 46
if not status.phone_item.is_valid():
stage = PhonebookNotifyStage(_('No data'))
runtime.manager.change_stage(stage)
return
phonedb.insert_item(status.phone_item)
emptystage = runtime.manager.find_stage('phonebook empty')
if emptystage:
runtime.manager.back_stage('phonebook empty')
runtime.manager.change_stage(PhoneBookStage)
stage = PhonebookNotifyStage(_('Entry saved!'))
stage.ui.set_title(_('ADD NEW - SAVE'))
runtime.manager.stack_stage(stage)
else:
pbstage = runtime.manager.find_stage('phonebook')
if pbstage:
runtime.manager.back_stage('phonebook')
stage = PhoneListStage(0)
runtime.manager.stack_stage(stage)
else:
pass
stage = PhonebookNotifyStage(_('Entry saved!'))
stage.ui.set_title(_('ADD NEW - SAVE'))
runtime.manager.stack_stage(stage)
return
elif self.choice[index] == _('Assign melody'):
runtime.manager.stack_stage(MelodyNewStage)
elif self.choice[index] == _('Set as VIP'):
runtime.manager.stack_stage(VIPStage)
elif self.choice[index] ==_('Assign image'):
runtime.manager.stack_stage(AssignSnapshotStage)
def save_callback(self):
phonedb.insert_item(status.phone_item)
return (_('Entry saved in phonebook.'), uiconfig.baloon_phonebook_icon)
def destroy(self):
status.save_callback_other = None
ListStage.destroy(self)
class AddEntryStage(PhoneBookEntryStage):
# name, number, mobile, email, fax
names = _('Name'), _('Number'), _('Mobile'), _('Company'),_('Email'), _('Fax number')
# KA: [20071019] TI IMS number
automata = (None, False), (None, False), (None, False), (None, False), ('123', False)
max = 50, 50, 50, 50, 50
name = 'add entry'
def __init__(self):
#add word 한 후에 left menu 가 없어지는 것 수정
PhoneBookEntryStage.__init__(self, _('Name'), _('ADD NEW'))
self.level = 0
status.phone_item = phonedb.new_item()
self.update_automata()
self.ui.set_left('')
def show(self):
PhoneBookEntryStage.show(self)
if self.level == 0:
if len(self.ui.get_text().replace(' ', '')) <= 0 :
self.ui.set_left(' ')
def handle_key(self, key):
if key == config.Red:
self.activate_menu2()
return True
elif key == config.Menu2:
if self.ui.handle_key(key):
if self.level == 0 and self.ui.right == _('BACK'):
self.ui.set_left('')
if self.level == 0 and len(self.ui.get_text().replace(' ', '')) <= 0:
self.ui.set_left('')
return True
if self.ui.right == _('BACK'):
self.activate_menu2()
return True
ret = PhoneBookEntryStage.handle_key(self, key)
if ret and self.is_active():
if self.ui.get_text() == '':
if self.level == 0:
#Name
self.ui.set_left('')
else:
self.ui.set_left(_('NEXT'))
else:
if self.level == 0:
if len(self.ui.get_text().replace(' ', '')) > 0:
self.ui.set_left(_('OK'))
else:
self.ui.set_left('')
else:
self.ui.set_left(_('OK'))
return ret
def update_automata(self):
name = self.names[self.level]
if name == _('Email'):
self.ui.entry_1.email_mode = True
else:
self.ui.entry_1.email_mode = False
automata = self.automata[self.level]
max_len = self.max[self.level]
self.set_fixed_automata(automata[0],automata[1])
if max_len > 0:
self.ui.set_max(max_len)
def activate_menu1(self):
text = self.ui.get_text()
if self.level == 0 and (not text or len(text.replace(' ', '')) <= 0):
return
status.phone_item[self.level] = text
if self.level == 0:
status.save_callback_other = self.save_callback
if phonedb.has_name(text):
# name complict
status.phonebook_save_stage_name = 'add entry'
stage = NameConflictStage()
runtime.manager.stack_stage(stage)
return
if self.level == 3 and text and not self.is_valid_email():
runtime.manager.stack_stage(PhonebookNotifyStage(_('Not valid Email address')))
return
self.ui.set_left(_('NEXT'))
self.level += 1
if self.level > 4:
stage = AddLastStage
runtime.manager.stack_stage(stage)
self.level = 4
else:
self.ui.set_subtitle(self.names[self.level])
self.ui.set_text(status.phone_item[self.level])
self.update_automata()
def activate_menu2(self):
self.level -= 1
if self.level == 0:
status.save_callback_other = None
if self.level >= 0:
self.ui.set_subtitle(self.names[self.level])
text = status.phone_item[self.level]
self.ui.set_text(text)
self.update_automata()
if text:
self.ui.set_right(_('DELETE'))
self.ui.set_left(_('OK'))
elif self.level == 0:
self.ui.set_left('')
else:
self.ui.set_left(_('NEXT'))
else:
runtime.manager.back_stage()
def save_callback(self):
text = self.ui.get_text()
status.phone_item[self.level] = text
if not phonedb.has_name(text):
phonedb.insert_item(status.phone_item)
return (_('Entry saved in phonebook.'), uiconfig.baloon_phonebook_icon)
return (None, None)
def destroy(self):
status.save_callback_other = None
PhoneBookEntryStage.destroy(self)
class ModifyEntryStage(EntryStage):
# KA: [20070831] hangul lvp-2000
#ka...hangul add 2007.01.25
# automata = ('t9', 'lower', 50), ('123', 'lower', 50), ('123', 'lower', 50), ('multitap', 'lower', 50), ('123','lower', 50)
# if setting.lang == 'Korean':
# automata = ('hangul', 'lower', 50), ('123', 'lower', 50), ('123', 'lower', 50), ('hangul', 'lower', 50), ('123','lower', 50)
# else:
# automata = ('t9', 'lower', 50), ('123', 'lower', 50), ('123', 'lower', 50), ('multitap', 'lower', 50), ('123','lower', 50)
automata = (None, False, 50), (None, 'lower', 50), (None, 'lower', 50), (None, False, 50), ('123','lower', 50)
# -- End of Adding
# KA: [20070831] hangul lvp-2000 ==
name = 'modify entry'
def __init__(self, entry_kind):
title = phonedb.get_sym_name(status.editing_phone_number_index)
title = _('MODIFY')+' - ' + title
max_len = 0
if entry_kind == 0:
subtitle = _('Name')
change_message = _('Name modified')
if entry_kind == 1:
subtitle = _('Number')
change_message = _('Number modified')
elif entry_kind == 2:
subtitle = _('Mobile')
change_message = _('Mobile modified')
elif entry_kind == 3:
subtitle = _('Email')
change_message = _('Email modified')
elif entry_kind == 4:
subtitle = _('Fax')
change_message = _('Fax modified')
self.entry_kind = entry_kind
EntryStage.__init__(self, subtitle, title)
if self.automata[entry_kind][2] > 0:
self.ui.set_max(self.automata[entry_kind][2])
self.change_message = change_message
if entry_kind == 3:
self.ui.entry.email_mode = True
else:
self.ui.entry.email_mode = False
# KA: [2007081] hangul lvp-2000
# vpark 2007.08.28
self.set_fixed_automata(self.automata[entry_kind][0], self.automata[entry_kind][1])
# if self.automata[entry_kind][0] == '123':
# self.set_fixed_automata(self.automata[entry_kind][0], self.automata[entry_kind][1])
# else:
# if entry_kind == 0:
# self.ui.set_automata(self.automata[3][0], self.automata[3][1])
# else:
# self.ui.set_automata(self.automata[entry_kind][0], self.automata[entry_kind][1])
# KA: [2007081] hangul lvp-2000 ==
self.orig_value = phonedb.get_item(status.editing_phone_number_index)[entry_kind]
self.ui.set_text(self.orig_value)
self.ui.set_left(_('OK'))
def show(self):
EntryStage.show(self)
if self.entry_kind in (0, 3):
new_value = self.ui.get_text()
if self.orig_value == new_value:
self.ui.set_left(_('OK'))
elif len(new_value.replace(' ', '')) <= 0 and self.entry_kind == 0:
self.ui.set_left(' ')
else:
self.ui.set_left(_('SAVE'))
def handle_key(self, key):
ret = EntryStage.handle_key(self, key)
if ret and self.is_active() and not self.ui.is_t9_add_word_mode():
new_value = self.ui.get_text()
if self.entry_kind == 0 and (new_value == '' or len(new_value.replace(' ', '')) <= 0):
#Name
self.ui.set_left('')
else:
if self.orig_value == new_value:
self.ui.set_left(_('OK'))
else:
self.ui.set_left(_('SAVE'))
return ret
def activate_menu1(self):
new_value = self.ui.get_text()
if self.entry_kind == 0 and (new_value == '' or len(new_value.replace(' ', '')) <= 0):
return
if self.entry_kind == 3 and new_value and not self.is_valid_email():
runtime.manager.stack_stage(PhonebookNotifyStage(_('Not valid Email address')))
return
if self.orig_value == new_value:
stage = PhonebookNotifyStage(_('No change'))
else:
# name 중복 체크
if self.entry_kind == 0 and new_value.lower() != self.orig_value.lower() and phonedb.has_name(new_value):
status.phonebook_save_stage_name = 'modify entry'
item = phonedb.get_item(status.editing_phone_number_index)
status.phone_item = phonedb.new_item(item)
status.phone_item.name = new_value
stage = NameConflictStage()
runtime.manager.stack_stage(stage)
return
item = phonedb.get_item(status.editing_phone_number_index)
item[self.entry_kind] = new_value
# 무조건 refresh
list_stage = runtime.manager.find_stage('phone list')
list_stage = list_stage or runtime.manager.find_stage('modify list')
phonedb.sort()
if list_stage:
list_stage.refresh_lists()
status.editing_phone_number_index = phonedb.find_by_item(item)
#assert(status.editing_phone_number_index >= 0)
phonedb.save()
stage = PhonebookNotifyStage(self.change_message)
runtime.manager.change_stage(stage)
class ModifyCallTypeStage(ListStage):
def __init__(self, focus):
self.title = _('MODIFY CALL TYPE')
self.choice = _('Voice call'), _('Video call'), _('INT Voice call'), _('INT Video call')
ListStage.__init__(self)
self.ui.create_icon_column(uiconfig.pb_list_icon_x, uiconfig.list_icon_calltypes)
self.ui.set_focus(focus)
def activate(self, index):
item = phonedb.get_item(status.editing_phone_number_index)
call_type = int(item.call_type or '0')
if index != call_type:
message = _('Call type modified!')
item.call_type = str(index)
phonedb.save()
liststage = runtime.manager.find_stage('phone list') or runtime.manager.find_stage('modify list')
if liststage: liststage.refresh_lists()
# refresh_lists 후에 0이 된 index 를 다시 세팅
status.editing_phone_number_index = phonedb.find_by_item(item)
else:
message = _('No change')
stage = PhonebookNotifyStage(message)
runtime.manager.change_stage(stage)
class ModifyImageOptionStage(ListStage):
icon = uiconfig.phonebook_icon
def __init__(self):
self.title = _('OPTIONS')
self.choice = _('Replace'), _('Delete')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
import images
runtime.manager.stack_stage(images.ImagesForPhonebookStage)
else:
def yes():
def cb():
runtime.manager.back_stage('modify kind')
item = phonedb.get_item(status.editing_phone_number_index)
phonedb.update_snapshot(item, '')
phonedb.save()
stage = PhonebookNotifyStage(_('No image assigned'), cb)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Remove this image?'), yes, no, '', uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
class ModifyImageGalleryStage(Stage):
# FIXME: 이 것은 실제로 Gallery가 아니라 한 그림만 보여주는 화면임.
# Phase2 13
def __init__(self, photo_type, image_file):
title = _('CURRENT IMAGE')
fname = image_file.split('/')[-1]
fname = fname[:fname.rfind('.')]
fname = fname.replace('taken_', '')
fname = fname.replace('wallpaper_', '')
fname = fname.replace('picture_', '')
size = utils.get_size_kb(image_file)
fileinfo = fname + "[%dKB]" % size
self.ui = baseui.GalleryUI(_('OPTIONS'), _('BACK'), title, fileinfo)
self.ui.set_preview(image_file)
self.ui.window_title.text = fileinfo
self.ui.show_arrow(False)
def handle_key(self, key):
if key == config.Menu1:
runtime.manager.stack_stage(ModifyImageOptionStage)
return True
elif key == config.Menu2:
def cb():
runtime.manager.back_stage()
stage = NotifyStage(_('No change'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
return True
return False
import sounds
class MelodyNewStage(sounds.SoundsStage):
title = _('ASSIGN MELODY')
def __init__(self):
status.melody_editing = True
sounds.SoundsStage.__init__(self)
status.supervision_not_allowed = 1
def destroy(self):
status.melody_editing = False
sounds.SoundsStage.destroy(self)
status.supervision_not_allowed = 0
class CurrentMelodyOptionStage(ListStage):
icon = uiconfig.phonebook_icon
def __init__(self):
self.title = _('OPTIONS')
self.choice = _('Replace'), _('Delete')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
stage = MelodyNewStage()
runtime.manager.stack_stage(stage)
else:
def yes():
def cb():
runtime.manager.back_stage('modify kind')
stage = NotifyStage(_('No melody assigned'), uiconfig.baloon_phonebook_icon, cb)
item = phonedb.get_item(status.editing_phone_number_index)
item.melody = ''
phonedb.save()
runtime.manager.stack_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Remove this melody?'), yes, no, '', uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
class _CurrentMelodyStage(Stage):
#Phase2 page 14
def __init__(self, melody):
status.supervision_not_allowed = 1
self.player_pid = None
audio_type = utils.audio_type(melody)
title = {'ring':_("VIDEOPHONE'S MELODIES"), 'recorded':_("AUDIO GALLERY"),
'poly': _("POLYPHONIC MELODIES"), 'other': _("OTHER MELODY")}[audio_type]
name = melody.split('/')[-1]
last_dot = name.rfind('.')
if last_dot:
name = name[:last_dot]
name = "%s [%dKB]" % (name, utils.get_size_kb(melody))
name, font = utils.resize_text(name, uiconfig.current_melody_text_width, uiconfig.current_melody_font2, True)
self.ui = ui.CurrentMelodyUI(title, name, font)
self.melody = melody
def handle_key(self, key):
if key == config.Menu1:
stage = CurrentMelodyOptionStage
runtime.manager.stack_stage(stage)
elif key == config.Menu2:
def cb():
runtime.manager.back_stage('modify kind')
stage = NotifyStage(_('No change'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
else:
return False
return True
def show(self):
if status.phone_status == status.Disconnected:
#통화중에는 state가 꼬인다
self.player_pid = utils.player.play(self.melody)
Stage.show(self)
def destroy(self):
if status.phone_status == status.Disconnected:
utils.player.stop(self.player_pid)
Stage.destroy(self)
status.supervision_not_allowed = 0
def hide(self):
if status.phone_status == status.Disconnected:
utils.player.stop(self.player_pid)
Stage.hide(self)
def CurrentMelodyStage():
item = phonedb.get_item(status.editing_phone_number_index)
if item.melody:
melody = item.melody
import os
if os.access(melody, os.R_OK):
stage = _CurrentMelodyStage(melody)
return stage
item.melody = ''
phonedb.save()
liststage = runtime.manager.find_stage('phone list') or runtime.manager.find_stage('modify list')
stage = MelodyNewStage()
return stage
def CurrentSnapshotStage():
item = phonedb.get_item(status.editing_phone_number_index)
if item.snapshot:
snapshot = item.snapshot
# 알 수 없는 이유로 인한 파일이 존재 하지 않을때
# assign 되어 있는 정보를 지우고 assign 되지 않은 것처럼
import os
if not os.access(snapshot, os.R_OK):
item.snapshot = ''
phonedb.save()
import images
return images.ImagesForPhonebookStage()
fname = snapshot[snapshot.rfind('/')+1:]
image_type = fname.split('_')[0]
return ModifyImageGalleryStage(image_type, snapshot)
import images
return images.ImagesForPhonebookStage()
class ModifyKindStage(ListStage):
#Phase2 Page 11
name = 'modify kind'
def __init__(self):
self.title = _('MODIFY')
if status.phonebook_in_calling:
self.choice = _('Name'),_('Number'),_('Mobile'),_('Email'), _('Fax'), _('VIP')
else:
self.choice = _('Name'),_('Number'),_('Mobile'),_('Email'), _('Fax'), _('Melody'), _('VIP'), _('Image')
ListStage.__init__(self)
if status.phonebook_in_calling:
self.ui.create_icon_column( uiconfig.pb_list_icon_x, (uiconfig.list_icon_name, uiconfig.list_icon_normal, \
uiconfig.list_icon_mobile, uiconfig.list_icon_email, \
uiconfig.list_icon_fax, uiconfig.list_icon_vip) )
else:
self.ui.create_icon_column( uiconfig.pb_list_icon_x, (uiconfig.list_icon_name, uiconfig.list_icon_normal, \
uiconfig.list_icon_mobile, uiconfig.list_icon_email, \
uiconfig.list_icon_fax, uiconfig.list_icon_melody, \
uiconfig.list_icon_vip, uiconfig.list_icon_image, None) )
def show(self):
title = phonedb.get_sym_name(status.editing_phone_number_index)
title = _('MODIFY')+' - ' + title
self.ui.set_title(title)
ListStage.show(self)
def activate(self, index):
if index in (0, 1, 2, 3, 4):
stage = ModifyEntryStage(index)
runtime.manager.stack_stage(stage)
elif index == 5:
if status.phonebook_in_calling:
self.handle_vip_menu()
return
self.handle_melody_menu()
elif index == 6:
self.handle_vip_menu()
elif index == 7:
self.handle_image_menu()
def handle_image_menu(self):
stage = CurrentSnapshotStage()
runtime.manager.stack_stage(stage)
def handle_melody_menu(self):
stage = CurrentMelodyStage()
runtime.manager.stack_stage(stage)
def handle_call_type_menu(self):
item = phonedb.get_item(status.editing_phone_number_index)
call_type = int(item.call_type or '0')
stage = ModifyCallTypeStage(call_type)
runtime.manager.stack_stage(stage)
def handle_vip_menu(self):
# Phase2 Page 15
item = phonedb.get_item(status.editing_phone_number_index)
if item.vip:
def yes():
item.vip = ''
phonedb.save()
liststage = runtime.manager.find_stage('phone list') or runtime.manager.find_stage('modify list')
stage = NotifyStage(_('Deleted from VIP list'), uiconfig.baloon_pbook_vip_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
icon = uiconfig.baloon_pbook_vip_icon
stage = YesNoStage(_('Already in VIP list.')+'\n' +_('Remove?'),\
yes, no, '', icon)
else:
item.vip = 'true'
phonedb.save()
liststage = runtime.manager.find_stage('phone list') or runtime.manager.find_stage('modify list')
stage = NotifyStage(_('Set as VIP.'), uiconfig.baloon_pbook_vip_icon)
runtime.manager.stack_stage(stage)
class CallHistoryStage(ListStage):
def __init__(self):
self.title = _('CALL HISTORY')
self.choice = _('Received call'), _('Dialed call'), _('Missed call'), _('Delete all calls')
ListStage.__init__(self)
def activate(self, index):
import calllog
if index == 3:
stage = calllog.CallDeleteYesNoStage(index=3)
runtime.manager.stack_stage(stage)
return
stage = calllog.get_stage(index)
runtime.manager.stack_stage(stage)
return
class ModifyStage(EntryStage):
#Phase2 Page 11
def __init__(self):
EntryStage.__init__(self, _('Name'), _('MODIFY'), left=_('OK'))
self.ui.set_max(config.max_pb_name)
# KA: [20070831] hangul lvp-2000
# vpark 2006.08.28 automata
self.ui.set_fixed_automata(None, False)
#ka...hangul add 2007.01.25
# self.ui.set_automata('multitap', 'lower')
# if setting.lang == 'Korean':
# self.ui.set_automata('hangul', False)
# else:
# self.ui.set_automata('multitap', 'lower')
# --- End of Adding
# KA: [20070831] hangul lvp-2000 ==
def activate_menu1(self):
# 'Find'
text = self.ui.get_text()
focus = phonedb.find_by_name_near(text)
stage = ModifyListStage(focus)
runtime.manager.change_stage(stage)
def activate_menu2(self):
runtime.manager.back_stage()
def handle_key(self, key):
if key == 'Up':
stage = ModifyListStage(0)
runtime.manager.change_stage(stage)
return True
elif key == 'Down':
stage = ModifyListStage(-1)
runtime.manager.change_stage(stage)
return True
else:
return EntryStage.handle_key(self, key)
class DeleteListStage(PhoneListBase):
title = _('PHONEBOOK')
def __init__(self, focus):
PhoneListBase.__init__(self, focus)
self.ui.set_left(_('DELETE'))
self.ui.set_right(_('BACK'))
def get_phonelist(self):
return range(phonedb.count()), phonedb.get_names()
def activate(self, index):
status.editing_phone_number_index = index
def yes():
phonedb.remove(index)
stage = PhonebookNotifyStage(_('Entry deleted'))
if phonedb.is_empty():
if status.phonebook_in_calling:
pbstage = runtime.manager.find_stage('phonebook')
if pbstage:
runtime.manager.back_stage('phonebook')
runtime.manager.stack_stage(stage)
else:
phonelist = runtime.manager.find_stage('phone list')
if phonelist:
runtime.manager.back_stage('phone list')
runtime.manager.back_stage()
runtime.manager.stack_stage(stage)
else:
runtime.manager.stack_stage(stage)
else:
if config.stage_debug:
print self,'now list is empty'
print 'current back stage', runtime.manager.back
pbstage = runtime.manager.find_stage('phonebook')
if pbstage:
if config.stage_debug:
print self, 'got previous phonebook'
runtime.manager.back_stage('phonebook')
runtime.manager.change_stage(PhoneBookEmptyStage)
runtime.manager.stack_stage(stage)
else:
phonelist = runtime.manager.find_stage('phone list')
if phonelist:
if config.stage_debug:
print self, '***********got phone list stage'
runtime.manager.back_stage('phone list')
runtime.manager.back_stage()
runtime.manager.stack_stage(stage)
else:
if config.stage_debug:
print self, '*************entry deleted but not phonebook not phonelist stage'
runtime.manager.stack_stage(stage)
else:
runtime.manager.change_stage(stage)
self.refresh_lists()
def no():
runtime.manager.back_stage()
status.editing_phone_number_index = -1
icon = uiconfig.baloon_phonebook_icon
stage = YesNoStage(_('Delete this entry?'), yes, no, \
'', icon)
runtime.manager.stack_stage(stage)
class PhonebookDeleteStage(EntryStage):
#Phase2 Page 16
def __init__(self):
EntryStage.__init__(self, _('Name'), _('DELETE'), left=_('OK'))
self.ui.set_max(config.max_pb_name)
# KA: [20070831] hangul lvp-2000
# vpark 2006.08.28 automata
self.ui.set_fixed_automata(None, False)
#ka...hangul add 2007.01.25
# self.ui.set_automata('multitap', 'lower')
# if setting.lang == 'Korean':
# self.ui.set_automata('hangul', False)
# else:
# self.ui.set_automata('multitap', 'lower')
# --- End of Adding
# KA: [20070831] hangul lvp-2000 ==
def activate_menu1(self):
# 'Find'
text = self.ui.get_text()
focus = phonedb.find_by_name_near(text)
stage = DeleteListStage(focus)
runtime.manager.change_stage(stage)
def handle_key(self, key):
if key == 'Up':
stage = DeleteListStage(0)
runtime.manager.change_stage(stage)
return True
elif key == 'Down':
stage = DeleteListStage(-1)
runtime.manager.change_stage(stage)
return True
else:
return EntryStage.handle_key(self, key)
class VIPEmptyStage(Stage):
# Phase2 Page 17
def __init__(self):
self.ui = baseui.BaloonMessageUI(_('ADD'), _('BACK'), '', uiconfig.baloon_pbook_vip_icon, _('VIP list empty'))
def handle_key(self, key):
if key == config.Menu1:
stage = VIPAddStage
runtime.manager.change_stage(stage)
elif key == config.Menu2:
runtime.manager.back_stage()
else:
return False
return True
class AddressStage(ListStage):
name = 'address'
icon = uiconfig.ico_PB_address
#titleimage = uiconfig.Third_title_PB_address
def __init__(self):
self.title = _('ADDRESS')
self.choice =_('Addressbook sync'), _('Address upload'), _('Address download'), _('Mobilephone address download')
ListStage.__init__(self)
self.connection = True
self.timer = None
self.result = False
def activate(self, index):
if status.get_regstatus() == 0:
msg = _('Cannot connect download server') + '\n' + _('Please use after register to server')
stage = NotifyStage(msg, uiconfig.setting_voip_icon)
runtime.manager.change_stage(stage)
return
from syncHandler import sync
sync.set_sync_type(index)
if index == 0:
#msg = _('Phonebook sync...')
msg = _('Syncing phonebook...')
elif index == 1:
#msg = _('Uploading phonebook...')
msg = _('Uploading phonebook')
elif index == 2:
#msg = _('Downloading phonebook...')
msg = _('Downloading phonebook')
else:
if (status.get_regstatus_mmi() == 0) and (config.myann_test_flag == False):
stage = NotifyStage(_('Please use after register to server'), icon = uiconfig.video_call_connect_icon)
runtime.manager.stack_stage(stage)
return
cur_profile=profile.profile.get_profile()
if (cur_profile == 1 and not runtime.peek_lanlink()) or \
(cur_profile == 2 and not runtime.peek_wifilink()):
msg = _('Check network connection.')
stage = NotifyStage(msg, icon = uiconfig.video_call_connect_icon)
runtime.manager.stack_stage(stage)
return True
if runtime.myannapp:
import myannapp
if not runtime.myannapp.is_running():
runtime.manager.stack_stage(myannapp.MyAnnStage(config.PHONEBOOK_URL))
from eaHandler import EaHandler
runtime.eaHandler.activateApplication_browser(destination=EaHandler.BROWSER)
return
stage = SyncStage(msg)
runtime.manager.stack_stage(stage)
runtime.evas.render_now()
return
class SyncStage(Stage):
def __init__(self, message='', error=False):
icon = uiconfig.setting_voip_icon
if error:
message = _('Checking phonebook sync')
self.start_timer = utils.Timer(1000, self.sync_result)
else:
self.start_timer = utils.Timer(500, self.sync_start)
self.result = -1
self.result_timer = None
self.cnt = 0
self.ui = baseui.NotifyUI(message, icon)
def sync_start(self):
self.start_timer = None
print '[SYNC] sync start'
# temporary time check
from phonedb import phonedb
count = phonedb.count()
time = 3*1000
# temporary time check ==
from syncHandler import sync
self.result = sync.sync_start_phonebook()
self.result_timer = utils.Timer(time, self.sync_result)
def sync_result(self): ## 성공이든 실패든 syncDB를 일단 다운 받고 상태를 report
from syncHandler import sync
self.result = sync.get_syncResult()
self.cnt += 1
if self.result == 1:# goback timer
if not self.cnt > 20:
return True
self.result_timer = None
code = sync.get_sync_type()
if int(code) == 200:
preMsg = _('phonebook Syncing ')
elif int(code) == 203:
preMsg = _('Uploading phonebook')
else:
preMsg = _('Downloading phonebook')
if self.result == 0:
msg = preMsg + '\n' + _('succeeded!')
self.sync_success_result(msg)
status.sync_result = True
else: # self.result == -1:
msg = preMsg + '\n' + _('failed!')
self.sync_success_result(msg)
status.sync_result = False
self.sync_success_result(msg)
def sync_success_result(self, msg):
setting.set_sync_complete(0) # -- True complete
print '[SYNC] sync complete'
stage = NotifyStage(msg, uiconfig.setting_voip_icon)
runtime.manager.change_stage(stage)
return
def handle_key(self, key):
if key == config.Red:
return False
elif key == 'CLR':
runtime.manager.back_stage()
return True
def destroy(self):
Stage.destroy(self)
self.start_timer = None
self.result_timer = None
class PhoneListStage(PhoneListBase):
title = _('PHONEBOOK')
name = 'phone list'
def __init__(self, focus=0):
self.emergency_number = '112'
if status.phonelist_activate or status.phonebook_in_calling:
status.phonebook_emergency = False
else:
status.phonebook_emergency = True
PhoneListBase.__init__(self, focus)
if status.phonelist_activate or status.phonebook_in_calling:
self.ui.set_left(_('OK'))
else:
self.ui.set_left(_('OPTIONS'))
self.ui.set_right(_('BACK'))
def isemergency(self):
if status.phonelist_activate or status.phonebook_in_calling:
return False
else:
return True
def get_phonelist(self):
return range(phonedb.count()), phonedb.get_names()
def activate(self, index):
if status.phonelist_activate:
status.phonelist_activate(self, index)
elif self.ui.get_focus() == 0 and not status.phonebook_in_calling and not status.phonelist_activate:
if status.phone_status == status.Disconnected:
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
status.set_dial_number(self.emergency_number)
runtime.manager.start_call(self.emergency_number)
else:
stage = ItemOptionStage
runtime.manager.stack_stage(stage)
def show(self):
if status.phonelist_activate or status.phonebook_in_calling:
status.phonebook_emergency = False
else:
status.phonebook_emergency = True
PhoneListBase.show(self)
if self.isemergency():
self.ui.set_focus(status.editing_phone_number_index+1)
else:
self.ui.set_focus(status.editing_phone_number_index)
if status.phonelist_activate:
self.ui.set_left(_('OK'))
elif self.ui.get_focus() == 0 and not status.phonebook_in_calling and not status.phonelist_activate:
self.ui.set_left(_('CALL'))
else:
self.ui.set_left(_('OPTIONS'))
def hide(self):
status.phonebook_emergency = False
PhoneListBase.hide(self)
def destroy(self):
status.phonebook_emergency = False
PhoneListBase.destroy(self)
status.phonelist_activate = None
def handle_key(self, key):
if key in ('Up', 'Down'):
ret = PhoneListBase.handle_key(self, key)
if status.phonelist_activate:
self.ui.set_left(_('OK'))
elif self.ui.get_focus() == 0 and not status.phonebook_in_calling and not status.phonelist_activate:
self.ui.set_left(_('CALL'))
else:
self.ui.set_left(_('OPTIONS'))
return ret
elif key == config.OffHook:
if self.ui.get_focus() == 0:
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
status.emergency_call_number = self.emergency_number
else:
status.emergency_call_number = None
return False
elif key == config.Green:
if self.ui.get_focus() == 0 and status.phone_status == status.Disconnected:
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
status.set_dial_number(self.emergency_number)
runtime.manager.start_call(self.emergency_number)
return True
return PhoneListBase.handle_key(self, key)
else:
return PhoneListBase.handle_key(self, key)
class VIPAddStage(PhoneListBase):
# Phase2 Page 18
title = _('ADD VIP')
def __init__(self, focus = 0):
PhoneListBase.__init__(self, focus)
self.ui.set_left(_('ADD'))
self.ui.set_right(_('BACK'))
def get_phonelist(self):
return phonedb.get_not_vip_list()
def activate(self, index):
item = self.get_phonedb_item(index)
if item.vip == 'true':
def yes():
item.vip = ''
stage = NotifyStage(_('Deleted from VIP list'), uiconfig.baloon_pbook_vip_icon)
runtime.manager.change_stage(stage)
phonedb.save()
self.refresh_lists(False)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Already in VIP list.')+'\n'+_('Remove?'), yes, no, '', uiconfig.baloon_pbook_vip_icon)
runtime.manager.stack_stage(stage)
else:
item.vip = 'true'
phonedb.save()
self.refresh_lists(False)
stage = NotifyStage(_('VIP added'), uiconfig.baloon_pbook_vip_icon)
runtime.manager.change_stage(stage)
class VIPListShowStage(PhoneListBase):
title = _('VIP LIST')
def __init__(self):
PhoneListBase.__init__(self, 0)
self.ui.set_left(_('DELETE'))
def get_phonelist(self):
return phonedb.get_vip_list()
def activate(self, index):
def yes():
item = self.get_phonedb_item(index)
item.vip = ''
phonedb.save()
self.index_list, vip_lists = phonedb.get_vip_list()
if len(vip_lists) == 0:
def cb():
runtime.manager.queue_backward(2)
else:
def cb():
runtime.manager.back_stage()
self.refresh_lists(vip_lists)
stage = NotifyStage(_('Deleted from VIP list'), uiconfig.baloon_pbook_vip_icon, cb)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Delete from VIP list?'), yes, no, '', uiconfig.baloon_pbook_vip_icon)
runtime.manager.stack_stage(stage)
class VIPListStage(ListStage):
# Phase2 Page 17
icon = uiconfig.pbook_vip_icon
def __init__(self):
self.title = _('VIP LIST')
self.choice = _('Show VIP'), _('Add VIP'), _('Delete list')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
# Show VIP
if phonedb.get_vip_list()[1]:
'Show VIP list'
stage = VIPListShowStage()
else:
stage = VIPEmptyStage
runtime.manager.stack_stage(stage)
elif index == 1:
if not phonedb.get_not_vip_list()[1]:
stage = NotifyStage(_('Every entry is VIP'), uiconfig.baloon_pbook_vip_icon)
else:
stage = VIPAddStage(0)
runtime.manager.stack_stage(stage)
elif index == 2:
def yes():
phonedb.delete_vip_list()
def cb():
runtime.manager.queue_backward(2)
stage = NotifyStage(_('List deleted'), uiconfig.baloon_pbook_vip_icon, cb)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Delete all VIPs?'), yes, no, '', uiconfig.baloon_pbook_vip_icon)
runtime.manager.stack_stage(stage)
class ItemOptionStage(ListStage):
name = 'ItemOption'
# Phase2 page 6
icon = uiconfig.phonebook_icon
def __init__(self):
self.title = _('OPTIONS')
self.tag_invite = 0
#self.choice = _('Voice call'), _('Video call'), _('Details'), _('Modify'), _('Delete')
self.choice = _('Edit'), _('Group search'), _('Send message'), _('Delete')
ListStage.__init__(self, self.choice)
#NAME, GROUP, PRIORITY, HOME, MOBILE, OFFICE, EMAIL, SPEED, MELODY, SNAPSHOT = range(10)
def activate(self, index):
if index == 0:
runtime.manager.stack_stage(AddPhoneBookStage)
elif index == 1:
runtime.manager.stack_stage(GroupStage)
elif index == 2:
return
elif index == 3:
self.delete_item()
def delete_item(self):
def yes():
# Delete This Item
name = phonedb.get_sym_name(status.editing_phone_number_index)
phonedb.remove(status.editing_phone_number_index)
# stage = runtime.manager.find_stage('phone list')
# stage.refresh_lists()
stage = PhonebookNotifyStage(_('Entry deleted'))
runtime.manager.back_stage()
runtime.manager.change_stage(stage)
return
if not phonedb.is_empty():
runtime.manager.back_stage('phone list')
runtime.manager.stack_stage(stage)
return
if status.phonebook_in_calling:
pbstage = runtime.manager.find_stage('phonebook')
if pbstage:
runtime.manager.back_stage('phonebook')
runtime.manager.stack_stage(stage)
else:
phonelist = runtime.manager.find_stage('phone list')
if phonelist:
runtime.manager.back_stage('phone list')
runtime.manager.back_stage()
runtime.manager.stack_stage(stage)
else:
runtime.manager.stack_stage(stage)
else:
if config.stage_debug:
print self,'now list is empty'
print 'current back stage', runtime.manager.back
pbstage = runtime.manager.find_stage('phonebook')
if pbstage:
if config.stage_debug:
print self, 'got previous phonebook'
runtime.manager.back_stage('phonebook')
runtime.manager.change_stage(PhoneBookEmptyStage)
runtime.manager.stack_stage(stage)
else:
phonelist = runtime.manager.find_stage('phone list')
if phonelist:
if config.stage_debug:
print self, 'got phone list stage'
runtime.manager.back_stage('phone list')
runtime.manager.back_stage()
runtime.manager.stack_stage(stage)
else:
if config.stage_debug:
print self, 'entry deleted but not phonebook not phonelist stage'
runtime.manager.stack_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Delete this entry?'), yes, no, '', uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
# def handle_key(self, key):
# if key == config.Menu1 and self.tag_invite:
# return True
# else:
# return ListStage.handle_key(self, key)
class ModifyListStage(PhoneListBase):
#Phase2 Page 11
title = _('PHONEBOOK')
name = 'modify list'
def __init__(self, focus):
PhoneListBase.__init__(self, focus)
self.ui.set_left(_('MODIFY'))
self.ui.set_right(_('BACK'))
def get_phonelist(self):
return range(phonedb.count()), phonedb.get_names()
def activate(self, index):
#assert status.editing_phone_number_index == index
stage = ModifyKindStage
runtime.manager.stack_stage(stage)
#ka...added 2006.10.12
class DetailInsertStage(ListStage):
name = 'insert list detail'
def __init__(self, item, org_stage=''):
self.item = item
self.org_stage = org_stage
name = item[0] or item[1] or item[2] or item[3]
ListStage.__init__(self, item[1:5], name)
self.ui.create_icon_column( uiconfig.pb_list_icon_x, (uiconfig.list_icon_normal, uiconfig.list_icon_mobile, uiconfig.list_icon_email, uiconfig.list_icon_fax) )
if item.vip:
self.ui.create_icon_column( uiconfig.pb_detail_icon_vip_x, (uiconfig.pb_detail_icon_vip, None, None, None))
if item.melody:
self.ui.create_icon_column( uiconfig.pb_detail_icon_melody_x, (uiconfig.pb_detail_icon_melody, None, None, None) )
if item.snapshot:
self.ui.create_icon_column( uiconfig.pb_detail_icon_snapshot_x, (uiconfig.pb_detail_icon_snapshot, None, None, None))
self.phonebook_hide_index = None
def handle_key(self, key):
if key in ('Up', 'Down'):
ret = ListStage.handle_key(self, key)
focus = self.ui.get_focus()
if focus == 0 or focus == 1:
self.left_name = _('OK')
self.ui.set_left(self.left_name)
else:
self.ui.set_left('')
return ret
elif key == config.Menu1:
focus = self.ui.get_focus()
if focus == 0:
number = self.item[1]
elif focus ==1:
number = self.item[2]
else: return True
if self.org_stage == 0: stage = 'CallForwardingNumberEdit'
elif self.org_stage == 1: stage = 'HideID'
elif self.org_stage == 2: stage = 'SelectiveRejectionNumberEdit'
else: stage = 'DeregisterSelectiveRejectionNumberEdit'
dest = runtime.manager.find_stage(stage)
dest.set_text(number)
runtime.manager.back_stage(stage)
else:
status.editing_phone_number_index = None
return ListStage.handle_key(self, key)
class DetailDialStage(ListStage):
## Phase2 Page 147
name = 'dial list detail'
def __init__(self, item, call_only=False, isvideocall=False):
self.tag_invite = 0
self.left_name = ''
self.isvideocall = isvideocall
self.call_ready = False
offhook_stage = runtime.manager.find_stage('offhook')
enblock_fstage = runtime.manager.find_stage('enblock edit')
if offhook_stage or enblock_fstage:
self.call_ready = True
self.cb = None
name = item[0] or item[1] or item[2] or item[3]
ListStage.__init__(self, item[1:5], name)
self.item = item
self.call_only = call_only
import profile
if profile.ip_mode == 0: # pstn
if status.AnalogOption == True:
if status.videocall_mode == status.VideoCallConnected:
self.left_name = ''
self.ui.set_left('')
elif status.business_call_status == status.OneCallConnected or \
status.business_call_status == status.TwoCallOneDialing:
if item[1]:
self.left_name = _('CALL')
self.ui.set_left(self.left_name)
elif name:
self.left_name = _('CALL')
self.ui.set_left('')
else:
self.left_name = ''
self.ui.set_left('')
else:
self.left_name = ''
self.ui.set_left('')
else:
if item[1]:
self.left_name = _('CALL')
self.ui.set_left(self.left_name)
elif name:
self.left_name = _('CALL')
self.ui.set_left('')
else:
self.left_name = ''
self.ui.set_left('')
else:
if status.first_video_mode == status.VideoIdle and \
status.second_video_mode == status.VideoIdle:
if item[1]:
self.left_name = _('CALL')
self.ui.set_left(self.left_name)
elif name:
self.left_name = _('CALL')
self.ui.set_left('')
else:
self.left_name = ''
self.ui.set_left('')
elif status.first_video_mode != status.VideoIdle and \
status.second_video_mode != status.VideoIdle:
self.left_name = ''
self.ui.set_left('')
elif status.get_video_mode(status.active_call_index) < 7: # Video
self.left_name = ''
self.ui.set_left('')
else:
if item[1]:
self.left_name = _('CALL')
self.ui.set_left(self.left_name)
elif name:
self.left_name = _('CALL')
self.ui.set_left('')
else:
self.left_name = ''
self.ui.set_left('')
self.ui.create_icon_column( uiconfig.pb_list_icon_x, (uiconfig.list_icon_normal, uiconfig.list_icon_mobile, uiconfig.list_icon_email, uiconfig.list_icon_fax) )
if item.vip:
self.ui.create_icon_column( uiconfig.pb_detail_icon_vip_x, (uiconfig.pb_detail_icon_vip, None, None, None))
if item.melody:
self.ui.create_icon_column( uiconfig.pb_detail_icon_melody_x, (uiconfig.pb_detail_icon_melody, None, None, None) )
if item.snapshot:
self.ui.create_icon_column( uiconfig.pb_detail_icon_snapshot_x, (uiconfig.pb_detail_icon_snapshot, None, None, None))
self.phonebook_hide_index = None
def show(self):
if self.phonebook_hide_index:
status.editing_phone_number_index = self.phonebook_hide_index
ListStage.show(self)
def handle_key(self, key):
if key == config.Menu1 and self.tag_invite:
return True
# eicho add 06.04.12
if key == config.OffHook and status.screensaver_activated_byhook :
#status.screensaver_activated_byhook = False
print 'BLOCKING CALL during SCREENSAVER!!! (3)'
return False
# eicho end.
roxia_event('video_mode@@@@@@@@@', status.first_video_mode, status.second_video_mode)
import profile
if (profile.ip_mode == 0 and status.AnalogOption == 0) or \
(profile.ip_mode == 1 and status.first_video_mode == status.VideoIdle and \
status.second_video_mode == status.VideoIdle):
# Green key, OffHook 를 누를 시에 call 메뉴를 누른 것과 동작이 같음
if key in (config.Green, config.Video) and self.left_name == _('CALL') and self.ui.left == _('CALL'):
if key == config.Video:
status.videocall_byuser = True
else:
status.videocall_byuser = False
if self.cb:
return False
self.activate(self.ui.get_focus())
return True
elif key == config.OffHook and self.left_name == _('CALL') and self.ui.left == _('CALL'):
if self.cb:
return False
if status.modem_audio_state == status.SPK:
runtime.dspg.change_to_handset()
status.set_modem_audio_state(status.HS)
if profile.ip_mode == 0:
runtime.dspg.set_state(runtime.dspg.ST_HS_OFFHK)
self.activate(self.ui.get_focus())
return True
elif key == config.OffHook:
if not self.call_ready:
status.videocall_byuser = False
status.editing_phone_number_index = -1
return False
elif key in (config.Green, config.Video) and self.call_ready:
if status.modem_audio_state == status.SPK:
return True
else:
return False
elif key in (config.Green, config.Video):
status.editing_phone_number_index = -1
ret = ListStage.handle_key(self, key)
if key in ('Up', 'Down'):
focus = self.ui.get_focus()
if focus in (0, 1) and self.item[focus+1]:
self.ui.set_left(self.left_name)
elif focus == 2 and self.item[focus+1] and not self.call_only:
from profile import profile
if 0 != profile.get_profile() and not self.call_ready:
self.ui.set_left(_('WRITE'))
else:
self.ui.set_left('')
else:
self.ui.set_left('')
return ret
else:
if key == config.Menu1 and self.left_name == _('CALL'):
roxia_event('video_mode@@@@@@@@@', status.first_video_mode, status.second_video_mode)
if profile.ip_mode == 0:
if status.videocall_mode == status.VideoCallConnected:
return True
elif status.business_call_status == status.TwoCallOneDialing or \
status.business_call_status == status.OneCallConnected:
self.activate(self.ui.get_focus())
return True
else:
return True
else:
if (status.first_video_mode != status.VideoIdle and \
status.second_video_mode != status.VideoIdle):
return True
else:
self.activate(self.ui.get_focus())
return True
elif key == config.Menu2:
return ListStage.handle_key(self, key)
ret = ListStage.handle_key(self, key)
if key in ('Up', 'Down'):
focus = self.ui.get_focus()
if focus in (0, 1) and self.item[focus+1]:
self.ui.set_left(self.left_name)
elif focus == 2 and self.item[focus+1] and not self.call_only:
from profile import profile
if 0 != profile.get_profile() and not self.call_ready:
self.ui.set_left(_('WRITE'))
else:
self.ui.set_left('')
else:
self.ui.set_left('')
return ret
return False
def activate(self, index):
roxia_event('DetailDialStage.activate()')
if self.left_name == '': # wrong one!
return
#ka...slim 2007.05.22 CallHeld당하면 NewCall을 할 수 없다.
if status.get_held_flag(status.active_call_index) == True and index in (0, 1) and self.item[index+1]:
stage = NotifyStage(_('Service not available.'), icon = uiconfig.baloon_terminated_icon)
runtime.manager.stack_stage(stage)
return
#ka...slim 2007.05.18 CallConnected된 상대에게는 call 할 수 없도록
self.held_number = status.display_caller_number(status.active_call_index)
if self.item[index+1] == self.held_number:
import options
runtime.manager.stack_stage(options.NotifyMessageBackToOneCallStage(_('Cannot dial connected number.')))
return
import profile
if profile.ip_mode == 0 and status.AnalogOption == 1 and \
(status.business_call_status == status.TwoCallOneDialing or \
status.business_call_status == status.OneCallConnected):
if index in (0, 1) and self.item[index+1]:
roxia_event('DetailDialStage.activate(), index(0,1)')
status.editing_phone_number_index = -1
number = self.item[index+1]
if status.videocall_mode == status.VideoCallConnected:
return
elif status.business_call_status == status.OneCallConnected:
status.save_current_call_status()
status.toggle_active_call()
status.clear_current_call_status()
status.dial_number = number
status.save_current_call_status()
import options
runtime.manager.stack_stage(options.PSTNTwoCallOneHoldStage)
elif status.business_call_status == status.TwoCallOneDialing:
status.dial_number = number
import options
runtime.manager.stack_stage(options.PSTNSecondCallEnblockEditStage)
runtime.manager.stage.auto_dial()
return
if profile.ip_mode == 0 and status.phone_status not in (status.Disconnected, status.Dialing):
roxia_event('DetailDialStage.activate(), phone_status check1')
if status.phone_status != status.VoiceConnected:
roxia_event('DetailDialStage.activate(), phone_status != VoiceConnected')
return
if index in (0, 1) and self.item[index+1]:
roxia_event('DetailDialStage.activate(), index(0,1)')
status.editing_phone_number_index = -1
number = self.item[index+1]
if status.dial_number:
roxia_event('DetailDialStage.activate(), dial_number TRUE, set_dial_number')
status.set_dial_number(status.dial_number + number)
runtime.dspg.send_dtmf(number, False)
runtime.manager.back_stage('connected')
runtime.manager.stage.update_number()
return
if index in (0, 1) and self.item[index+1]:
roxia_event('DetailDialStage.activate(), start_call')
status.editing_phone_number_index = -1
if self.isvideocall:
runtime.manager.start_call(self.item[index+1], None, True)
return
else:
from vdcisetting import vdci_setting
tel_num = status.telnum or vdci_setting.tel_num
if status.first_video_mode == status.VideoIdle and \
status.second_video_mode == status.VideoIdle:
if self.item[index+1] == tel_num:
from model import CannotDialNotifyStage
runtime.manager.stack_stage(CannotDialNotifyStage)
return
runtime.manager.start_call(self.item[index+1])
elif status.business_call_status == status.TwoCallOneDialing:
# second call dialing stage
if self.item[index+1] == tel_num:
from model import CannotDialNotifyStage
runtime.manager.stack_stage(CannotDialNotifyStage)
return
status.dial_number = self.item[index+1]
if runtime.manager.check_call_barring(status.dial_number, False):
status.set_current_call_status()
import options
runtime.manager.stack_stage(options.NotifyMessageBackToOneCallStage(_('Number blocked.')))
else:
import options
runtime.manager.stack_stage(options.SecondCallConnectingStage)
return
else:
status.clear_current_call_status()
if self.item[index+1] == tel_num:
status.set_current_call_status()
from model import CannotDialNotifyStage
runtime.manager.stack_stage(CannotDialNotifyStage)
return
status.dial_number = self.item[index+1]
if runtime.manager.check_call_barring(status.dial_number, False):
status.set_current_call_status()
import options
runtime.manager.stack_stage(options.NotifyMessageBackToOneCallStage(_('Number blocked.')))
else:
self.invite_request()
return
elif index == 2 and self.item[index+1] and not self.call_only and not self.call_ready:
# RHC / [20061121_1]
if status.now_sending_email == True:
runtime.manager.stack_stage(NotifyStage(_('Sending IP email')+'...', uiconfig.baloon_email_icon))
return
# RHC / [20061121_1]--
from ipemailstage import IpEmailStage
from message import IpEmailInputPassEdit, UserAccountSelectListStage
from profile import profile
if 0 != profile.get_profile():
status.email_address = self.item[index+1]
if 1 < len(setting.email_account):
stage = UserAccountSelectListStage
else:
if 1 == len(setting.email_account):
setting.set_defaultaccount(0)
if setting.email_password:
stage = IpEmailStage
else:
stage = IpEmailInputPassEdit
else:
self.phonebook_hide_index = status.editing_phone_number_index
status.editing_phone_number_index = -1
stage = IpEmailStage
runtime.manager.stack_stage(stage)
def invite_request(self):
status.business_option_status = status.CallHoldOption
self.tag_invite = utils.Timer(config.timeoutInvite, self.invite_error)
status.release_audio_mute() # vpark 06.02.09
# hcryoo : [20070518_2]
status.set_hold_flag(status.active_call_index)
# hcryoo : [20070518_2]==
runtime.vdci_send_mesg(code1=config.MESG_CALL_HOLD, code2=config.MESG_CALL_HOLD_ACTIVATE)
def invite_sucessed(self):
self.tag_invite = 0
import options
runtime.manager.stack_stage(options.SecondCallConnectingStage)
def invite_error(self):
self.tag_invite = 0
# hang up
import options
stage = options.HangupStage(_('Server not responding.')+'\n'+_('Audio call terminated.'))
runtime.manager.stack_stage(stage)
# RHC / [20061118_5]
def destroy(self):
status.email_address = None
ListStage.destroy(self)
# RHC / [20061118_5] --
class PhoneDialListStage(PhoneListBase):
### Phase2 147: offhook에서 phonebook을 불렀을때 나오는 화면
### Phase2 149: Down key에의해 생기는 것
title = _('PHONEBOOK')
name = 'dial list'
def __init__(self, focus, for_call=True):
self.for_call = for_call
status.phonebook_emergency = True
self.call_ready = False
fstage1 = runtime.manager.find_stage('offhook')
fstage2 = runtime.manager.find_stage('enblock edit')
if fstage1 or fstage2:
self.call_ready = True
PhoneListBase.__init__(self, focus)
self.ui.set_left(_('DETAILS'))
self.ui.set_right(_('BACK'))
self.update_caption()
self.emergency_number = '112'
def isemergency(self):
return True
def hide(self):
status.phonebook_emergency = False
PhoneListBase.hide(self)
def destroy(self):
status.phonebook_emergency = False
PhoneListBase.destroy(self)
def show(self):
status.phonebook_emergency = True
status.videocall_byuser = False
PhoneListBase.show(self)
def get_phonelist(self):
if self.for_call:
return phonedb.get_list_for_call()
else:
choice = phonedb.get_names()
index_lists = range(len(choice))
return index_lists, choice
def update_caption(self):
if len(self.phonedb_indexes) == 0 or not self.for_call:
return
if self.ui.get_focus() == 0:
self.ui.set_left(_('CALL'))
elif not self.call_ready:
self.ui.set_left(_('DETAILS'))
else:
item = phonedb.get_item(status.editing_phone_number_index)
if item[1] and item[2]:
self.ui.set_left(_('DETAILS'))
else:
self.ui.set_left(_('CALL'))
def handle_key(self, key):
if self.ui.get_focus() != 0:
item = phonedb.get_item(status.editing_phone_number_index)
if key == config.OffHook:
if self.ui.get_focus() == 0:
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
status.emergency_call_number = self.emergency_number
else:
status.emergency_call_number = None
return False
if key in (config.Green, config.Video) and self.ui.get_focus() == 0:
if key == config.Video:
return True
if status.phone_status == status.Disconnected:
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
runtime.manager.start_call('112')
return True
# MMI p5: 여러 번호를 가지고 있을시에는 green 의 동작이 menu1 이랑 같다.
if key in (config.Green, config.Video) and not self.call_ready:
return True
if key in (config.Green, config.Video) and self.call_ready:# and item[1] and item[2]:
if key == config.Video:
status.videocall_byuser = True
else:
status.videocall_byuser = False
self.activate(0)
return True
ret = PhoneListBase.handle_key(self, key)
if ret and key in ('Up', 'Down'):
self.update_caption()
return ret
def activate(self, index):
if self.ui.get_focus() == 0:
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
runtime.manager.start_call('112')
elif not self.call_ready:
#assert status.editing_phone_number_index == self.phonedb_indexes[self.ui.get_focus()]
item = phonedb.get_item(status.editing_phone_number_index)
status.phonebook_emergency = False
stage = DetailDialStage(item, call_only=False)
runtime.manager.stack_stage(stage)
else:
#assert status.editing_phone_number_index == self.phonedb_indexes[self.ui.get_focus()]
item = phonedb.get_item(status.editing_phone_number_index)
if item[1] and item[2]:
if status.phone_status == status.Disconnected:
# idle 상태에서 down키로 들어온 경우 call_only 가 아니다.
status.phonebook_emergency = False
stage = DetailDialStage(item, call_only=False)
else:
status.phonebook_emergency = False
stage = DetailDialStage(item, call_only=True)
runtime.manager.stack_stage(stage)
else:
runtime.manager.start_call(item[1] or item[2])
class GroupStage(ListStage):
name = 'groupstage'
icon = uiconfig.ico_group
#titleimage = uiconfig.title_group
# choice = _('Undefined'), _('Family'), _('Relatives'), _('Friend'), _('Office'), _('School'), _('Etc')
def __init__(self, vm_flag = False):
self.title = _('GROUP')
self.vm_flag = vm_flag
if vm_flag:
self.left = ''
else:
self.left=_('ADD')
self.numbers = 0
self.index = 0
self.right = ''
self.menu3=''
self.names = []
self.load_group()
ListStage.__init__(self, choice = tuple(self.choice), left=self.left, right=self.right, menu3=self.menu3)
def load_group(self):
to_enable_translation = _('Family'), _('Relative'), _('Friend'), _('Office'), _('School'), _('Others') # don't delete this line, this is to help translation system.
self.choice= []
from groupdb import groupdb
names = groupdb.get_group_list()
numbers = groupdb.get_group_total_members()
for i in range(len(names)):
info = "%s [%d]"%(runtime.evas.pre_parse(names[i]), numbers[i])
self.choice.append(info)
self.numbers = numbers
self.names = names
def activate(self, index):
self.index = index
self.ui.set_focus(self.index)
if self.index in range(7):
self.right = ''
self.menu3=''
else:
self.right = _('EDIT')
self.menu3=_('DELETE')
self.ui.set_right(self.right)
self.ui.set_menu3(self.menu3)
def show(self):
self.load_group()
self.change_choice(self.choice)
ListStage.show(self)
# for index
if self.index > len(self.ui.list.labels) -1:
self.index = 0
self.right = ''
self.menu3=''
self.ui.set_focus(self.index)
self.ui.set_right(self.right)
self.ui.set_menu3(self.menu3)
def handle_key(self, key):
if key in ('Up', 'Down'):
ret = ListStage.handle_key(self, key)
self.index = self.ui.get_focus()
if self.index in range(7):
self.right = ''
self.menu3=''
else:
if self.vm_flag:
self.right = _('EDIT')
self.menu3=_('DELETE')
else:
self.right = _('EDIT')
self.menu3=_('DELETE')
self.ui.set_right(self.right)
self.ui.set_menu3(self.menu3)
return ret
if self.numbers[self.index] == 0: # check the number of members in group
block_flag = True
else:
block_flag = False
if key == config.Menu1 and self.left == _('ADD'):
#stage = OptionsGroupStage(self.index)
from groupdb import groupdb
if len(groupdb.db) >= 20:
utils.player.play_effect(config.SETTING_FAILED)
stage = PhonebookNotifyStage(_('Group db is full.'))
runtime.manager.stack_stage(stage)
else:
stage = EditGroupStage(-1)
runtime.manager.stack_stage(stage)
elif key == config.Menu2 and self.right == _('EDIT'):
stage = EditGroupStage(self.index)
runtime.manager.stack_stage(stage)
elif (key == config.Menu3 and self.menu3 == _('DELETE')): # and not block_flag:
#stage = SearchStage(self.index)
stage = DeleteGroupStage(self.index)
runtime.manager.stack_stage(stage)
elif key == 'OK' and block_flag:
stage = PhonebookNotifyStage(_('Group is empty'))
runtime.manager.stack_stage(stage)
elif key == 'OK' and not block_flag:
if self.vm_flag:
stage = SearchStage(self.index, vm_flag=True)
else:
#stage = SearchStage(group_index=self.index, call_flag=True)
stage = SearchStage(self.index)
runtime.manager.stack_stage(stage)
elif key in (config.Menu4, config.Red, config.CLEAR) and self.vm_flag:
runtime.manager.back_stage()
runtime.eaHandler.closePhonebook()
elif key in (config.Menu4, config.Red) and not self.vm_flag:
return ListStage.handle_key(self, key)
else:
ret = ListStage.handle_key(self, key)
return ret
return True
class OptionsGroupStage(ListStage):
name = 'group option'
titleimage = uiconfig.title_phonebook
def __init__(self, index):
self.title = _('GROUP OPTIONS')
self.index = index
if self.index in range(7):
self.default_group = True
self.choice = _('Create'),
else:
self.default_group = False
self.choice = _('Create'), _('Delete'), _('Edit')
ListStage.__init__(self, choice = tuple(self.choice))
def activate(self, index):
if index == 0:
stage = EditGroupStage(-1)
elif index == 1 and not self.default_group:
#stage = YesNoUpdateStage()
stage = DeleteGroupStage(self.index)
runtime.manager.stack_stage(stage)
return True
elif index == 2 and not self.default_group:
stage = EditGroupStage(self.index)
else:
return False
runtime.manager.stack_stage(stage)
class DeleteGroupStage(YesNoStage): # ListStage
def __init__(self, index):
self.index = index
YesNoStage.__init__(self, _('Delete group?'), self.yes_cb, self.no_cb, '', uiconfig.baloon_phonebook_icon)
def yes_cb(self):
from groupdb import groupdb
groupdb.remove(self.index)
from phonedb import phonedb
phonedb.set_group(self.index, 0)
stage = PhonebookNotifyStage(_('Group deleted'))
runtime.manager.change_stage(stage)
def no_cb(self):
runtime.manager.back_stage()
class PhonebookCopyStage(ListStage):
name = 'copyfilestage'
icon = uiconfig.phonebook_icon
def __init__(self):
self.title = _('COPY')
self.choice = _('Copy from SIM'), _('Copy to SIM'), _('Copy to bluetooth')
ListStage.__init__(self)
def activate(self, index):
import sim
if index == 2:
import phonesetting
runtime.btapp.set_default()
runtime.btapp.send_message('20|i')
runtime.manager.stack_stage(phonesetting.BluetoothSearchStage(2))
else:
stage = (sim.CopyFromSIMStage, sim.CopyToSIMStage)[index]
runtime.manager.stack_stage(stage)
#ka...added 2006.10.12
class SearchPhoneBookStage(ListStage):
icon = uiconfig.phonebook_icon
name = 'search phonebook'
def __init__(self, org_stage=''):
self.title = _('PHONEBOOK')
self.choice = _('List'), _('Search')
ListStage.__init__(self, self.choice)
self.org_stage = org_stage
def activate(self, index):
stage = (InsertPhoneListStage, FindStage)[index]
if stage == FindStage:
runtime.manager.stack_stage(FindStage(True, self.org_stage))
else:
runtime.manager.stack_stage(InsertPhoneListStage(org_stage=self.org_stage))
class InsertPhoneListStage(PhoneListBase):
title = _('PHONEBOOK')
name = 'phone list'
def __init__(self, focus=0, org_stage=''):
PhoneListBase.__init__(self, focus)
self.org_stage = org_stage
self.ui.set_left(_('OK'))
self.ui.set_right(_('BACK'))
def get_phonelist(self):
#return range(phonedb.count()), phonedb.get_names()
#ka...phonebook 2006.11.02
return phonedb.get_list_for_call()
def show(self):
PhoneListBase.show(self)
#self.ui.set_focus(status.editing_phone_number_index)
def hide(self):
PhoneListBase.hide(self)
def destroy(self):
PhoneListBase.destroy(self)
def handle_key(self, key):
if key in ('Up', 'Down'):
ret = PhoneListBase.handle_key(self, key)
return ret
elif key == config.Menu1:
from phonedb import phonedb
item = phonedb.get_item(status.editing_phone_number_index)
if item[1] and item[2]:
# multi choice
runtime.manager.stack_stage(DetailInsertStage(item, self.org_stage))
else:
number = item[1] or item[2]
# number 가 하나도 없을 시에는 insert 하지 않음
if not number:
return
if self.org_stage == 0: stage = 'CallForwardingNumberEdit'
elif self.org_stage == 1: stage = 'HideID'
elif self.org_stage == 2: stage = 'SelectiveRejectionNumberEdit'
else: stage = 'DeregisterSelectiveRejectionNumberEdit'
dest = runtime.manager.find_stage(stage)
dest.set_text(number)
runtime.manager.back_stage(stage)
else:
status.editing_phone_number_index = None
return PhoneListBase.handle_key(self, key)
class PhoneBookStage(ListStage):
icon = uiconfig.phonebook_icon
#titleimage = uiconfig.title_phonebook
name = 'phonebook'
def __init__(self):
self.title = _('PHONEBOOK')
#self.choice = _('Phonebook search'), _('Phonebook new'), _('Group setting'), _('Call history'), _('Phonebook delete all')
self.choice = _('Search contacts'), _('New contacts'), _('Group setting'), _('Call log'), _('Delete all')
ListStage.__init__(self, self.choice)
def activate(self, index):
# phonedb max size check
if index == 1 and phonedb.count() >= config.phone_db_size:
stage = PhonebookNotifyStage(_('Memory full'))
runtime.manager.stack_stage(stage)
return
if phonedb.is_empty() and index in (0,5):
runtime.manager.stack_stage(NotifyStage(_('Phonebook empty'), uiconfig.baloon_phonebook_icon))
return
if index == 4:
import menu
stage = menu.CheckPasswordStage(6)
runtime.manager.stack_stage(stage)
return
if index == 3:
import calldb
missed_lists = calldb.get_list('missed')
dialed_lists = calldb.get_list('dialed')
received_lists = calldb.get_list('received')
if (len(missed_lists) == 0) and (len(dialed_lists) == 0) and (len(received_lists) == 0):
stage = NotifyStage(_('Empty call history'), uiconfig.baloon_call_log_icon)
runtime.manager.stack_stage(stage)
return
#stage = (SearchStage, AddPhoneBookStage, AddressStage, GroupStage, CallHistoryStage, PhonebookDeleteStage)[index]
import calllog, callhistory
if index ==3:
stage = callhistory.CallHistoryStage('recent')
else:
#stage = (SearchStage, AddPhoneBookStage, AddressStage, GroupStage, None, DeletePhoneBookStage)[index]
stage = (SearchStage, AddPhoneBookStage, GroupStage, None, DeletePhoneBookStage)[index]
runtime.manager.stack_stage(stage)
class PhoneBookEmptyStage(ListStage):
icon = uiconfig.phonebook_icon
name = 'phonebook empty'
def __init__(self):
self.title = _('PHONEBOOK')
self.choice = (_('Emergency(112)'),)
status.phonebook_emergency = True
status.phonebook_isempty = True
self.number = '112'
ListStage.__init__(self)
self.ui.set_left(_('ADD'))
self.ui.set_right(_('BACK'))
def handle_key(self, key):
if key == config.Menu1:
runtime.manager.stack_stage(PhoneBookAddStage)
elif key == config.Menu2:
runtime.manager.back_stage()
elif key == config.Green:
if status.phone_status == status.VoiceConnected:
if status.dial_number:
status.set_dial_number(status.dial_number + self.number)
runtime.dspg.send_dtmf(self.number, False)
runtime.manager.back_stage('connected')
runtime.manager.stage.update_number()
return
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
runtime.manager.start_call(self.number)
elif key == config.OffHook:
#Roxia Begin yhcho 06.02.06
status.set_service_name(_('Emergency'))
#Roxia End yhcho
status.emergency_call_number = self.number
return False
else:
return False
return True
def show(self):
status.phonebook_emergency = True
ListStage.show(self)
def hide(self):
status.phonebook_emergency = False
ListStage.hide(self)
def destroy(self):
status.phonebook_emergency = False
status.phonebook_isempty = False
ListStage.destroy(self)
class PhoneBookAddStage(ListStage):
icon = uiconfig.phonebook_icon
def __init__(self):
self.title = _('PHONEBOOK')
self.choice1 = (_('Add'),)
self.choice2 = (_('Add'),)
if status.phone_status == status.Disconnected:
self.choice = self.choice1
else:
self.choice = self.choice2
ListStage.__init__(self)
def activate(self, index):
if index == 0:
status.editing_phone_number_index = -1
runtime.manager.stack_stage(AddEntryStage)
elif index == 1:
import sim
stage = sim.CopyFromSIMStage()
runtime.manager.stack_stage(stage)
runtime.evas.render_now()
elif index == 2:
return
def show(self):
ListStage.show(self)
if not phonedb.is_empty():
runtime.manager.pop_stage().destroy()
runtime.manager.change_stage(PhoneBookStage())
class PhoneBookTempEmptyStage(NotifyStage):
def __init__(self, cb=None):
icon = uiconfig.baloon_phonebook_icon
utils.player.play_effect(config.SETTING_FAILED)
NotifyStage.__init__(self, _('Phonebook empty!'), icon, cb)
def handle_key(self, key):
# empty stage 가 떠 있을 경우에는 greenkey(handsfrees) 동작 막음
# 다른 키들은 상관없음
if key == config.Green:
return True
else:
return False
class PhoneBookForCallEmptyStage(NotifyStage):
def __init__(self, cb=None):
icon = uiconfig.baloon_phonebook_icon
NotifyStage.__init__(self, _('Empty call list!'), icon, cb)
def handle_key(self, key):
# empty stage 가 떠 있을 경우에는 greenkey(handsfrees) 동작 막음
# 다른 키들은 상관없음
if key == config.Green:
return True
else:
return False
def phone_item_save():
stage_name = status.phonebook_save_stage_name
if stage_name == 'calllog options':
phonedb.insert_item(status.phone_item)
stage = runtime.manager.find_stage('call list')
stage.refresh_lists()
stage = runtime.manager.find_stage('calllog options')
stage.refresh_lists()
runtime.manager.back_stage(stage_name)
elif stage_name == 'predial options':
phonedb.insert_item(status.phone_item)
runtime.manager.back_stage('enblock edit')
elif stage_name == 'add entry':
stage = runtime.manager.find_stage(stage_name)
stage.ui.set_text(status.phone_item.name)
stage.activate_menu1()
stage.ui.set_left(_('NEXT'))
runtime.manager.back_stage(stage_name)
return
elif stage_name == 'modify entry':
runtime.manager.back_stage(stage_name)
stage = PhonebookNotifyStage(_('Name modified'))
runtime.manager.change_stage(stage)
item = phonedb.get_item(status.editing_phone_number_index)
item[0] = status.phone_item.name
list_stage = runtime.manager.find_stage('phone list')
list_stage = list_stage or runtime.manager.find_stage('modify list')
phonedb.sort()
if list_stage:
list_stage.refresh_lists()
status.editing_phone_number_index = phonedb.find_by_item(item)
#assert(status.editing_phone_number_index >= 0)
phonedb.save()
return
elif stage_name == 'number options':
phonedb.insert_item(status.phone_item)
runtime.manager.back_stage(stage_name)
elif stage_name == 'mmsusenumberstage':
phonedb.insert_item(status.phone_item)
runtime.manager.back_stage(stage_name)
stage = PhonebookNotifyStage(_('Entry saved'))
runtime.manager.stack_stage(stage)
class NameRetryStage(EntryStage):
def __init__(self):
title = _('SAVE IN PHONEBOOK')
if status.phonebook_save_stage_name == 'add entry':
title = _('ADD ENTRY')
elif status.phonebook_save_stage_name == 'modify entry':
title = phonedb.get_sym_name(status.editing_phone_number_index)
EntryStage.__init__(self, _('Name'), title)
self.ui.set_max(config.max_pb_name)
self.orig_name = status.phone_item.name
self.ui.set_text(self.orig_name)
self.ui.set_left('')
# KA: [20070831] hangul lvp-2000
# vpark 2006.08.28 automata
self.ui.set_fixed_automata(None, False)
def handle_key(self, key):
ret = None
if key == config.Menu1:
if self.ui.left == '':
return True
new_name = self.ui.get_text()
if new_name:
status.phone_item.name = new_name
# retry 한 이름이 또 폰북에 있는 경우
if phonedb.has_name(new_name):
stage = NameConflictStage()
runtime.manager.change_stage(stage)
return True
phone_item_save()
else:
ret = EntryStage.handle_key(self, key)
if ret and self.is_active():
new_name = self.ui.get_text()
if self.orig_name == new_name or not new_name:
self.ui.set_left('')
else:
self.ui.set_left(_('OK'))
return ret
class PhoneItemDetailStage(Stage):
def __init__(self, pitem):
self.ui = ui.PhoneItemDetailUI(pitem)
def activate_menu1(self):
stage = NameRetryStage
runtime.manager.change_stage(stage)
def activate_menu2(self):
if status.phonebook_save_stage_name == 'predial options':
runtime.manager.back_stage('enblock edit')
else:
runtime.manager.queue_backward(3)
def handle_key(self, key):
if key == config.Menu1:
self.activate_menu1()
return True
elif key == config.Menu2:
self.activate_menu2()
return True
return False
class DeletePhoneBookStage(YesNoStage): # ListStage
def __init__(self):
YesNoStage.__init__(self, _('Delete all phonebook?'), self.yes_cb, self.no_cb, '', uiconfig.baloon_phonebook_icon)
def yes_cb(self):
from phonedb import phonedb
phonedb.reset()
speeddb.reset()
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = PhonebookNotifyStage(_('Phonebook deleted'))
runtime.manager.change_stage(stage)
def no_cb(self):
runtime.manager.back_stage()
class AddPhoneBookStage(Stage): # ListStage
name = 'addphonebook'
def __init__(self, left=_('SAVE'), right='', menu3=_('KOR'), menu4=_('BACK'), number='', vm_flag=False):
if len(number) > uiconfig.MAX_INPUT_TEL:
self.number = number[:uiconfig.MAX_INPUT_TEL]
else:
self.number = number
self.new_item = False
self.vm_flag = vm_flag
if status.editing_phone_number_index == -1:
status.phone_item = phonedb.new_item()
self.new_item = True
if self.number:
if self.is_mobile():
status.phone_item.mobile = self.number
else:
status.phone_item.home = self.number
# shchun : global automata change
if setting.lang == 'Korean':
menu3=_('KOR')
else:
menu3=_('abc')
# end shchun
self.ui = baseui.AddPhoneBookUI(left, right, '', menu3, menu4)
self.image_dir = None
self.lists = None
# shchun : global automata change
#self.ui.set_fixed_automata(self.ui.list.entrys[0], None, False)
self.ui.set_automata(self.ui.list.entrys[0], 'multitap', 'lower')
if setting.lang == 'Korean':
self.ui.set_automata(self.ui.list.entrys[0], 'hangul', False)
else:
self.ui.set_automata(self.ui.list.entrys[0], 'multitap', 'lower')
debugLogN('*__init__ automata_idx=', self.ui.automata_idx, ', automata=', self.ui.automata)
self.set_menu3()
# end shchun
self.photo_index = 0
self.preview_small()
self.ui.set_focus(0)
self.re_draw = False
self.symbol_stage_timer = None
self.entry_refresh()
self.prority = status.phone_item.prority
def is_mobile(self):
if config.global_version_flag:
return False
if self.number.startswith('010') or \
self.number.startswith('011') or \
self.number.startswith('016') or \
self.number.startswith('017') or \
self.number.startswith('018') or \
self.number.startswith('019'):
return True
else:
return False
def destroy(self):
self.ui.stop_audio()
Stage.destroy(self)
self.symbol_stage_timer = None
def set_menu3(self):
if self.ui.automata[0] == '123': menu3 = '123'
elif self.ui.automata[0] == 'hangul': menu3 = _('KOR')
elif self.ui.automata[0] == 'multitap' and self.ui.automata[1] == 'lower': menu3 = _('abc')
elif self.ui.automata[0] == 'multitap' and self.ui.automata[1] == 'upper': menu3 = _('ABC')
elif self.ui.automata[0] == 'multitap' and self.ui.automata[1] == 'first capital': menu3 = _('Abc')
elif self.ui.automata[0] == 't9' and self.ui.automata[1] == 'lower': menu3 = _('T9abc')
elif self.ui.automata[0] == 't9' and self.ui.automata[1] == 'upper': menu3 = _('T9ABC')
elif self.ui.automata[0] == 't9' and self.ui.automata[1] == 'first capital': menu3 = _('T9Abc')
else: menu3 = _('SYMBOL')
runtime.menu3.set_text(menu3)
if menu3 ==_('SYMBOL'):
# shchun : global automata change
#self.ui.set_fixed_automata(self.ui.list.entrys[0], None, False)
self.ui.set_automata(self.ui.list.entrys[0], 'multitap', 'lower')
if setting.lang == 'Korean':
self.ui.set_automata(self.ui.list.entrys[0], 'hangul', False)
else:
self.ui.set_automata(self.ui.list.entrys[0], 'multitap', 'lower')
self.ui.set_automata(self.ui.list.entrys[self.ui.list.focus], *self.ui.automata)
debugLogN('*__init__ automata_idx=', self.ui.automata_idx, ', automata=', self.ui.automata)
from basemodel import SymbolSelectionStage
runtime.manager.stack_stage(SymbolSelectionStage(self, True))
def update_automata(self):
if self.ui.list.focus not in (0, 2, 3, 4, 6):
runtime.menu3.set_text('')
return
if self.ui.list.focus in (0,6):
#self.ui.set_fixed_automata(self.ui.list.entrys[0], None, False)
self.ui.set_automata(self.ui.list.entrys[self.ui.list.focus], 'multitap', 'lower')
if setting.lang == 'Korean':
self.ui.set_automata(self.ui.list.entrys[self.ui.list.focus], 'hangul', False)
else:
self.ui.set_automata(self.ui.list.entrys[self.ui.list.focus], 'multitap', 'lower')
elif self.ui.list.focus == 2: self.ui.set_fixed_automata(self.ui.list.entrys[2], '123', False)
elif self.ui.list.focus == 3: self.ui.set_fixed_automata(self.ui.list.entrys[3], '123', False)
elif self.ui.list.focus == 4: self.ui.set_fixed_automata(self.ui.list.entrys[4], '123', False)
#elif self.ui.list.focus == 6:
# self.ui.set_fixed_automata(self.ui.list.entrys[6], 'multitap', 'lower')
self.ui.set_automata(self.ui.list.entrys[self.ui.list.focus], *self.ui.automata)
debugLogN('*update_automata automata_idx=', self.ui.automata_idx, ', automata=', self.ui.automata)
self.set_menu3()
# insert symbol
def insert_text(self, text):
focus = self.ui.get_focus()
self.ui.list.entrys[focus].insert_unicode_text(unicode(text, 'utf-8'))
self.ui.list.entrys[focus]._automata.check_start_of_sentance()
#self.update_entry_info()
def delete_char(self):
self.handle_key('\b')
#self.update_entry_info()
def insert_symbol(self, s):
def back_to_symbol():
from basemodel import SymbolSelectionStage
runtime.manager.stack_stage(SymbolSelectionStage(self, True))
self.symbol_stage_timer = None
before_text = self.ui.get_text()
self.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()
#self.symbol_stage_timer = utils.Timer(uiconfig.back_to_symbol_timeout, back_to_symbol)
# insert symbol ==
# test for text align refreshing
def entry_refresh(self):
self.ui.list.entrys[0].set_text(self.ui.list.entrys[0].get_text())
self.ui.list.entrys[0].cursor_start()
self.ui.list.entrys[0].cursor_end()
self.ui.list.entrys[2].set_text(self.ui.list.entrys[2].get_text())
self.ui.list.entrys[3].set_text(self.ui.list.entrys[3].get_text())
self.ui.list.entrys[4].set_text(self.ui.list.entrys[4].get_text())
self.ui.list.entrys[6].set_text(self.ui.list.entrys[6].get_text())
def show(self):
# QA:5-38 이름 입력시 문자 삽입후 커서가 뒤로가는 문제 수정
#self.entry_refresh() # for text align refreshing
self.ui.show()
focus = self.ui.get_focus()
if self.re_draw:
self.ui.set_focus(focus, self.re_draw)
for ent in self.ui.list.entrys:
ent.lostFocus()
self.ui.list.entrys[focus].showFocus()
if config.mmi_debug: print '## focus =', focus
if focus in [2,3,4]:
runtime.rb.set_text(_('KEY SET'))
# fix for QE Defect #27831
if focus == 6:
# symbol 에서 자동으로 한글가는 걸 방지
if self.ui.automata[0] == 'hangul':
self.handle_key(config.Menu3)
self.ui.list.entrys[2].set_text(self.ui.list.entrys[2].get_text())
self.ui.list.entrys[2].lostFocus()
self.ui.list.entrys[3].set_text(self.ui.list.entrys[3].get_text())
self.ui.list.entrys[3].lostFocus()
self.ui.list.entrys[4].set_text(self.ui.list.entrys[4].get_text())
self.ui.list.entrys[4].lostFocus()
self.ui.list.entrys[6].set_text(self.ui.list.entrys[6].get_text())
self.set_menu3()
elif focus == 2 or focus == 3 or focus ==4:
self.ui.list.entrys[0].set_text(self.ui.list.entrys[0].get_text())
self.ui.list.entrys[0].lostFocus()
self.ui.list.entrys[2].set_text(self.ui.list.entrys[2].get_text())
self.ui.list.entrys[2].lostFocus()
self.ui.list.entrys[3].set_text(self.ui.list.entrys[3].get_text())
self.ui.list.entrys[3].lostFocus()
self.ui.list.entrys[4].set_text(self.ui.list.entrys[4].get_text())
self.ui.list.entrys[4].lostFocus()
self.ui.list.entrys[focus].showFocus()
runtime.menu3.set_text('123')
elif focus == 5:
self.ui.list.entrys[0].set_text(self.ui.list.entrys[0].get_text())
self.ui.list.entrys[0].lostFocus()
self.ui.list.entrys[2].set_text(self.ui.list.entrys[2].get_text())
self.ui.list.entrys[2].lostFocus()
self.ui.list.entrys[3].set_text(self.ui.list.entrys[3].get_text())
self.ui.list.entrys[3].lostFocus()
self.ui.list.entrys[4].set_text(self.ui.list.entrys[4].get_text())
self.ui.list.entrys[4].lostFocus()
runtime.menu3.set_text('')
elif focus == 7 or focus == 8:
self.ui.list.entrys[2].set_text(self.ui.list.entrys[2].get_text())
self.ui.list.entrys[2].lostFocus()
self.ui.list.entrys[3].set_text(self.ui.list.entrys[3].get_text())
self.ui.list.entrys[3].lostFocus()
self.ui.list.entrys[4].set_text(self.ui.list.entrys[4].get_text())
self.ui.list.entrys[4].lostFocus()
self.ui.list.entrys[6].set_text(self.ui.list.entrys[6].get_text())
self.ui.list.entrys[6].lostFocus()
self.ui.list.focus_up()
self.ui.list.focus_down()
runtime.menu3.set_text('')
elif focus == 1 or focus == 9 or focus == 10:
runtime.menu3.set_text('')
def hide(self):
self.re_draw = True
self.ui.hide()
for ent in self.ui.list.entrys:
ent.lostFocus()
def save(self):
#'name group prority home mobile office speed email melody snapshot cdate mdate'
#NAME
# GROUP
from groupdb import groupdb
addstage = runtime.manager.find_stage('addphonebook')
if config.mmi_debug: print '## addstage=', addstage
if addstage:
index = groupdb.get_group_index(addstage.ui.list.entrys[1].get_text())
status.phone_item.group = index
# HOME
#status.phone_item.home = addstage.ui.list.entrys[2].get_text()
home = addstage.ui.list.entrys[2].get_text()
pre_home = home
if len(home) > 6:
if not (home[0] == '0' or home[0] == '1'):
pre_home = setting.prefix + home
status.phone_item.home = pre_home
# MOBILE
status.phone_item.mobile = addstage.ui.list.entrys[3].get_text()
# OFFICE
#status.phone_item.office = addstage.ui.list.entrys[4].get_text()
office = addstage.ui.list.entrys[4].get_text()
pre_office = office
if len(office) > 6:
if not (office[0] == '0' or office[0] == '1'):
pre_office = setting.prefix + office
status.phone_item.office = pre_office
# EMAIL
status.phone_item.email = addstage.ui.list.entrys[6].get_text()
else:
index = groupdb.get_group_index(self.ui.list.entrys[1].get_text())
status.phone_item.group = index
home = self.ui.list.entrys[2].get_text()
pre_home = home
if len(home) > 6:
if not (home[0] == '0' or home[0] == '1'):
pre_home = setting.prefix + home
status.phone_item.home = pre_home
status.phone_item.mobile = self.ui.list.entrys[3].get_text()
office = self.ui.list.entrys[4].get_text()
pre_office = office
if len(office) > 6:
if not (office[0] == '0' or office[0] == '1'):
pre_office = setting.prefix + office
status.phone_item.office = pre_office
status.phone_item.email = self.ui.list.entrys[6].get_text()
status.phone_item.speed = self.get_speed()
status.phone_item.melody = self.get_melody()
#status.phone_item.snapshot = self.get_current_file()
status.phone_item.snapshot = self.get_image()
cdate, mdate = self.get_time()
status.phone_item.cdate = cdate
status.phone_item.mdate = mdate
#if config.mmi_debug: print '## before phonedb.db=', phonedb.db
item = status.phone_item
if status.editing_phone_number_index != -1:
phonedb.remove(status.editing_phone_number_index)
phonedb.insert_item(item)
#if config.mmi_debug: print '## after phonedb.db=', phonedb.db
if status.phone_item.home != '': speed_phone_num = status.phone_item.home
elif status.phone_item.mobile != '': speed_phone_num = status.phone_item.mobile
elif status.phone_item.office != '': speed_phone_num = status.phone_item.office
else: speed_phone_num = '1234'
if self.ui.org_speed == '':
speeddb.set_speed_tel_num(status.phone_item.speed, speed_phone_num)
else:
speeddb.change_speed_num(self.ui.org_speed, status.phone_item.speed)
speeddb.set_speed_tel_num(status.phone_item.speed, speed_phone_num)
print 'ka...............5 status.phone_item.prority=', self.prority
if self.prority == '':
self.prority = status.phone_item.prority
if self.prority != '':
if (self.prority == '0' and not status.phone_item.home) or \
(self.prority == '1' and not status.phone_item.mobile) or \
(self.prority == '2' and not status.phone_item.office):
self.prority = status.phone_item.prority
self.ui.update_priority_icon(self.prority)
print 'ka...............4 status.phone_item.prority=', status.phone_item.prority
stage = PhonebookNotifyStage(_('Priority define please.'))
runtime.manager.stack_stage(stage)
return
status.phone_item.prority = self.prority
def after_save():
if self.vm_flag:
runtime.manager.back_stage()
runtime.eaHandler.closePhonebook()
elif runtime.manager.find_stage('addphonebook'):
if config.mmi_debug: print '## addphonbook ok'
runtime.manager.queue_backward(2)
else:
runtime.manager.back_stage()
stage = PhonebookNotifyStage(_('Phonebook saved'), after_save)
runtime.manager.change_stage(stage)
status.editing_phone_number_index = -1
status.phone_item = None
def get_time(self):
import time, ntptime
year, month, day, hour, min, sec, msec = time.localtime(ntptime.ntime())[:7]
#cdate = str(year) + str(month) + str(day) + str(hour) + str(min) + str(sec) + str(msec) #sync를 위해 msec3자리로
time = "%4s%2s%2s%2s%2s%2s%3s"%(year, month, day, hour, min, sec, msec)
time = time.replace(' ','0')
if self.new_item:
cdate = time
mdate = time[:-3]
else:
cdate = status.phone_item.cdate
mdate = time[:-3]
return cdate, mdate
def get_speed(self):
addstage = runtime.manager.find_stage('addphonebook')
if addstage:
speed_index = addstage.ui.list.entrys[5].index
else:
speed_index = self.ui.list.entrys[5].index
if speed_index == 0:
return ''
else:
return self.ui.speed_list[speed_index]
def set_speed_none(self):
addstage = runtime.manager.find_stage('addphonebook')
if addstage:
addstage.ui.list.entrys[5].set_index(0)
else:
self.ui.list.entrys[5].set_index(0)
return True
def get_melody(self):
addstage = runtime.manager.find_stage('addphonebook')
if addstage:
melody_dir_index = addstage.ui.list.entrys[7].index
else:
melody_dir_index = self.ui.list.entrys[7].index
if melody_dir_index:
dir = utils.get_ring_dir_by_index(melody_dir_index)
if addstage:
melody_index = addstage.ui.list.entrys[8].index
try:
melody = addstage.ui.ring_list[melody_index]
except:
melody = ''
else:
melody_index = self.ui.list.entrys[8].index
try:
melody = self.ui.ring_list[melody_index]
except:
melody = ''
if melody != '':
fname = utils.get_melody_fullname(dir, melody)
if fname == None:
print "[error] meoldy file [%s] not exists in [%s]"%(melody, dir)
name = ''
else:
name = dir + fname
else:
name = ''
else:
name = ''
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
return name
def get_image(self):
addstage = runtime.manager.find_stage('addphonebook')
if addstage:
image_dir_index = addstage.ui.list.entrys[9].index
else:
image_dir_index = self.ui.list.entrys[9].index
if image_dir_index:
dir = utils.get_image_dir_by_index(image_dir_index)
if addstage:
image_index = addstage.ui.list.entrys[10].index
try:
image = addstage.ui.image_list[image_index]
except:
image = ''
else:
image_index = self.ui.list.entrys[10].index
try:
image = self.ui.image_list[image_index]
except:
image = ''
if image != '':
name = dir + image
else:
name = '/usr/local/lgvp/photos/snapshot/no_photo.png'
else:
name = '/usr/local/lgvp/photos/snapshot/no_photo.png'
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
return name
def get_snapshot(self):
pass
def get_current_file(self):
return self.image_dir + self.lists[self.photo_index][0]
def get_current_names(self):
names = []
for lst in self.lists:
name = lst[0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
names.append(name)
return names
def preview_small(self):
# if self.ui.list.entrys[10].choose[0] == 'None':
# return True
# self.filename = self.get_current_file()
# self.ui.list.entrys[11].setImage(self.filename)
filename = self.get_image()
self.ui.list.entrys[11].setImage(filename)
def check_number(self, home, mobile, office):
print '##### phonebook.check_number home =', home, 'mobile =', mobile, 'office =', office
if home =='' and mobile =='' and office == '':
err_stage = PhonebookNotifyStage(_('Number insert please'))
return True, err_stage
if (home!='' and home == mobile) or (mobile!='' and mobile == office) or (office!='' and office == home):
err_stage = PhonebookNotifyStage(_('Number conflict'))
return True, err_stage
pre_home = home
if len(home) > 6:
if not (home[0] == '0' or home[0] == '1'):
pre_home = setting.prefix + home
pre_office = office
if len(office) > 6:
if not (office[0] == '0' or office[0] == '1'):
pre_office = setting.prefix + office
if config.mmi_debug: print '## status.editing_phone_number_index=', status.editing_phone_number_index
if status.editing_phone_number_index == -1:
complict_home = False
complict_mobile = False
complict_office = False
if phonedb.has_number(pre_home):
complict_home = True
if phonedb.has_number(mobile):
complict_mobile = True
if phonedb.has_number(pre_office):
complict_office = True
if config.mmi_debug:
print 'complict_home(%s),complict_mobile(%s),complict_office(%s)' %(complict_home,complict_mobile,complict_office)
if complict_home == True and complict_mobile == True and complict_office == True:
err_stage = PhonebookNotifyStage(_('All phone numbers are duplicated.'))
return True, err_stage
elif complict_home != True and complict_mobile == True and complict_office == True:
err_stage = PhonebookNotifyStage(_('Duplicated Mobile, Office phone numbers.'))
return True, err_stage
elif complict_home == True and complict_mobile != True and complict_office == True:
err_stage = PhonebookNotifyStage(_('Duplicated Home, Office phone numbers.'))
return True, err_stage
elif complict_home == True and complict_mobile == True and complict_office != True:
err_stage = PhonebookNotifyStage(_('Duplicated Home, Mobile phone numbers.'))
return True, err_stage
elif complict_home != True and complict_mobile != True and complict_office == True:
err_stage = PhonebookNotifyStage(_('Duplicated Office phone number.'))
return True, err_stage
elif complict_home != True and complict_mobile == True and complict_office != True:
err_stage = PhonebookNotifyStage(_('Duplicated Mobile phone number.'))
return True, err_stage
elif complict_home == True and complict_mobile != True and complict_office != True:
err_stage = PhonebookNotifyStage(_('Duplicated Home phone number.'))
return True, err_stage
else:
if status.phone_item.home != pre_home and pre_home:
if pre_home != status.phone_item.mobile and \
pre_home != status.phone_item.office and \
phonedb.has_number(pre_home):
err_stage = PhonebookNotifyStage(_('Duplicated Home phone number.'))
return True, err_stage
elif status.phone_item.mobile != mobile and mobile:
if mobile != status.phone_item.home and \
mobile != status.phone_item.office and \
phonedb.has_number(mobile):
err_stage = PhonebookNotifyStage(_('Duplicated Mobile phone number.'))
return True, err_stage
elif status.phone_item.office != pre_office and pre_office:
if pre_office != status.phone_item.home and \
pre_office != status.phone_item.mobile and \
phonedb.has_number(pre_office):
err_stage = PhonebookNotifyStage(_('Duplicated Office phone number.'))
return True, err_stage
return False, None
def handle_key(self,key):
if self.vm_flag:
if key in (config.Menu4, config.Red):
runtime.manager.back_stage()
runtime.eaHandler.closePhonebook()
return True
elif key in (config.OffHook, config.Green, config.Video):
return True
elif key == config.CLEAR:
if self.ui.list.focus not in (0, 2, 3, 4, 6):
self.ui.stop_audio()
runtime.manager.back_stage()
runtime.eaHandler.closePhonebook()
return True
if len(self.ui.list.entrys[self.ui.list.focus].get_text()) > 0:
self.ui.list.entrys[self.ui.list.focus].handle_key('\b')
else:
self.ui.stop_audio()
runtime.manager.back_stage()
runtime.eaHandler.closePhonebook()
return True
if key == config.Menu1 or key =='OK':
self.ui.stop_audio()
# name check
if self.ui.list.entrys[0].get_text() == '':
utils.player.play_effect(config.SETTING_FAILED)
stage = PhonebookNotifyStage(_('Name insert please'))
runtime.manager.stack_stage(stage)
return True
new_name = self.ui.list.entrys[0].get_text()
if config.mmi_debug: print '## new_name=', new_name
if new_name:
if config.mmi_debug: print '## status.editing_phone_number_index=', status.editing_phone_number_index
if status.editing_phone_number_index == -1: # 새로운 번호 등록시
if phonedb.has_name(new_name):
utils.player.play_effect(config.SETTING_FAILED)
#stage = PhonebookNotifyStage(_('Name conflict'))
def conflict_yes():
status.phone_item.name = new_name
addstage = runtime.manager.find_stage('addphonebook')
if config.mmi_debug: print '## addstage=', addstage
if addstage:
home = addstage.ui.list.entrys[2].get_text()
mobile = addstage.ui.list.entrys[3].get_text()
office = addstage.ui.list.entrys[4].get_text()
err, err_stage = self.check_number(home, mobile, office)
if err:
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.change_stage(err_stage)
return
if self.prority != '':
if (self.prority == '0' and not home) or \
(self.prority == '1' and not mobile) or \
(self.prority == '2' and not office):
print 'ka...............3 status.phone_item.prority=', status.phone_item.prority
stage = PhonebookNotifyStage(_('Priority define please.'))
runtime.manager.change_stage(stage)
return
# priority check
if self.prority == '' or self.prority not in ['0','1','2'] :
if home: status.phone_item.prority = '0'
elif mobile: status.phone_item.prority = '1'
else: status.phone_item.prority = '2'
self.save()
utils.player.play_effect(config.SETTING_SUCCEEDED)
def conflict_no():
runtime.manager.back_stage()
msg = _('Name conflict.\nDo you want to save?')
icon = uiconfig.baloon_phonebook_icon
stage = YesNoStage(msg, conflict_yes, conflict_no, '', icon)
runtime.manager.stack_stage(stage)
return True
# 기존 번호 편집시
else:
if status.phone_item.name == new_name:
pass
else:
if phonedb.has_name(new_name):
utils.player.play_effect(config.SETTING_FAILED)
#stage = PhonebookNotifyStage(_('Name conflict'))
def conflict_yes():
status.phone_item.name = new_name
addstage = runtime.manager.find_stage('addphonebook')
if addstage:
home = addstage.ui.list.entrys[2].get_text()
mobile = addstage.ui.list.entrys[3].get_text()
office = addstage.ui.list.entrys[4].get_text()
err, err_stage = self.check_number(home, mobile, office)
if err:
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.change_stage(err_stage)
return
if self.prority != '':
if (self.prority == '0' and not home) or \
(self.prority == '1' and not mobile) or \
(self.prority == '2' and not office):
stage = PhonebookNotifyStage(_('Priority define please.'))
runtime.manager.change_stage(stage)
print 'ka...............2 status.phone_item.prority=', status.phone_item.prority
return
# priority check
if self.prority == '' or self.prority not in ['0','1','2'] :
if home: status.phone_item.prority = '0'
elif mobile: status.phone_item.prority = '1'
else: status.phone_item.prority = '2'
self.save()
utils.player.play_effect(config.SETTING_SUCCEEDED)
def conflict_no():
runtime.manager.back_stage()
msg = _('Name conflict.\nDo you want to save?')
icon = uiconfig.baloon_phonebook_icon
stage = YesNoStage(msg, conflict_yes, conflict_no, '', icon)
runtime.manager.stack_stage(stage)
return True
status.phone_item.name = new_name
# number check
home = self.ui.list.entrys[2].get_text()
mobile = self.ui.list.entrys[3].get_text()
office = self.ui.list.entrys[4].get_text()
err, err_stage = self.check_number(home, mobile, office)
if config.mmi_debug: print '##err=', err, 'err_stage=', err_stage
if err:
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.stack_stage(err_stage)
return True
if self.prority != '':
if (self.prority == '0' and not home) or \
(self.prority == '1' and not mobile) or \
(self.prority == '2' and not office):
utils.player.play_effect(config.SETTING_FAILED)
# KA:QA:4-58 [20081106]
if status.phone_item.prority != '':
self.prority = status.phone_item.prority
else:
self.prority = ''
self.ui.update_priority_icon(self.prority)
print 'ka...............1 status.phone_item.prority=', status.phone_item.prority
stage = PhonebookNotifyStage(_('Priority define please.'))
runtime.manager.stack_stage(stage)
return
# priority check
if self.prority == '' or self.prority not in ['0','1','2'] :
#utils.player.play_effect(config.SETTING_FAILED)
#stage = PhonebookNotifyStage(_('Prority define please'))
if home: status.phone_item.prority = '0'
elif mobile: status.phone_item.prority = '1'
else: status.phone_item.prority = '2'
#runtime.manager.stack_stage(stage)
#return True
self.save()
utils.player.play_effect(config.SETTING_SUCCEEDED)
return True
elif key == config.Menu2:
focus = self.ui.list.focus
if focus in [2,3,4]:
#status.phone_item.prority = str(focus - 2)
self.prority = str(focus - 2)
self.ui.update_priority_icon(self.prority)
#filename = uiconfig.image_dir + uiconfig.pb_pirority_number[focus-2]
#self.ui.list.icons[focus].changeIcon(filename)
elif focus == 5:
self.set_speed_none()
if self.ui.list.entrys[5].index == 0:
runtime.rb.set_text('')
else:
runtime.rb.set_text(_('DELETE'))
# KA: [20080424] image update
return True
elif key == config.Menu3:
if self.ui.list.focus == 0:
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]
elif self.ui.list.focus == 6:
#self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list_mult_num_symbol)
#self.ui.automata = config.automata_list_mult_num_symbol[self.ui.automata_idx]
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]
debugLogN('*automata_idx=', self.ui.automata_idx, ', automata=', self.ui.automata)
self.ui.set_automata(self.ui.list.entrys[self.ui.list.focus], *self.ui.automata)
self.set_menu3()
elif key == config.Menu4:
self.ui.stop_audio()
runtime.manager.back_stage()
return True
elif key in ('Up', 'Down'):
ret = self.ui.handle_key(key)
self.entry_refresh() # for text align refreshing
for ent in self.ui.list.entrys:
ent.lostFocus()
self.ui.list.entrys[self.ui.list.focus].showFocus()
if self.ui.list.focus in [2,3,4]:
runtime.rb.set_text(_('KEY SET'))
elif self.ui.list.focus == 5:
if self.ui.list.entrys[5].index == 0:
runtime.rb.set_text('')
else:
runtime.rb.set_text(_('DELETE'))
else:
runtime.rb.set_text('')
self.update_automata()
return ret
elif key in ('Left', 'Right'):
self.ui.handle_key(key)
if self.ui.list.focus == 5:
if self.ui.list.entrys[5].index == 0:
runtime.rb.set_text('')
else:
runtime.rb.set_text(_('DELETE'))
# KA: [20080424] image update
self.preview_small()
# KA: [20080424] image update ==
return True
elif key == config.CLEAR:
if self.ui.list.focus not in (0, 2, 3, 4, 6):
self.ui.stop_audio()
runtime.manager.back_stage()
return True
#self.ui.list.entrys[self.ui.list.focus].handle_key(key)
#self.ui.list.entrys[self.ui.list.focus].handle_key('\b')
if len(self.ui.list.entrys[self.ui.list.focus].get_text()) > 0:
# self.ui.list.entrys[self.ui.list.focus].backspace(1)
self.ui.list.entrys[self.ui.list.focus].handle_key('\b')
else:
self.ui.stop_audio()
runtime.manager.back_stage()
return True
elif key == config.OffHook or key == config.Green:
self.ui.stop_audio()
else:
ret = self.ui.list.entrys[self.ui.list.focus].handle_key(key)
return ret
return False
class EditGroupStage(Stage):
name = 'EditGroup'
def __init__(self,index):
self.index = index
#self.ui = baseui.EditGroupUI(index, _('SAVE'), _('CLEAR'), '', _('BACK'))
self.ui = baseui.EditGroupUI(index, _('SAVE'), '', '', _('BACK'))
#self.ui.set_fixed_automata(None, False)
# shchun : global automata change
if setting.lang == 'Korean':
self.ui.set_automata('hangul', False)
else:
self.ui.set_automata('multitap', 'lower')
# end shchun
self.player_pid = None
self.play_audio_timer = None
def get_current_file(self):
return self.ui.get_current_file()
def play_audio(self):
if status.phone_status != status.Disconnected:
return
audio_file = self.get_current_file()
if audio_file != '':
#self.player_pid = utils.player.play(audio_file)
utils.player.play_ring(audio_file)
def stop_audio(self):
if status.phone_status != status.Disconnected:
return
#utils.player.stop(self.player_pid)
utils.player.stop_ring()
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 save_info(self):
from groupdb import groupdb
new_name = self.ui.entry.get_text()
#ring = unicode(self.ring, 'euc-kr').encode('utf-8')
if self.ui.audio_file == _('None'):
self.ui.audio_file = ''
if self.index == -1: # NEW
#new_index = groupdb.get_group_len()
melody = self.ui.path +self.ui.audio_file
groupdb.insert_item(new_name, melody)
else:
groupdb.set_name(self.ui.item_index, new_name)
groupdb.set_melody(self.ui.item_index, self.ui.path, self.ui.audio_file)
def handle_key(self,key):
if key == config.Menu1 or key == 'OK':
if len(self.ui.entry.get_text()) <= 0:
utils.player.play_effect(config.SETTING_FAILED)
stage = PhonebookNotifyStage(_('Name insert please'))
runtime.manager.stack_stage(stage)
return True
if self.ui.audio_dir_index != 0:
if self.ui.audio_file == '' or self.ui.audio_file == _('None'):
stage = NotifyStage(_('Invalid ring for external calls'), uiconfig.baloon_phonebook_icon) # CHECKME icon
runtime.manager.stack_stage(stage)
return True
from groupdb import groupdb
# QE-28404:20개 Full상태에서 특정index를 편집후 저장시 오류 수정
if config.mmi_debug:
print '## self.index = ', self.index, 'len(groupdb.db) =', len(groupdb.db)
if self.index == -1 and len(groupdb.db) >= 20:
utils.player.play_effect(config.SETTING_FAILED)
stage = PhonebookNotifyStage(_('Group db is full.'))
runtime.manager.change_stage(stage)
return True
if self.ui.entry.get_text() != self.ui.item[1]:
if not groupdb.check_name(self.ui.entry.get_text()):
utils.player.play_effect(config.SETTING_FAILED)
stage = PhonebookNotifyStage(_('Name conflict.'))
runtime.manager.stack_stage(stage)
return True
self.save_info()
num_groupdb = len(groupdb.db)
if config.mmi_debug:
print '## num_groupdb =', num_groupdb
if self.index == -1 and runtime.manager.find_stage('groupstage'):
def back_stage_and_focusing():
runtime.manager.back_stage('groupstage')
runtime.manager.stage.activate(num_groupdb-1)
stage = PhonebookNotifyStage(_('Set is saved'), cb=back_stage_and_focusing)
else:
stage = PhonebookNotifyStage(_('Set is saved'))
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
return True
elif key == config.Menu3:
if self.ui.index == -1:
# 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
# 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 == config.Menu4:
runtime.manager.back_stage()
return True
elif key == config.CLEAR:
if config.mmi_debug: print '## self.ui.index =', self.ui.index
#self.ui.entry.handle_key(key)
if len(self.ui.entry.get_text()) > 0 and self.ui.index== -1:
self.ui.entry.handle_key('\b')
#self.ui.entry.backspace(1)
else:
runtime.manager.back_stage()
return True
elif key == 'Right':
self.play_audio_timer = None
if self.ui.index == -1:
self.ui.handle_key(key)
elif self.ui.index == 0:
self.ui.change_melody_dir(True)
self.ui.change_melody_file(True, dir_changed=True)
else:
self.stop_audio()
self.ui.change_melody_file(True)
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
return True
elif key == 'Left':
self.play_audio_timer = None
if self.ui.index == -1:
self.ui.handle_key(key)
elif self.ui.index == 0:
self.ui.change_melody_dir(False)
self.ui.change_melody_file(True, dir_changed=True)
else:
self.stop_audio()
self.ui.change_melody_file(False)
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
return True
elif key == 'Up' or key == 'Down':
self.play_audio_timer = None
self.ui.handle_key(key)
if self.ui.index == -1:
self.ui.set_fixed_automata(None, False)
self.stop_audio()
self.ui.remove_item_scroll_timer()
elif self.ui.index == 1:
self.ui.set_menu3('')
self.stop_audio()
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
else:
self.ui.set_menu3('')
self.stop_audio()
self.ui.remove_item_scroll_timer()
return True
else:
if key in "0123456789*#" and self.ui.index != -1:
if config.mmi_debug: print '@@ Not invalid'
return True
self.ui.handle_key(key)
# KA: [20080406] phonebook UI- edit group
class NameConflictStage(Stage):
# Page 176,
def __init__(self):
self.ui = ui.NameConflictUI()
name = status.phone_item.name.lower()
for item in phonedb.db:
if item.name.lower() == name:
old_item = item
break
self.item = old_item
def handle_key(self, key):
if key == config.Menu1:
stage = NameRetryStage
runtime.manager.stack_stage(stage)
return True
elif key == config.Menu2:
runtime.manager.stack_stage(PhoneItemDetailStage(self.item))
return True
return False
def get_phonebook_stage():
roxia_trace('get_phonebook_stage')
if phonedb.is_empty():
if status.phonebook_in_calling:
return PhoneBookStage()
else:
return PhoneBookEmptyStage()
return PhoneBookStage()