import config, runtime, os.path, utils, mmsconfig, uiconfig
from utils import get_file_size
from basemodel import ListStage, Stage, T9AddWordStage, SymbolSelectionStage, NotifyStage, YesNoStage
from baseui import EntryUI
from mmsutils import MMS_Unicode_len
class TemplateYesNo(YesNoStage):
def __init__(self, message, yes_cb, no_cb, title='', icon=uiconfig.baloon_message_template_icon):
YesNoStage.__init__(self, message, yes_cb, no_cb, title, icon)
class TemplateMessageNotify(NotifyStage):
def __init__(self, msg, cb=None):
NotifyStage.__init__(self, msg, uiconfig.baloon_message_template_icon, cb)
class Template:
def __init__(self):
self._list = []
self._list_d = []
self.cindex = -1
def reload(self):
from setting import setting
if setting.lang == 'English':
path = config.templatelist_path_english
else:
path = config.templatelist_path_spain
if not os.path.exists(path):
return
self._list = []
self._list_d = []
for info in file(path):
# RHC / [20060921_1]
#info = info.strip()
info = info[:-1]
# RHC / [20060921_1]--
if not info:
continue
# KA: [20070928] hangul
# info = unicode(info, 'euc-kr').encode('utf-8')
info = unicode(info, 'utf-8').encode('utf-8')
# KA: [20070928] hangul --
self._list.append(info)
if MMS_Unicode_len(info) > mmsconfig.mms_text_listdisplay_max[0]:
self._list_d.append(info[:mmsconfig.mms_text_listdisplay_max[1]]+'...')
else:
self._list_d.append(info)
def save(self):
from setting import setting
if setting.lang == 'English':
path = config.templatelist_path_english
else:
path = config.templatelist_path_spain
ft=open(path, 'w')
for info in self._list:
ft.write(info+'\n')
ft.close()
def change(self, index, text):
self._list[index] = text
if len(text) >= 16:
self._list_d.append(text+'...')
else:
self._list_d.append(text)
self.save()
def remove(self, index):
self._list.pop(index)
self.save()
def removeall(self):
self._list = []
self._list_d = []
self.save()
def add(self, text):
self._list.append(text)
self.save()
def TemplateStage(edit=None):
tlmgr = Template()
tlmgr.reload()
if edit:
if not tlmgr._list_d:
stage = TemplateMessageNotify(_('No template'))
else:
stage = _TemplateStage(tlmgr, edit)
else:
if not tlmgr._list_d:
stage = TemplateEmptyStage(tlmgr, edit)
else:
stage = _TemplateStage(tlmgr, edit)
return stage
class TemplateEmptyStage(Stage):
name = 'tlempty'
def __init__(self, tlmgr, edit=None):
self.tlmgr = tlmgr
self.edit = edit
if self.edit:
_title = _('INSERT TEMPLATE')
else:
_title = _('TEMPLATE')
from baseui import BaloonMessageUI
icon = uiconfig.baloon_message_template_icon
self.ui = BaloonMessageUI(_('ADD'), _('BACK'),_title, icon, _('Template empty'))
def handle_key(self, key):
if key == config.Menu1:
self.tlmgr.cindex = 0
runtime.manager.stack_stage(TemplateEdit(self.tlmgr))
elif key == config.Menu2:
runtime.manager.back_stage()
else:
return False
return True
class _TemplateStage(ListStage):
name = 'tlstage'
icon = uiconfig.message_template_icon
def __init__(self, tlmgr, edit=None):
self.tlmgr = tlmgr
self.edit = edit
if self.edit:
_title = _('INSERT TEMPLATE')
else:
_title = _('TEMPLATE')
ListStage.__init__(self, choice=('',), title=_title)
def show(self):
self.tlmgr.reload()
if self.tlmgr._list_d:
self.change_choice(tuple(self.tlmgr._list_d))
if self.edit:
self.ui.set_left(_('OK'))
else:
self.ui.set_left(_('OPTIONS'))
ListStage.show(self)
else:
self.change_choice(('',))
self.ui.set_left(_('ADD'))
ListStage.show(self)
Empty_Show()
def activate(self, index):
if self.edit:
self.edit.insert_template(self.tlmgr._list[index])
else:
self.tlmgr.cindex = index
if self.tlmgr._list_d:
runtime.manager.stack_stage(TemplateOptionStage(self.tlmgr))
else:
runtime.manager.stack_stage(TemplateEdit(self.tlmgr))
class TemplateOptionStage(ListStage):
title = _('OPTIONS')
choice = (_('Add new'), _('Edit'), _('Delete'), _('Delete all'))
icon = uiconfig.message_template_icon
def __init__(self, mgr):
self.tlmgr = mgr
ListStage.__init__(self)
def activate(self, index):
if index == 0:
if len(self.tlmgr._list) >= 20:
runtime.manager.stack_stage(TemplateMessageNotify(_('Template is full')))
else:
runtime.manager.stack_stage(TemplateEdit(self.tlmgr))
elif index == 1:
runtime.manager.stack_stage(TemplateEdit(self.tlmgr, isadd=False))
elif index == 2:
if len(self.tlmgr._list) <= 0:
runtime.manager.stack_stage(TemplateMessageNotify(_('No template')))
else:
runtime.manager.stack_stage(TemplateYesNo(_('Delete template?'), self.d_yes_cb, self.d_no_cb))
elif index == 3:
if len(self.tlmgr._list) <= 0:
runtime.manager.stack_stage(TemplateMessageNotify(_('No template')))
else:
runtime.manager.stack_stage(TemplateYesNo(_('Delete all template?'), self.a_yes_cb, self.a_no_cb))
def d_yes_cb(self):
isempty = False
if len(self.tlmgr._list_d) == 1:
isempty = True
self.tlmgr.remove(self.tlmgr.cindex)
if isempty:
runtime.manager.back_stage('tlstage', isshow=False)
runtime.manager.back_stage()
else:
runtime.manager.back_stage('tlstage')
def d_no_cb(self):
runtime.manager.back_stage()
def a_yes_cb(self):
self.tlmgr.removeall()
runtime.manager.back_stage('tlstage', isshow=False)
runtime.manager.back_stage()
def a_no_cb(self):
runtime.manager.back_stage()
class TemplateEdit(Stage):
def __init__(self, mgr, isadd=True):
self.tlmgr = mgr
self.isadd = isadd
# RHC / [20060921_1]
self.addSuccess = False
# RHC / [20060921_1]--
if self.isadd:
_title = _('ADD NEW')
else:
_title = _('EDIT')
self.ui = EntryUI(_('OK'), _('BACK'), _title, _('Insert text'))
self.ui.set_automata(*utils.get_def_automata()) #입력 방식 설정
self.automata_idx = utils.get_def_automata_idx() #입력 방식 index
self.ui.set_max(255)
if not self.isadd:
self.ui.set_text(self.tlmgr._list[self.tlmgr.cindex])
def show(self):
Stage.show(self)
if self.isadd and len(self.ui.get_text()) <= 0:
self.ui.set_left('')
def activate_menu1(self):
text = self.ui.get_text()
if self.isadd:
if text:
def cb():
fstage = runtime.manager.find_stage('tlstage')
if fstage:
runtime.manager.back_stage('tlstage')
else:
fstage = runtime.manager.find_stage('tlempty')
if fstage:
runtime.manager.back_stage('tlempty')
# RHC / [20060921_1]
if self.addSuccess:
runtime.manager.change_stage(_TemplateStage(self.tlmgr))
else:
runtime.manager.change_stage(TemplateEmptyStage(self.tlmgr))
# RHC / [20060921_1]--
else:
runtime.manager.back_stage(name='', isshow=False)
runtime.manager.change_stage(_TemplateStage(self.tlmgr))
# RHC / [20060921_1]
trimedText = text.strip()
if len(trimedText) == 0:
runtime.manager.change_stage(TemplateMessageNotify(_('Blank line not allowed'), cb))
else:
self.tlmgr.add(text)
self.addSuccess = True
runtime.manager.change_stage(TemplateMessageNotify(_('Template is added'), cb))
# RHC / [20060921_1]--
else:
if self.isadd:
return
else:
runtime.manager.back_stage()
else:
if text:
# RHC / [20060921_1]
trimedText = text.strip()
if len(trimedText) == 0:
runtime.manager.change_stage(TemplateMessageNotify(_('Blank line not allowed')))
else:
self.tlmgr.change(self.tlmgr.cindex, text)
runtime.manager.change_stage(TemplateMessageNotify(_('Template is edited')))
# RHC / [20060921_1]--
else:
runtime.manager.back_stage()
def insert_symbol(self, s):
before_text = self.ui.get_text()
self.ui.insert_text(s)
after_text = self.ui.get_text()
if before_text == after_text:
runtime.manager.change_stage(NotifyStage(_('Max length exceeded'), uiconfig.baloon_message_icon))
else:
runtime.manager.back_stage()
def t9_add_word(self, word):
self.ui.edit.t9_add_word(word)
def handle_key(self, key):
if key == config.Menu1: #options Menu(left key)
if self.ui.is_t9_add_word_mode():
runtime.manager.stack_stage(T9AddWordStage(self))
return True
self.ui.reset_automata()
self.activate_menu1()
elif key == config.Menu2:
if self.ui.handle_key(key):
if self.isadd and len(self.ui.get_text()) <= 0:
self.ui.set_left('')
else:
self.ui.set_left(_('OK'))
return True
runtime.manager.back_stage()
# KA: [20070928] hangul editing
'''
elif key == '#':
if self.ui.is_t9_add_word_mode():
return True
self.automata_idx = utils.get_automata_idx(*self.ui.automata)
self.automata_idx += 1
if self.automata_idx >= len(config.automata_list):
self.automata_idx = 0
name, casemode = config.automata_list[self.automata_idx]
self.ui.set_automata(name, casemode)
elif key == '*' and not self.ui.is_t9_editing_mode():
self.ui.reset_automata()
runtime.manager.stack_stage(SymbolSelectionStage(self, isentry=True))
return True
'''
# KA: [20070928] hangul editing--
else:
ret = self.ui.handle_key(key)
try:
if self.isadd and len(self.ui.get_text()) <= 0:
self.ui.set_left('')
else:
self.ui.set_left(_('OK'))
except:
pass
return ret
return True