from basemodel import Stage, ListStage, YesNoStage, OkNoStage, NotifyStage, EntryStage, SymbolSelectionStage,PhotoGalleryCheckListStage, ExtPhotoGalleryCheckListStage, SlideshowSelectCheckListStage
import runtime, baseui, config, status, utils, uiconfig
from baseui import BaseUI
from setting import setting
from model import StorageShortStage
import os,controls
#MMW
import stat
#end of MMW
class SortStage(ListStage):
icon = uiconfig.image_image_sound_image_icon
def __init__(self):
self.title = _('SORT')
self.choice = _('By name'), _('By size')
ListStage.__init__(self)
self.ui.set_focus(setting.photo_sort_rule)
def activate(self, index):
setting.photo_sort_rule = index
stage = runtime.manager.find_stage('photo gallery')
stage.sort()
runtime.manager.back_stage('photo gallery')
class RenameStage(EntryStage):
def __init__(self, from_gallery_list=False):
self.from_gallery_list = from_gallery_list
EntryStage.__init__(self, _('Name'), _('RENAME'))
gallery = runtime.manager.find_stage('photo gallery')
self.ui.entry.ascii_mode_case3 = True
name = gallery.get_current_name()
try:
euc_kr_name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
if len(euc_kr_name) > 16:
euc_kr_name = euc_kr_name[:16]
try:
name = unicode(euc_kr_name,'euc-kr' ).encode('utf-8')
except:
pass
self.ui.set_text(name)
self.ui.set_max(16)
# KA: [20070831] hangul lvp-2000
#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
#ka...hangul add 2007.01.25
# self.ui.set_automata('multitap', 'lower')
# self.ui.automata_idx = self.automata_idx = 3
# if setting.lang == 'Korean':
# self.ui.set_automata('hangul', False)
# else:
# self.ui.set_automata('multitap', 'lower')
def show(self):
EntryStage.show(self)
if self.ui.menu3 == _('KOR'):
if config.mmi_debug: print '## reset index'
self.ui.automata_idx = 0
def activate_menu1(self):
self.new_name = self.ui.get_text()
if not self.new_name:
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Empty image name'), uiconfig.baloon_photo_icon)
runtime.manager.stack_stage(stage)
return
stage = runtime.manager.find_stage('photo gallery')
old_name = stage.get_current_name()
if old_name == self.new_name:
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.change_stage(NotifyStage(_('No change'), uiconfig.baloon_photo_icon))
return
if stage:
if not stage.rename_is_ok(self.new_name):
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.stack_stage(NotifyStage(_('There exists same name'), uiconfig.baloon_photo_icon))
return
for ch in self.new_name:
if ch in '\/:*?"<>':
utils.player.play_effect(config.SETTING_FAILED)
#runtime.manager.stack_stage(NotifyStage(_('Please, do not use \/:*?"<> characters to make file name'), uiconfig.baloon_photo_icon))
msg = runtime.evas.pre_parse(_('Please, do not use %s characters to make file name')%('\/:*?"<>',))
runtime.manager.stack_stage(NotifyStage(msg, uiconfig.baloon_photo_icon))
return
stage.rename(self.new_name)
try:
old_name = unicode(old_name, 'utf-8').encode('euc-kr')
except:
pass
ext = utils.get_ext(stage.get_current_file())
try:
self.new_name = unicode(self.new_name, 'utf-8').encode('euc-kr')
except:
pass
self.new_name = self.new_name + '.' + ext
def cb():
#runtime.manager.back_stage('photo gallery')
if self.from_gallery_list:
stage = PhotoGalleryListStage('taken')
else:
stage = PhotoGalleryStage('taken', file=self.new_name)
runtime.manager.stack_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Renamed!'), uiconfig.baloon_photo_icon, cb)
runtime.manager.change_stage(stage)
def handle_key(self, key):
if key == config.Menu4:
runtime.manager.back_stage()
return True
return EntryStage.handle_key(self, key)
# KA: [20070831] hangul lvp-2000
# if key == 'SOFT4':
# # vpark 2006.08.28 automata
# self.ui.automata_idx = utils.get_automata_idx(*self.ui.automata)
# if setting.lang == 'Korean':
# self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list_hangul)
# self.ui.automata = config.automata_list_hangul[self.ui.automata_idx]
# else:
# self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list)
# self.ui.automata = config.automata_list[self.ui.automata_idx]
# self.ui.set_automata(*self.ui.automata)
# return True
# self.automata_idx = utils.get_automata_idx(*self.ui.automata)
# self.automata_idx += 1
# if setting.lang == 'Korean':
# if self.automata_idx >=len(config.automata_list_hangul):
# self.automata_idx = 0
# name, casemode = config.automata_list_hangul[self.automata_idx]
# else:
# if self.automata_idx >=len(config.automata_list):
# self.automata_idx = 3
# name, casemode = config.automata_list[self.automata_idx]
# self.ui.set_automata(name, casemode)
# return True
# KA: [20070831] hangul lvp-2000 ==
class PhotoDetailUI(baseui.LargeWindowUI):
show_bg_depth = True
def __init__(self, file, date, filesize, imagesize):
#self.bg_image = utils.put_image(uiconfig.depth_bg_image, (0, 0))
#self.bg_image.show()
baseui.LargeWindowUI.__init__(self, '', '', _('DETAILS'), _('DETAILS'), menu4=_('BACK'))
pos = uiconfig.large_window_pos
font = uiconfig.large_window_text_font
def get_multiline_filename(file, width, font):
buf_text = ''
filename = []
for i in range(len(file)):
buf_text += file[i]
t = runtime.evas.text(text=buf_text, font=font)
w = t.geometry[2]
if w >= width: # cut line
filename.append(buf_text)
buf_text = ''
t.free()
if len(buf_text) > 0:
filename.append(buf_text)
return filename
file = _('File')+ ': ' + file
detail_list = get_multiline_filename(file, uiconfig.large_window_text_width, font)
detail_list.append(_('Date')+ ': ' + date)
detail_list.append(_('File size')+ ': ' + filesize)
detail_list.append(_('Image size')+ ': ' + imagesize)
for i, text in enumerate(detail_list):
x = pos[0] + uiconfig.large_window_text_pos_x
y = pos[1] + uiconfig.large_window_text_pos_y[i]
t = runtime.evas.text(text=text, pos=(x, y), \
color=uiconfig.large_window_text_color, \
font=font)
self.add(t)
def destroy(self):
#self.bg_image.free()
baseui.LargeWindowUI.destroy(self)
class PhotoDetailStage(Stage):
def __init__(self):
gallery = runtime.manager.find_stage('photo gallery')
detail = gallery.get_detail()
self.ui = PhotoDetailUI(*detail)
def handle_key(self, key):
if key == config.Menu4 or key == 'CLR':
runtime.manager.back_stage()
return True
return False
def ImageAssignStage():
import phonebook
from phonedb import phonedb
if phonedb.is_empty():
return phonebook.PhoneBookTempEmptyStage()
gallery = runtime.manager.find_stage('photo gallery')
status.assign_image = gallery.get_current_file()
def phonelist_activate(phonelist, index):
item = phonelist.get_phonedb_item(index)
phonedb.update_snapshot(item, status.assign_image)
phonedb.save()
def cb():
runtime.manager.back_stage('photo gallery')
stage = NotifyStage(_('Image assigned'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
status.phonelist_activate = phonelist_activate
return phonebook.FindStage()
class PhotoGalleryOptionStage(ListStage):
name = 'photo gallery option'
#icon = uiconfig.image_image_sound_image_icon
def __init__(self, photo_type, multi_select=0, from_gallery_list=False): #False):
self.title = _('OPTIONS')
self.photo_type = photo_type
if config.mm_debug:
print 'photogallery option: photo type', photo_type
self.multi_select = multi_select
self.from_gallery_list = from_gallery_list
choice1 = _('Set as background'), _('Send'), _('Delete'), _('Rename'), _('Assign to contact'), _('Sort'), _('Details')
choice2 = _('Set as background'), _('Send'), _('Sort'), _('Details')
if self.multi_select:
#choice3 = _('Set as background'), _('Delete'), _('Delete selected'), _('Rename'), _('Assign to contact'), _('Sort'), _('Set Slideshow')
choice3 = _('Set as background'), _('Set as default video'), _('Delete'), _('Rename'), _('Details'), _('Delete selected'), _('Set Slideshow')
#choice3 = _('Set as background'), _('Delete'), _('Rename'), _('Details'), _('Delete selected'), _('Set Slideshow')
#choice3 = _('Delete selected'), _('Set Slideshow')
else:
choice3 = _('Set as background'), _('Set as default video'), _('Delete'), _('Rename'), _('Details')
#choice3 = _('Set as background'), _('Delete'), _('Rename'), _('Details')
choice4 = _('Set as background'), _('Sort'), _('Details')
from profile import profile
if self.photo_type == 'vdc':
if profile.get_profile() == 0:
self.choice = choice2
else:
self.choice = choice4
else:
if profile.get_profile() == 0:
self.choice = choice1
else:
self.choice = choice3
ListStage.__init__(self, self.choice)
def activate(self, index):
if self.choice[index] == _('Set as background'):
gallery = runtime.manager.find_stage('photo gallery')
imageFile = gallery.get_current_file()
tmp_w, tmp_h = utils.get_img_size(imageFile)
if tmp_w * tmp_h < 640 * 480 + 1:
def cb():
runtime.manager.back_stage('photo gallery')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Background set.'), uiconfig.baloon_photo_icon, cb)
runtime.manager.change_stage(stage)
runtime.evas.render_now()
gallery.set_background()
else:
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Size too big.'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return
if self.choice[index] == _('Set as default video'):
gallery = runtime.manager.find_stage('photo gallery')
imageFile = gallery.get_current_file()
if not imageFile.endswith('.jpg') and not imageFile.endswith('.JPG'):
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Wrong format for privacy image'), uiconfig.baloon_video_icon)
runtime.manager.stack_stage(stage)
self.focus = 0
return False
tmp_w, tmp_h = utils.get_img_size(imageFile)
if tmp_w * tmp_h < 640 * 480 + 1:
def cb():
runtime.manager.back_stage('photo gallery')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Alternative video set'), uiconfig.baloon_video_icon, cb)
runtime.manager.change_stage(stage)
runtime.evas.render_now()
gallery.set_privacy()
else:
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Size too big.'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return
elif self.choice[index] == _('Send'):
from mmscomposestage import MMSCreateStage, MMSSize_excess
import mmsconfig
from mmsmanager import mmsmgr
gallery_stage = runtime.manager.find_stage('photo gallery')
if mmsmgr.setmedia(mmsconfig.MEDIA_IMAGE, gallery_stage.get_current_file()):
runtime.manager.stack_stage(MMSCreateStage(addmedia_type=mmsconfig.MEDIA_IMAGE))
else:
MMSSize_excess()
return
elif self.choice[index] == _('Delete'):
def yes():
gallery_stage = runtime.manager.find_stage('photo gallery')
gallery_stage.delete()
def delete_done():
if config.mmi_debug: print '## self.from_gallery_list=', self.from_gallery_list
if self.from_gallery_list:
if len(gallery_stage.lists) == 0:
if runtime.manager.find_stage('my album'):
runtime.manager.back_stage('my album')
elif runtime.manager.find_stage('MMToolsStage'):
runtime.manager.back_stage('MMToolsStage')
else:
runtime.manager.back_stage('idle')
else:
if runtime.manager.find_stage('my album'):
runtime.manager.back_stage('my album')
stage = PhotoGalleryListStage('taken')
runtime.manager.stack_stage(stage)
else:
runtime.manager.queue_backward(3)
else:
if len(gallery_stage.lists) == 0:
if runtime.manager.find_stage('my album'):
runtime.manager.back_stage('my album')
elif runtime.manager.find_stage('MMToolsStage'):
runtime.manager.back_stage('MMToolsStage')
else:
runtime.manager.back_stage('idle')
else:
stage = PhotoGalleryStage('taken')
runtime.manager.stack_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Photo deleted'), uiconfig.baloon_photo_icon, delete_done)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Do you want to delete photo?'), yes, no, '', uiconfig.baloon_photo_icon)
runtime.manager.stack_stage(stage)
return
elif self.choice[index] == _('Delete selected'): # _('Delete selected')
def yes():
gallery_stage = runtime.manager.find_stage('photo gallery')
gallery_stage.delete_selected()
def delete_done():
if self.from_gallery_list:
if runtime.manager.find_stage('my album'):
runtime.manager.back_stage('my album')
stage = PhotoGalleryListStage('taken')
runtime.manager.stack_stage(stage)
else:
runtime.manager.queue_backward(3)
else:
stage = PhotoGalleryStage('taken')
runtime.manager.stack_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Selected images are deleted'), uiconfig.baloon_photo_icon, delete_done)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Delete selected images?'), yes, no, '', uiconfig.baloon_photo_icon)
runtime.manager.stack_stage(stage)
return
elif self.choice[index] == _('Set Slideshow'): # _('Set slideshow')
gallery = runtime.manager.find_stage('photo gallery')
gallery.set_slide_file()
setting.save()
def slideshow_set_done():
if self.multi_select:
stage = PhotoGalleryListStage('taken')
else:
stage = PhotoGalleryStage('taken')
runtime.manager.stack_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Slideshow image set'), uiconfig.baloon_phonebook_icon, slideshow_set_done)
runtime.manager.change_stage(stage)
return
elif self.choice[index] == _('Rename'):
# KA: [20070831] hangul lvp-2000
#stage = RenameStage
try:
gallery = runtime.manager.find_stage('photo gallery')
try:
unicode(gallery.get_current_name(),'utf-8')
except:
pass
stage = RenameStage(self.from_gallery_list)
except:
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('No change'), uiconfig.baloon_photo_icon)
# KA: [20070831] hangul lvp-2000==
elif self.choice[index] == _('Assign to contact'):
stage = ImageAssignStage()
elif self.choice[index] == _('Sort'):
stage = SortStage
elif self.choice[index] == _('Details'):
stage = PhotoDetailStage
runtime.manager.stack_stage(stage)
def PhotoGalleryStage(photo_type, mms_mode=0, ipemailMessage = None, isshow=True, file=None):
#status.supervision_not_allowed = 1
dirname, lists = utils.get_image_gallery_list(photo_type)
if len(lists) == 0:
def cb():
runtime.manager.back_stage( 'my album')
return NotifyStage(_('Gallery empty!'), uiconfig.baloon_photo_icon,cb=cb)
# KA: [20080509] slide show
return _PhotoGalleryStage(photo_type, dirname, lists, mms_mode, ipemailMessage, isshow, file)
# KA: [20080509] slide show ==
class USBMountStage(Stage):
def __init__(self, message, cb=None):
icon = uiconfig.baloon_video_icon
self.ui = baseui.NotifyUI(message, icon)
def show(self):
self.ui.show()
self.usb_mount_timer = utils.Timer(1000, self.next)
#utils.usb_mount()
#self.next()
def check_usb_exist(self):
chk_usb_dir = '/proc/bus/usb/001'
import os
if not os.access(chk_usb_dir, os.R_OK):
return False
flist = os.listdir(chk_usb_dir)
if len(flist) < 2:
return False
return True
def next(self):
import time
utils.usb_mount_ready()
time.sleep(2)
if not self.check_usb_exist():
utils.usb_umount()
stage = NotifyStage(_('USB storage is not inserted'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return
utils.usb_mount()
time.sleep(1)
self.usb_mount_timer = None
photo_type = 'usb'
#status.supervision_not_allowed = 1
dirname, lists = utils.get_ext_image_gallery_list(photo_type)
if len(lists) == 0:
utils.usb_mount(dev='/dev/sda')
time.sleep(1)
dirname, lists = utils.get_ext_image_gallery_list(photo_type)
if len(lists) == 0:
utils.usb_mount()
time.sleep(1)
dirname, lists = utils.get_ext_image_gallery_list(photo_type)
if len(lists) == 0:
utils.usb_mount(dev='/dev/sda')
time.sleep(1)
dirname, lists = utils.get_ext_image_gallery_list(photo_type)
if len(lists) == 0:
utils.usb_umount()
stage = NotifyStage(_('Gallery empty!'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return
mms_mode=0
ipemailMessage = None
isshow=True
stage = _ExtPhotoGalleryListStage(photo_type, dirname, lists, mms_mode, ipemailMessage, isshow, titleimage=uiconfig.title_usb_gallery)
runtime.manager.stack_stage(stage)
def ExternalPhotoGalleryListStage(photo_type, mms_mode=0, ipemailMessage = None, isshow=True):
import time
if photo_type == 'usb':
return USBMountStage(_('Please wait for a moment.'), uiconfig.baloon_photo_icon)
elif photo_type == 'sdmmc':
if not os.access(config.sdmmc_dir, os.R_OK):
return NotifyStage(_('SD/MMC is not inserted.'), uiconfig.baloon_photo_icon)
#status.supervision_not_allowed = 1
dirname, lists = utils.get_ext_image_gallery_list(photo_type)
if len(lists) == 0:
return NotifyStage(_('Gallery empty!'), uiconfig.baloon_photo_icon)
return _ExtPhotoGalleryListStage(photo_type, dirname, lists, mms_mode, ipemailMessage, isshow, titleimage=uiconfig.title_sdmmc_gallery)
def PhotoGalleryListStage(photo_type, mms_mode=0, ipemailMessage = None, isshow=True):
#status.supervision_not_allowed = 1
dirname, lists = utils.get_image_gallery_list(photo_type)
if len(lists) == 0:
utils.player.play_effect(config.SETTING_FAILED)
return NotifyStage(_('Gallery empty!'), uiconfig.baloon_video_icon)
#def cb():
# runtime.manager.back_stage( 'my album')
return _PhotoGalleryListStage(photo_type, dirname, lists, mms_mode, ipemailMessage, isshow)
def SlideshowSelectStage(photo_type, mms_mode=0, ipemailMessage = None, isshow=True):
#status.supervision_not_allowed = 1
dirname, lists = utils.get_image_gallery_list(photo_type)
if len(lists) == 0:
def cb():
if runtime.manager.find_stage('screensaver setting'):
runtime.manager.back_stage('screensaver setting')
elif runtime.manager.find_stage('screensaver'):
runtime.manager.back_stage('screensaver')
else:
runtime.manager.back_stage()
utils.player.play_effect(config.SETTING_FAILED)
return NotifyStage(_('Gallery empty!'), uiconfig.baloon_photo_icon, cb=cb)
return _SlideshowSelectStage(photo_type, dirname, lists, mms_mode, ipemailMessage, isshow)
def PhotoGalleryMultiStage(photo_type, mms_mode=0, ipemailMessage = None, isshow=True):
#status.supervision_not_allowed = 1
dirname, lists = utils.get_image_gallery_list(photo_type)
if len(lists) == 0:
return NotifyStage(_('Gallery empty!'), uiconfig.baloon_photo_icon)
return _PhotoGalleryMultiStage(photo_type, dirname, lists, mms_mode, ipemailMessage, isshow)
class _PhotoGalleryMultiStage(Stage):
#name = 'photo multi gallery'
name = 'photo gallery'
def __init__(self,photo_type, dirname, lists, mms_mode=0, ipemailMessage=None, isshow=True):
self.ui = baseui.PhotoGalleryMultiUI(_('MENU') ,_('SELECT'), _('LARGE'), _('BACK'))
self.photo_type = photo_type
self.image_dir = dirname
self.lists = lists
self.choice = []
self.photo_index = 0
self.init_image()
def get_current_file(self,i):
return self.image_dir + self.lists[i][0]
def init_image(self):
self.images = []
self.checks = []
self.icons = []
i = 0
r = 0
while i < len(self.lists):
x,y = uiconfig.image_mutil_pos_x[i%3], uiconfig.image_mutil_pos_y[r]
image = controls.Image_Control(self.get_current_file(i),(x,y),(110,80))
self.ui.add(image)
self.images.append(image)
check = controls.Check_Control(0,'', font=uiconfig.pb_entry_font,pos = (x -30 ,y), color=uiconfig.list_text_color)
self.ui.add(check)
self.checks.append(check)
icon = controls.Icon_Control(uiconfig.image_list_icon,(x -30 ,y + 30))
self.ui.add(icon)
self.icons.append(icon)
i += 1
if i > 2:
if r == 0: r += 1
def hide_image(self):
i = 0
while i < len(self.lists):
self.icons[i].hide()
i += 1
def show(self):
Stage.show(self)
self.hide_image()
def handle_key(self, key):
if key == config.Menu2:
self.checks[self.ui.focus].handle_key(key)
if self.checks[self.ui.focus].value == 0:
self.icons[self.ui.focus].hide()
else:
self.icons[self.ui.focus].show()
return True
elif key == config.Menu3:
stage = PhotoGalleryStage(self.photo_type)
runtime.manager.change_stage(stage)
return True
if key == config.Menu4:
runtime.manager.back_stage()
return True
elif key in ['Up','Down','Left','Right']:
self.ui.handle_key(key)
return False
class _PhotoGalleryListStage(PhotoGalleryCheckListStage):
name = 'photo gallery'
def __init__(self,photo_type, dirname, lists, mms_mode=0, ipemailMessage=None, isshow=True):
#status.supervision_not_allowed = 1
self.mms_mode=mms_mode
self.ipemailMessage = ipemailMessage
titles = {'taken':_('PHOTO GALLERY'), \
'picture':_('PICTURES'), 'wallpaper':_('WALLPAPERS'), \
'vdc': _("VIDEOPHONE'S IMAGES")}
self.photo_type = photo_type
self.title = titles[photo_type]
self.image_dir = dirname
self.lists = lists
self.init_list(self.lists) # sort by date.
self.choice = []
self.preview_flag = 0
for lst in self.lists:
name = lst[0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
name = name
self.choice.append(name)
PhotoGalleryCheckListStage.__init__(self,self.choice)
self.photo_index = 0
self.photo_number = len(self.lists)
def preview_cb():
self.ui.set_preview(self.get_current_file())
self.get_slide_file()
self._preview_tag = None
self._preview_tag = utils.Timer(100, preview_cb)
def init_list(self, lists, isshow=True):
self.sort(isshow)
self.photo_index = 0
self.photo_number = len(lists)
def change_photo(self, delta):
self.photo_index += delta
if self.photo_index < 0:
self.photo_index = self.photo_number - 1
elif self.photo_index >= self.photo_number:
self.photo_index = 0
self.ui.set_preview(self.get_current_file())
def get_current_file(self):
return self.image_dir + self.lists[self.photo_index][0]
# KA: [20080509] slide show
def get_slide_file(self):
files = setting.slideshow_list #now only taken folder --just write name
#if not files:
if not files or not self.lists:
return
select_index = [] # 현재 list에서 slideshow 로 지정된 파일의 index
sel_idx = 0
for lst in self.lists:
name = self.image_dir + lst[0]
try:
index = files.index(name)
select_index.append(sel_idx)
except:
pass
sel_idx += 1
if select_index:
#for i in range(len(select_index)):
for i in select_index:
#self.ui.set_check(i, True)
self.ui.set_slide_check(i, True)
def is_slide_file(self, filename):
for slide in setting.slideshow_list:
if filename == slide:
return True
return False
def remove_slide_file(self, filename):
setting.slideshow_list.remove(filename)
setting.save()
return True
def rename_slide_file(self, org_filename, new_filename):
if self.is_slide_file(org_filename):
self.remove_slide_file(org_filename)
setting.slideshow_list.append(new_filename)
setting.save()
return True
def set_slide_file(self):
#/usr/local/lgvp/생략
#for item in range(len(lists)):
files = []
for i in range(self.photo_number):
if self.ui.list.checked[i]:
name = self.image_dir + self.lists[i][0]
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
files.append(name)
setting.set_slideshow_list(files)
# KA: [20080509] slide show ==
def sort(self, isshow=True):
'''
if setting.photo_sort_rule == 0: # name
def sort_func(x,y):
return cmp(x[0].lower(), y[0].lower())
elif setting.photo_sort_rule == 1: # size
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return cmp(x[sort_col], y[sort_col])
else: # date
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return -(cmp(x[sort_col], y[sort_col]))
'''
# 최근 사진이 제일 위로 오도록 정렬.
def sort_func(x, y, sort_col = setting.photo_sort_rule):
return cmp(y[2], x[2])
self.lists.sort(sort_func)
'''
self.photo_index = 0
if isshow:
self.ui.set_preview(self.get_current_file())
'''
def get_current_name(self):
name = self.lists[self.photo_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
return name
def rename_is_ok(self, name):
old = self.get_current_file()
ext = utils.get_ext(old)
name = name + '.' + ext
new_name = self.image_dir + name
try:
new_name = unicode(new_name, 'utf-8').encode('euc-kr')
except:
pass
import os.path
if os.path.exists(new_name):
return False
return True
def rename(self, name):
old = self.get_current_file()
ext = utils.get_ext(old)
name = name + '.' + ext
new_name = self.image_dir + name
try:
old_filename = unicode(old, 'utf-8').encode('euc-kr')
except:
old_filename = old
try:
new_filename = unicode(new_name , 'utf-8').encode('euc-kr')
except:
new_filename = new_name
#print "[yylee debug] rename L %s : %s"%(old_filename, new_filename)
#if utils.rename(old, new_name):
if utils.rename(old_filename ,new_filename):
self.lists[self.photo_index] = (name,) + self.lists[self.photo_index][1:]
#self.ui.set_preview(self.get_current_file(),self.preview_flag)
self.ui.set_preview(self.get_current_file())
self.rename_slide_file(old_filename, new_filename)
else:
if config.mm_debug:
print 'Rename failed'
if config.mm_debug:
print 'FIXME: Do Photo Rename: current index = ', self.photo_index
def delete(self):
name = self.get_current_file()
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
#슬라이드쇼 지정 파일인 경우 슬라이드 리스트에서 제외
if self.is_slide_file(name):
self.remove_slide_file(name)
if utils.remove(name):
if name == setting.bg_image_file:
def get_new_name():
for lst in self.new_lists:
name = lst[0]
return name
self.new_image_dir,self.new_lists = utils.get_image_gallery_list('vdc')
setting.bg_image_file = config.image_bg_dir + get_new_name()
baseui.change_bg(runtime.evas, setting.bg_image_file)
del self.lists[self.photo_index]
self.photo_number = len(self.lists)
if self.photo_number > 0:
if self.photo_index >= self.photo_number:
self.photo_index = self.photo_number - 1
self.ui.set_preview(self.get_current_file())
else:
pass
if config.mm_debug:
print 'FIXME: Do Photo Delete: current index = ', self.photo_index
def delete_selected(self):
#/usr/local/lgvp/생략
#for item in range(len(lists)):
for i in range(self.photo_number):
if self.ui.list.checked[i]:
name = self.image_dir + self.lists[i][0]
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
#cmd = 'rm -f %s'%(
#os.system(cmd)
os.remove(name)
def delete_all(self):
for i in range(self.photo_number):
name = self.image_dir + self.lists[i][0]
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
if self.is_slide_file(name):
self.remove_slide_file(name)
utils.remove(name)
if not os.path.exists(config.image_bg_dir + setting.bg_image_file):
setting.bg_image_file = config.image_bg_dir + config.def_bg
baseui.change_bg(runtime.evas, setting.bg_image_file)
print 'new bg_file =', setting.bg_image_file
def is_selected(self):
selected = 0
for i in range(self.photo_number):
if self.ui.list.checked[i]:
selected += 1
return selected
def get_detail(self):
photo_file = self.get_current_file()
import time, ntptime
stat_image = os.stat(photo_file)
atime = os.stat(photo_file)[stat.ST_ATIME]
mtime = os.stat(photo_file)[stat.ST_MTIME]
ctime = time.localtime(atime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
ctime = time.localtime(mtime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
size = (stat_image[6] + 1023) / 1024
name = photo_file.split('/')[-1]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
w, h = utils.get_img_size(photo_file)
return (name, date, '%dKB' % size, "%dx%d" % (w, h))
def set_background(self):
if config.mm_debug:
print 'FIXME: Do Photo set background: current index = ', self.photo_index
full_path = self.get_current_file()
try:
full_path = unicode(full_path, 'utf-8').encode('euc-kr')
except:
pass
setting.bg_image_file = full_path
import baseui
baseui.change_bg(runtime.evas, full_path)
def set_privacy(self):
if config.mm_debug:
print 'FIXME: Do Photo set privacy: current index = ', self.photo_index
full_path = self.get_current_file()
setting.privacy_category = 2
setting.privacy_image_file = full_path
# 리부팅 시 rc.local에서 /usr/local/lgvp/images/private.jpg'를 '/mfs/ram/images/private.jpg로 복사함.
#command = 'cp \"%s\" \"%s\"' % (full_path, '/usr/local/lgvp/images/private.jpg')
#os.system(command)
# 지금 설정한 것이 바로 다음 call 부터 적용 되게...
#command = 'cp \"%s\" \"%s\"' % (full_path, '/mfs/ram/images/private.jpg')
#os.system(command)
import shutil
shutil.copyfile(full_path, '/usr/local/lgvp/images/private.jpg')
shutil.copyfile(full_path,'/mfs/ram/images/private.jpg')
setting.save()
def handle_key(self, key):
if key == config.Menu1:
if self.ipemailMessage:
from ipemailstage import IpEmailAttachNotify
runtime.manager.stack_stage(IpEmailAttachNotify(_('Photo attached'), \
unicode(self.get_current_file())))
return True
if self.mms_mode:
from mmsmanager import mmsmgr
from mmscomposestage import MMSMessageNotify, MMSMessageNotify_cb, MMSSize_excess
from mmsconfig import MEDIA_IMAGE
mmsmessage = ''
if self.mms_mode == 1:
if self.photo_type == 'taken':
mmsmessage = _('Photo')
elif self.photo_type == 'picture':
mmsmessage = _('Picture')
elif self.photo_type == 'wallpaper':
mmsmessage = _('Wallpaper')
elif self.photo_type == 'vdc':
mmsmessage = _('Image')
mmsmessage = mmsmessage + ' ' + _('inserted')
else:
mmsmessage = _('Image modified')
if mmsmgr.setmedia(MEDIA_IMAGE, self.get_current_file()):
runtime.manager.change_stage(MMSMessageNotify(mmsmessage, MMSMessageNotify_cb))
else:
MMSSize_excess()
else:
if status.snapshot_editing:
from phonedb import phonedb
stage = runtime.manager.find_stage('modify kind')
if stage:
phonedb.set_snapshot(self.get_current_file())
def cb():
runtime.manager.back_stage('modify kind')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Image modified'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
else:
status.phone_item.snapshot = self.get_current_file()
def cb():
runtime.manager.back_stage('add last')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Image assigned'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
else:
#runtime.manager.stack_stage(PhotoGalleryOptionStage(self.photo_type, True))
runtime.manager.stack_stage(PhotoGalleryOptionStage(self.photo_type, self.is_selected(), True))
elif key == config.Menu4 or key == 'CLR':
stage = runtime.manager.find_stage( 'my album')
if stage != None:
runtime.manager.back_stage( 'my album')
else:
stage = runtime.manager.find_stage('screensaver')
if stage != None:
runtime.manager.back_stage('screensaver')
else:
stage = runtime.manager.find_stage('MMToolsStage')
if stage != None:
runtime.manager.back_stage('MMToolsStage')
else:
untime.manager.back_stage()
elif key == config.Menu3:
#stage = PhotoGalleryMultiStage(self.photo_type)
photo_file = self.get_current_file()
name = photo_file.split('/')[-1]
stage = PhotoGalleryStage(self.photo_type, file=name)
runtime.manager.change_stage(stage)
elif key == 'Up':
self.change_photo(-1)
return self.ui.handle_key(key)
elif key == 'Down':
self.change_photo(+1)
return self.ui.handle_key(key)
# elif key == config.Menu2:
# self.set_slide_file()
# setting.save()
# stage = NotifyStage(_('Slideshow image set'), uiconfig.baloon_phonebook_icon)
# runtime.manager.change_stage(stage)
elif key == config.Menu2 or key == 'OK':
return PhotoGalleryCheckListStage.handle_key(self,key)
else:
return False
return True
class _ExtPhotoGalleryListStage(ExtPhotoGalleryCheckListStage):
name = 'external photo gallery'
def __init__(self,photo_type, dirname, lists, mms_mode=0, ipemailMessage=None, isshow=True, titleimage=None):
#print "[yylee debug] _ExtPhotoGalleryListStage init"
#status.supervision_not_allowed = 1
self.mms_mode=mms_mode
self.ipemailMessage = ipemailMessage
self.photo_type = photo_type
self.image_dir = dirname
self.lists = lists
self.choice = []
self.preview_flag = 0
for lst in self.lists:
name = lst[0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
self.choice.append(name)
#print "[yylee debug] _ExtPhotoGalleryListStage #1 titleimage=", titleimage
ExtPhotoGalleryCheckListStage.__init__(self,self.choice, titleimage)
self.photo_index = 0
self.photo_number = len(self.lists)
#print "[yylee debug] _ExtPhotoGalleryListStage #2", self.get_current_file()
#self.ui.set_preview(self.get_current_file())
self.popup_image = None
self.popup_icon = None
self.popup_label = None
self.popup_msg = None
def preview_cb():
self.ui.set_preview(self.get_current_file())
self._preview_tag = None
self._preview_tag = utils.Timer(100, preview_cb)
def destroy(self):
if self.photo_type == 'usb':
utils.usb_umount()
self.popup_free()
Stage.destroy(self)
def popup_init(self):
# pop window image
self.popup_image = utils.put_image(uiconfig.pop_window_image, uiconfig.pop_window_image_pos)
self.popup_image.hide()
# title icon
self.popup_icon = utils.put_image(uiconfig.pop_window_icon, uiconfig.pop_window_icon_pos)
self.popup_icon.hide()
# title text
font = uiconfig.pop_window_title_font
color = uiconfig.pop_window_title_color
import widget
self.popup_label = widget.OutlineLabel(_('INFO'), font, uiconfig.pop_window_title_pos, color, align=uiconfig.ALIGN_LEFT)
self.popup_label.hide()
# message
pos = uiconfig.pop_window_text1_pos
self.popup_msg = runtime.evas.text(text=_('Copying...'), pos=pos, color=uiconfig.pop_window_text_color, font=uiconfig.pop_window_font)
self.popup_msg.hide()
self.align_center(self.popup_msg, pos)
def align_center(self, l, pos):
x, y = pos
width, height = l.size
l.move(x - width/2, y)
def popup_free(self):
if self.popup_image:
self.popup_image.free()
if self.popup_icon:
self.popup_icon.free()
if self.popup_label:
self.popup_label.free()
if self.popup_msg:
self.popup_msg.free()
def popup_show(self):
self.popup_image.show()
self.popup_icon.show()
self.popup_label.show()
self.popup_msg.show()
def popup_hide(self):
self.popup_image.hide()
self.popup_icon.hide()
self.popup_label.hide()
self.popup_msg.hide()
def init_list(self, lists, isshow=True):
self.photo_index = 0
self.photo_number = len(lists)
self.sort(isshow)
def change_photo(self, delta):
self.photo_index += delta
if self.photo_index < 0:
self.photo_index = self.photo_number - 1
elif self.photo_index >= self.photo_number:
self.photo_index = 0
self.ui.set_preview(self.get_current_file())
def get_current_file(self):
return self.image_dir + self.lists[self.photo_index][0]
def check_selected_any(self):
for i in range(self.photo_number):
if self.ui.list.checked[i]:
return True
return False
def copy_selected_files(self):
#/usr/local/lgvp/생략
#for item in range(len(lists)):
status.ext_gallery_copy_error = 0
status.ext_gallery_copy_error_filename = ''
sel_count = 0
pass_count = 0
for j in range(self.photo_number):
if self.ui.list.checked[j]:
sel_count += 1
for i in range(self.photo_number):
if self.ui.list.checked[i]:
name = self.image_dir + self.lists[i][0]
slash =name.rfind('/')
if slash >=0:
last_name = name[slash+1:]
else:
last_name = name
dot = last_name.rfind('.')
if dot >= 0:
last_name_except_ext = last_name[:dot]
my_ext = last_name[dot:]
else:
last_name_except_ext = last_name
my_ext = ''
'''
if len(last_name_except_ext) > 16:
last_name = last_name_except_ext[:16]+my_ext
'''
dst_name = config.audio_root_dir + config.image_taken_dir + last_name
# space check
free_flash = utils.get_free_flash_memory()
if free_flash < config.media_min_free_storage:
status.ext_gallery_copy_error = -4
status.ext_gallery_copy_error_filename = last_name_except_ext
return False
# duplication check
if not os.access(dst_name , os.R_OK):
if not utils.image_isvalid(name):
status.ext_gallery_copy_error = -3
status.ext_gallery_copy_error_filename = last_name_except_ext
return False
tmp_w, tmp_h = utils.get_img_size(name)
#print '### IMAGE SIZE', tmp_w, tmp_h
if tmp_w * tmp_h > 640* 480:
if self.image_dir == config.usb_dir:
src_name = config.usb_dir+last_name
else:
src_name = config.sdmmc_dir+last_name
#src_name = '\"' + src_name + '\"'
#dst_name = '\"' + dst_name + '\"'
try:
src_name = unicode(src_name, 'euc-kr').encode('utf-8')
except:
print 'encoding error src'
pass
#dst_name = unicode(dst_name, 'euc-kr').encode('utf-8')
res = utils.image_file_resize(src_name, dst_name, 640, 480)
#print '### image_file_resize', src_name, dst_name, res
# resize 실패 시 - unsupported format
if res != 1:
status.ext_gallery_copy_error = -3
status.ext_gallery_copy_error_filename = last_name_except_ext
return False
else:
#cmd = 'cp %s %s'%(name, dst_name)
#os.system(cmd)
os.system('cp \"%s\" \"%s\"'%(name, dst_name))
# copy 결과 파일 existance check
if not os.access(dst_name , os.R_OK):
status.ext_gallery_copy_error = -2
status.ext_gallery_copy_error_filename = last_name_except_ext
return False
else:
# copy 파일의 size 가 0 인 경우.
if utils.get_file_size(dst_name) == 0:
utils.remove(dst_name)
status.ext_gallery_copy_error = -2
status.ext_gallery_copy_error_filename = last_name_except_ext
return False
else:
pass_count += 1
if sel_count == pass_count:
status.ext_gallery_copy_error = -1
status.ext_gallery_copy_error_filename = last_name_except_ext
return False
return True
def sort(self, isshow=True):
if setting.photo_sort_rule == 0: # name
def sort_func(x,y):
return cmp(x[0].lower(), y[0].lower())
elif setting.photo_sort_rule == 1: # size
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return cmp(x[sort_col], y[sort_col])
else: # date
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return -(cmp(x[sort_col], y[sort_col]))
self.lists.sort(sort_func)
self.photo_index = 0
if isshow:
self.ui.set_preview(self.get_current_file())
def get_current_name(self):
name = self.lists[self.photo_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
return name
def get_detail(self):
photo_file = self.get_current_file()
import time, ntptime
stat_image = os.stat(photo_file)
atime = os.stat(photo_file)[stat.ST_ATIME]
mtime = os.stat(photo_file)[stat.ST_MTIME]
ctime = time.localtime(atime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
ctime = time.localtime(mtime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
size = (stat_image[6] + 1023)/ 1024
name = photo_file.split('/')[-1]
w, h = utils.get_img_size(photo_file)
return (name, date, '%dKB' % size, "%dx%d" % (w, h))
def handle_key(self, key):
if key == config.Menu1:
if self.check_selected_any():
self.popup_init()
self.popup_show()
runtime.evas.render_now()
# flash memory full check
free_flash = utils.get_free_flash_memory()
#print "[yylee debug] free_flash", free_flash
if free_flash < config.media_min_free_storage:
self.popup_hide()
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return False
def cb():
runtime.manager.back_stage('select external album')
return
def cb_back():
runtime.manager.back_stage()
return
if self.copy_selected_files() == True:
self.popup_hide()
stage = NotifyStage(_('Selected photo copied'), uiconfig.baloon_phonebook_icon, cb=cb)
runtime.manager.change_stage(stage)
else:
msg = ''
try:
err_file = unicode(status.ext_gallery_copy_error_filename, 'euc-kr').encode('utf-8')
except:
err_file = status.ext_gallery_copy_error_filename
err_file = utils.cut_text(err_file, 160, uiconfig.baloon_text_font[1], with_punc=True)[0]
if status.ext_gallery_copy_error == -1:
msg = '\"'+err_file+'\"'+_('already exist.')
elif status.ext_gallery_copy_error == -2:
msg = '\"'+err_file+'\"'+_('copy failed.')
elif status.ext_gallery_copy_error == -3:
msg = '\"'+err_file+'\"'+_('cannot be copied.')
elif status.ext_gallery_copy_error == -4:
msg = '\"'+err_file+'\"'+_('Not enough space to store data')
self.popup_hide()
stage = NotifyStage(msg, uiconfig.baloon_phonebook_icon, cb=cb_back)
runtime.manager.stack_stage(stage)
else:
def cb():
runtime.manager.back_stage()
return
stage = NotifyStage(_('No photo\n selected.'), uiconfig.baloon_phonebook_icon, cb=cb)
runtime.manager.stack_stage(stage)
elif key == config.Menu4 or key=='CLR':
runtime.manager.back_stage('select external album')
elif key == 'Up':
self.change_photo(-1)
return self.ui.handle_key(key)
elif key == 'Down':
self.change_photo(+1)
return self.ui.handle_key(key)
elif key == config.ok or key == config.Menu2:
return ExtPhotoGalleryCheckListStage.handle_key(self,key)
else:
return False
return True
class _PhotoGalleryStage(Stage):
name = 'photo gallery'
def __init__(self, photo_type, dirname, lists, mms_mode=0, ipemailMessage=None, isshow=True, file=None):
#status.supervision_not_allowed = 1
self.mms_mode=mms_mode
self.ipemailMessage = ipemailMessage
titles = {'taken':_('PHOTO GALLERY'), \
'picture':_('PICTURES'), 'wallpaper':_('WALLPAPERS'), \
'vdc': _("VIDEOPHONE'S IMAGES")}
self.preview_flag = 0
self.photo_type = photo_type
self.image_dir = dirname
if status.snapshot_editing:
self.ui = baseui.GalleryUI(_('SET'), _('BACK'))
else:
if mms_mode or ipemailMessage:
self.ui = baseui.GalleryUI(_('MENU'), _('WIDE SIZE'), _('LIST'), _('BACK'))
else:
self.ui = baseui.GalleryUI(_('MENU'), _('WIDE SIZE'), _('LIST'), _('BACK'))
if file != None:
isshow=False
self.init_list(lists, isshow)
if file != None:
try:
file = unicode(file, 'utf-8').encode('euc-kr')
except:
pass
self.set_file(file)
def set_file(self, file):
for i, f in enumerate(self.lists):
if f[0] == file:
self.photo_index = i
self.ui.set_preview(self.get_current_file())
return
def init_list(self, lists, isshow=True):
self.photo_index = 0
self.photo_number = len(lists)
self.lists = lists
self.sort(isshow)
def handle_key(self, key):
if key == config.Menu1:
if self.ipemailMessage:
from ipemailstage import IpEmailAttachNotify
runtime.manager.stack_stage(IpEmailAttachNotify(_('Photo attached'), \
unicode(self.get_current_file())))
return True
if self.mms_mode:
from mmsmanager import mmsmgr
from mmscomposestage import MMSMessageNotify, MMSMessageNotify_cb, MMSSize_excess
from mmsconfig import MEDIA_IMAGE
mmsmessage = ''
if self.mms_mode == 1:
if self.photo_type == 'taken':
mmsmessage = _('Photo')
elif self.photo_type == 'picture':
mmsmessage = _('Picture')
elif self.photo_type == 'wallpaper':
mmsmessage = _('Wallpaper')
elif self.photo_type == 'vdc':
mmsmessage = _('Image')
mmsmessage = mmsmessage + ' ' + _('inserted')
else:
mmsmessage = _('Image modified')
if mmsmgr.setmedia(MEDIA_IMAGE, self.get_current_file()):
runtime.manager.change_stage(MMSMessageNotify(mmsmessage, MMSMessageNotify_cb))
else:
MMSSize_excess()
else:
if status.snapshot_editing:
from phonedb import phonedb
stage = runtime.manager.find_stage('modify kind')
if stage:
phonedb.set_snapshot(self.get_current_file())
def cb():
runtime.manager.back_stage('modify kind')
stage = NotifyStage(_('Image modified'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
else:
status.phone_item.snapshot = self.get_current_file()
def cb():
runtime.manager.back_stage('add last')
stage = NotifyStage(_('Image assigned'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
else:
runtime.manager.stack_stage(PhotoGalleryOptionStage(self.photo_type))
elif key == config.Menu4 or key == 'CLR':
stage = runtime.manager.find_stage( 'my album')
if stage != None:
runtime.manager.back_stage( 'my album')
else:
stage = runtime.manager.find_stage('MMToolsStage')
if stage != None:
runtime.manager.back_stage('MMToolsStage')
else:
runtime.manager.back_stage()
elif key == config.Menu3:
stage = PhotoGalleryListStage(self.photo_type)
#runtime.manager.stack_stage(stage)
runtime.manager.change_stage(stage)
elif key == config.Menu2 or key == 'OK':
if self.preview_flag == 0:
self.preview_flag = 1
runtime.rb.set_text(_('NORMAL SIZE'))
else:
self.preview_flag = 0
runtime.rb.set_text(_('WIDE SIZE'))
'''
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
'''
if len(self.lists) == 1:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
elif self.preview_flag == 0:
self.ui.small_arrow_left.show()
self.ui.small_arrow_right.show()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
else:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.show()
self.ui.large_arrow_right.show()
self.ui.set_preview(self.get_current_file(), self.preview_flag)
elif key == 'Left':
if len(self.lists) == 1:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
elif self.preview_flag == 0:
self.ui.small_arrow_left.show()
self.ui.small_arrow_right.show()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
else:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.show()
self.ui.large_arrow_right.show()
self.change_photo(-1,self.preview_flag)
elif key == 'Right':
if len(self.lists) == 1:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
elif self.preview_flag == 0:
self.ui.small_arrow_left.show()
self.ui.small_arrow_right.show()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
else:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.show()
self.ui.large_arrow_right.show()
self.change_photo(+1,self.preview_flag)
else:
return False
return True
def change_photo(self, delta, pre_flag=0):
self.photo_index += delta
if self.photo_index < 0:
self.photo_index = self.photo_number - 1
elif self.photo_index >= self.photo_number:
self.photo_index = 0
self.ui.set_preview(self.get_current_file(),pre_flag)
def get_current_file(self):
return self.image_dir + self.lists[self.photo_index][0]
def sort(self, isshow=True):
if setting.photo_sort_rule == 0: # name
def sort_func(x,y):
return cmp(x[0].lower(), y[0].lower())
elif setting.photo_sort_rule == 1: # size
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return cmp(x[sort_col], y[sort_col])
else: # date
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return -(cmp(x[sort_col], y[sort_col]))
self.lists.sort(sort_func)
self.photo_index = 0
if isshow:
self.ui.set_preview(self.get_current_file(),self.preview_flag)
def get_current_name(self):
name = self.lists[self.photo_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
return name
def rename_is_ok(self, name):
old = self.get_current_file()
ext = utils.get_ext(old)
name = name + '.' + ext
new_name = self.image_dir + name
try:
new_name = unicode(new_name , 'utf-8').encode('euc-kr')
except:
pass
import os.path
if os.path.exists(new_name):
return False
return True
def is_slide_file(self, filename):
for slide in setting.slideshow_list:
if filename == slide:
return True
return False
def remove_slide_file(self, filename):
setting.slideshow_list.remove(filename)
setting.save()
return True
def rename_slide_file(self, org_filename, new_filename):
if self.is_slide_file(org_filename):
self.remove_slide_file(org_filename)
setting.slideshow_list.append(new_filename)
setting.save()
return True
def rename(self, name):
old = self.get_current_file()
ext = utils.get_ext(old)
name = name + '.' + ext
new_name = self.image_dir + name
try:
old_filename = unicode(old, 'utf-8').encode('euc-kr')
except:
old_filename = old
try:
new_filename = unicode(new_name , 'utf-8').encode('euc-kr')
except:
new_filename = new_name
#print "[yylee debug] rename B %s : %s"%(old_filename, new_filename)
if utils.rename(old_filename, new_filename):
self.lists[self.photo_index] = (name,) + self.lists[self.photo_index][1:]
self.ui.set_preview(self.get_current_file(),self.preview_flag)
self.rename_slide_file(old_filename, new_filename)
else:
if config.mm_debug:
print 'Rename failed'
if config.mm_debug:
print 'FIXME: Do Photo Rename: current index = ', self.photo_index
def delete(self):
name = self.get_current_file()
try:
name = unicode(name , 'utf-8').encode('euc-kr')
except:
pass
#슬라이드쇼 지정 파일인 경우 슬라이드 리스트에서 제외
if self.is_slide_file(name):
self.remove_slide_file(name)
if utils.remove(name):
del self.lists[self.photo_index]
self.photo_number = len(self.lists)
if self.photo_number > 0:
if self.photo_index >= self.photo_number:
self.photo_index = self.photo_number - 1
self.ui.set_preview(self.get_current_file(), self.preview_flag)
else:
pass
if config.mm_debug:
print 'FIXME: Do Photo Delete: current index = ', self.photo_index
def get_detail(self):
photo_file = self.get_current_file()
import time, ntptime
stat_image = os.stat(photo_file)
atime = os.stat(photo_file)[stat.ST_ATIME]
# print 'atime**********************', atime
mtime = os.stat(photo_file)[stat.ST_MTIME]
# print 'atime**********************', mtime
ctime = time.localtime(atime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
# print 'atime', date
ctime = time.localtime(mtime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
# print 'mtime', date
size = (stat_image[6] + 1023)/ 1024
#MMW
# import stat
# atime = os.stat(photo_file)[stat.ST_ATIME]
# print 'photo_file', photo_file
# print 'get_detail', atime
# dtime = time.ctime(atime)
# print 'dtime', dtime
#end of MMW
name = photo_file.split('/')[-1]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
w, h = utils.get_img_size(photo_file)
return (name, date, '%dKB' % size, "%dx%d" % (w, h))
def set_background(self):
if config.mm_debug:
print 'FIXME: Do Photo set background: current index = ', self.photo_index
full_path = self.get_current_file()
try:
full_path = unicode(full_path , 'utf-8').encode('euc-kr')
except:
pass
setting.bg_image_file = full_path
import baseui
baseui.change_bg(runtime.evas, full_path)
def set_privacy(self):
if config.mm_debug:
print 'FIXME: Do Photo set privacy: current index = ', self.photo_index
full_path = self.get_current_file()
setting.privacy_category = 2
setting.privacy_image_file = full_path
# 리부팅 시 rc.local에서 /usr/local/lgvp/images/private.jpg'를 '/mfs/ram/images/private.jpg로 복사함.
#command = 'cp \"%s\" \"%s\"' % (full_path, '/usr/local/lgvp/images/private.jpg')
#os.system(command)
# 지금 설정한 것이 바로 다음 call 부터 적용 되게...
#command = 'cp \"%s\" \"%s\"' % (full_path, '/mfs/ram/images/private.jpg')
#os.system(command)
import shutil
shutil.copyfile(full_path, '/usr/local/lgvp/images/private.jpg')
shutil.copyfile(full_path,'/mfs/ram/images/private.jpg')
setting.save()
def show(self):
if len(self.lists) == 0:
if config.mm_debug:
print 'FIXME: list len = 0 in Photo Gallery'
runtime.manager.back_stage()
return
# 이미지가 하나만 있을 경우에는 arrow 표시 안함
#self.ui.show_arrow(len(self.lists) > 1)
Stage.show(self)
if len(self.lists) == 1:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
elif self.preview_flag == 0:
self.ui.small_arrow_left.show()
self.ui.small_arrow_right.show()
self.ui.large_arrow_left.hide()
self.ui.large_arrow_right.hide()
else:
self.ui.small_arrow_left.hide()
self.ui.small_arrow_right.hide()
self.ui.large_arrow_left.show()
self.ui.large_arrow_right.show()
if self.preview_flag == 0:
runtime.rb.set_text(_('WIDE SIZE'))
else:
runtime.rb.set_text(_('NORMAL SIZE'))
class _SlideshowSelectStage(SlideshowSelectCheckListStage):
name = 'slideshow photo gallery'
def __init__(self,photo_type, dirname, lists, mms_mode=0, ipemailMessage=None, isshow=True):
#status.supervision_not_allowed = 1
self.mms_mode=mms_mode
self.ipemailMessage = ipemailMessage
titles = {'taken':_('PHOTO GALLERY'), \
'picture':_('PICTURES'), 'wallpaper':_('WALLPAPERS'), \
'vdc': _("VIDEOPHONE'S IMAGES")}
self.photo_type = photo_type
self.image_dir = dirname
self.lists = lists
self.photo_index = 0
self.photo_number = len(self.lists)
self.sort(isshow=False)
self.choice = []
self.preview_flag = 0
for lst in self.lists:
name = lst[0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
name = name
self.choice.append(name)
titleimage = uiconfig.slideshow_select_title
SlideshowSelectCheckListStage.__init__(self,self.choice, titleimage)
#self.ui.set_preview(self.get_current_file())
#self.get_slide_file()
def preview_cb():
self.ui.set_preview(self.get_current_file())
self.get_slide_file()
self._preview_tag = None
self._preview_tag = utils.Timer(100, preview_cb)
def init_list(self, lists, isshow=True):
self.photo_index = 0
self.photo_number = len(lists)
self.sort(isshow)
def change_photo(self, delta):
self.photo_index += delta
if self.photo_index < 0:
self.photo_index = self.photo_number - 1
elif self.photo_index >= self.photo_number:
self.photo_index = 0
self.ui.set_preview(self.get_current_file())
def get_current_file(self):
return self.image_dir + self.lists[self.photo_index][0]
# KA: [20080509] slide show
def get_slide_file(self):
files = setting.slideshow_list #now only taken folder --just write name
#if not files:
if not files or not self.lists:
return
select_index = [] # 현재 list에서 slideshow 로 지정된 파일의 index
sel_idx = 0
for lst in self.lists:
name = self.image_dir + lst[0]
try:
index = files.index(name)
select_index.append(sel_idx)
except:
pass
sel_idx += 1
if select_index:
#for i in range(len(select_index)):
for i in select_index:
self.ui.set_check(i, True) # choinhwa 20081017 기 설정된 리스트에 체크박스 표시된 상태로 시작.
self.ui.set_slide_check(i, True)
def is_slide_file(self, filename):
for slide in setting.slideshow_list:
if filename == slide:
return True
return False
def remove_slide_file(self, filename):
setting.slideshow_list.remove(filename)
setting.save()
return True
def rename_slide_file(self, org_filename, new_filename):
if self.is_slide_file(org_filename):
self.remove_slide_file(org_filename)
setting.slideshow_list.append(new_filename)
setting.save()
return True
def set_slide_file(self):
#/usr/local/lgvp/생략
#for item in range(len(lists)):
files = []
sel_count = 0
for i in range(self.photo_number):
if self.ui.list.checked[i]:
name = self.image_dir + self.lists[i][0]
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
files.append(name)
sel_count += 1
if sel_count == 0:
return 0
setting.set_slideshow_list(files)
return sel_count
# KA: [20080509] slide show ==
def sort(self, isshow=True):
'''
if setting.photo_sort_rule == 0: # name
def sort_func(x,y):
return cmp(x[0].lower(), y[0].lower())
elif setting.photo_sort_rule == 1: # size
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return cmp(x[sort_col], y[sort_col])
else: # date
def sort_func(x,y,sort_col=setting.photo_sort_rule):
return -(cmp(x[sort_col], y[sort_col]))
self.lists.sort(sort_func)
'''
print 'before', self.lists
# 최근 사진이 제일 위로 오도록 정렬.
def sort_func(x, y, sort_col = setting.photo_sort_rule):
return cmp(y[2], x[2])
self.lists.sort(sort_func)
print 'after', self.lists
self.photo_index = 0
if isshow:
self.ui.set_preview(self.get_current_file())
def get_current_name(self):
name = self.lists[self.photo_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
return name
def rename_is_ok(self, name):
old = self.get_current_file()
ext = utils.get_ext(old)
name = name + '.' + ext
new_name = self.image_dir + name
try:
new_name = unicode(new_name, 'utf-8').encode('euc-kr')
except:
pass
import os.path
if os.path.exists(new_name):
return False
return True
def rename(self, name):
old = self.get_current_file()
ext = utils.get_ext(old)
name = name + '.' + ext
new_name = self.image_dir + name
try:
old_filename = unicode(old, 'utf-8').encode('euc-kr')
except:
old_filename = old
try:
new_filename = unicode(new_name , 'utf-8').encode('euc-kr')
except:
new_filename = new_name
#print "[yylee debug] rename L %s : %s"%(old_filename, new_filename)
#if utils.rename(old, new_name):
if utils.rename(old_filename ,new_filename):
self.lists[self.photo_index] = (name,) + self.lists[self.photo_index][1:]
#self.ui.set_preview(self.get_current_file(),self.preview_flag)
self.ui.set_preview(self.get_current_file())
self.rename_slide_file(old_filename, new_filename)
else:
if config.mm_debug:
print 'Rename failed'
if config.mm_debug:
print 'FIXME: Do Photo Rename: current index = ', self.photo_index
def delete(self):
name = self.get_current_file()
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
#슬라이드쇼 지정 파일인 경우 슬라이드 리스트에서 제외
if self.is_slide_file(name):
self.remove_slide_file(name)
if utils.remove(name):
del self.lists[self.photo_index]
self.photo_number = len(self.lists)
if self.photo_number > 0:
if self.photo_index >= self.photo_number:
self.photo_index = self.photo_number - 1
self.ui.set_preview(self.get_current_file())
else:
pass
if config.mm_debug:
print 'FIXME: Do Photo Delete: current index = ', self.photo_index
def delete_selected(self):
#/usr/local/lgvp/생략
#for item in range(len(lists)):
for i in range(self.photo_number):
if self.ui.list.checked[i]:
name = self.image_dir + self.lists[i][0]
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
#cmd = 'rm -f %s'%(
#os.system(cmd)
os.remove(name)
def is_selected(self):
selected = 0
for i in range(self.photo_number):
if self.ui.list.checked[i]:
selected += 1
return selected
def get_detail(self):
photo_file = self.get_current_file()
import time, ntptime
stat_image = os.stat(photo_file)
atime = os.stat(photo_file)[stat.ST_ATIME]
mtime = os.stat(photo_file)[stat.ST_MTIME]
ctime = time.localtime(atime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
ctime = time.localtime(mtime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
size = (stat_image[6] + 1023) / 1024
name = photo_file.split('/')[-1]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
w, h = utils.get_img_size(photo_file)
return (name, date, '%dKB' % size, "%dx%d" % (w, h))
def set_background(self):
if config.mm_debug:
print 'FIXME: Do Photo set background: current index = ', self.photo_index
full_path = self.get_current_file()
try:
full_path = unicode(full_path, 'utf-8').encode('euc-kr')
except:
pass
setting.bg_image_file = full_path
import baseui
baseui.change_bg(runtime.evas, full_path)
def set_privacy(self):
if config.mm_debug:
print 'FIXME: Do Photo set privacy: current index = ', self.photo_index
full_path = self.get_current_file()
setting.privacy_category = 2
setting.privacy_image_file = full_path
# 리부팅 시 rc.local에서 /usr/local/lgvp/images/private.jpg'를 '/mfs/ram/images/private.jpg로 복사함.
#command = 'cp \"%s\" \"%s\"' % (full_path, '/usr/local/lgvp/images/private.jpg')
#os.system(command)
# 지금 설정한 것이 바로 다음 call 부터 적용 되게...
#command = 'cp \"%s\" \"%s\"' % (full_path, '/mfs/ram/images/private.jpg')
#os.system(command)
import shutil
shutil.copyfile(full_path, '/usr/local/lgvp/images/private.jpg')
shutil.copyfile(full_path,'/mfs/ram/images/private.jpg')
setting.save()
def handle_key(self, key):
if key == config.Menu1:
if self.set_slide_file() > 0 :
setting.save()
#stage = NotifyStage(_('Slideshow image set'), uiconfig.baloon_phonebook_icon)
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Slideshow image set.'), uiconfig.baloon_phonebook_icon)
runtime.manager.change_stage(stage)
else:
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Select images for digital photo album.'), uiconfig.baloon_phonebook_icon)
runtime.manager.stack_stage(stage)
elif key == config.Menu4 or key == 'CLR':
stage = runtime.manager.find_stage('screensaver setting')
if stage != None:
runtime.manager.back_stage('screensaver setting')
else:
runtime.manager.back_stage()
elif key == config.Menu3:
pass
elif key == 'Up':
self.change_photo(-1)
return self.ui.handle_key(key)
elif key == 'Down':
self.change_photo(+1)
return self.ui.handle_key(key)
elif key == config.Menu2 or key == 'OK':
return SlideshowSelectCheckListStage.handle_key(self,key)
else:
return False
return True
class TakenPhotoStage(ListStage):
icon = uiconfig.image_image_sound_image_icon
def __init__(self):
self.title = _('TAKEN PHOTOS')
self.choice = _('Add new'), _('Photo gallery')
ListStage.__init__(self, self.choice)
status.supervision_not_allowed = 1
def activate(self, index):
if index == 0:
if status.phonebook_in_calling:
stage = NotifyStage(_('Taking photo is not allowed during conversation.'), icon=uiconfig.baloon_image_sound_image_icon)
runtime.manager.stack_stage(stage)
return
# 남은 공간 체크
if not utils.check_free_storage():
runtime.manager.stack_stage(StorageShortStage(uiconfig.baloon_photo_icon))
return
if config.snap_shot_max <= utils.get_file_count(config.image_taken_dir):
runtime.manager.stack_stage(NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon))
return
if config.mm_debug:
print 'photo capturer'
if status.videocall_mode == status.VideoCallConnected:
import videosetting
stage = videosetting.SnapshotStage(from_phonebook=True)
else:
import mmtools
stage = mmtools.PhotoPreviewStage
runtime.manager.stack_stage(stage)
elif index == 1:
stage = PhotoGalleryStage('taken')
runtime.manager.stack_stage(stage)
def destroy(self):
ListStage.destroy(self)
status.supervision_not_allowed = 0
class ReceivedImagesStage(ListStage):
icon = uiconfig.image_image_sound_image_icon
def __init__(self):
self.title = _('RECEIVED IMAGES')
self.choice = _('Wallpapers'), _('Pictures')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
stage = PhotoGalleryStage('wallpaper')
else:
stage = PhotoGalleryStage('picture')
runtime.manager.stack_stage(stage)
class ImagesStage(ListStage):
icon = uiconfig.image_image_sound_image_icon
def __init__(self):
self.title = _('IMAGES')
self.choice = _('Taken photos'), _("Videophone's images"), _('Received images')
ListStage.__init__(self)
def activate(self, index):
if index == 1:
stage = PhotoGalleryStage('vdc')
else:
stage = (TakenPhotoStage, None, ReceivedImagesStage)[index]
runtime.manager.stack_stage(stage)
class ImagesForPhonebookStage(ListStage):
icon = uiconfig.image_image_sound_image_icon
def __init__(self):
self.title = _('ASSIGN IMAGE')
self.choice = _('Taken photos'), _("Videophone images")
status.snapshot_editing = True
ListStage.__init__(self)
status.supervision_not_allowed = 1
def activate(self, index):
if index == 1:
stage = PhotoGalleryStage('vdc')
else:
stage = (TakenPhotoStage, None, ReceivedImagesStage)[index]
runtime.manager.stack_stage(stage)
def destroy(self):
status.snapshot_editing = False
ListStage.destroy(self)
status.supervision_not_allowed = 0
class DeleteReceivedImageStage(ListStage):
icon = uiconfig.image_image_sound_image_delete_icon
def __init__(self):
self.title = _('DELETE')
self.choice = _('Wallpapers'), _('Pictures')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
dirname, lists = utils.get_image_gallery_list('wallpaper')
if len(lists) == 0:
runtime.manager.stack_stage(NotifyStage(_('No wallpapers'), uiconfig.baloon_photo_icon))
return
message = _('Delete all wallpapers?')
else:
dirname, lists = utils.get_image_gallery_list('picture')
if len(lists) == 0:
runtime.manager.stack_stage(NotifyStage(_('No pictures'), uiconfig.baloon_photo_icon))
return
message = _('Delete all pictures?')
def yes():
if index == 0:
utils.remove_dir(utils.get_image_dir('wallpaper'))
stage = NotifyStage(_('All wallpapers deleted'), uiconfig.baloon_image_delete_icon)
else:
utils.remove_dir(utils.get_image_dir('picture'))
stage = NotifyStage(_('All pictures deleted'), uiconfig.baloon_image_delete_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = OkNoStage(message, yes, no, '', uiconfig.baloon_image_delete_icon)
runtime.manager.change_stage(stage)
class ImageDeleteStage(ListStage):
icon = uiconfig.image_image_sound_image_delete_icon
def __init__(self):
self.title = _('DELETE')
self.choice = _('Taken photos'), _('All images')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
dirname, lists = utils.get_image_gallery_list('taken')
if len(lists) == 0:
runtime.manager.stack_stage(NotifyStage(_('No taken photos'), uiconfig.baloon_photo_icon))
return
message = _('Delete all taken photos?')
def yes():
utils.remove_dir(utils.get_image_dir('taken'))
stage = NotifyStage(_('All taken photos deleted'),uiconfig.baloon_image_delete_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = OkNoStage(message, yes, no, '', uiconfig.baloon_image_delete_icon)
runtime.manager.stack_stage(stage)
#ka...3800 malaga 2007.04.02
# elif index == 1:
# stage = DeleteReceivedImageStage()
# runtime.manager.stack_stage(stage)
else:
dirname, lists1 = utils.get_image_gallery_list('taken')
dirname, lists2 = utils.get_image_gallery_list('wallpaper')
dirname, lists3 = utils.get_image_gallery_list('picture')
if len(lists1)+len(lists2)+len(lists3) == 0:
runtime.manager.stack_stage(NotifyStage(_('No images'), uiconfig.baloon_photo_icon))
return
message = _('Delete all images?')
def yes():
if config.mm_debug:
print 'FIXME: delete all images!!'
utils.remove_dir(utils.get_image_dir('taken'))
utils.remove_dir(utils.get_image_dir('picture'))
utils.remove_dir(utils.get_image_dir('wallpaper'))
stage = NotifyStage(_('All images deleted'), uiconfig.baloon_image_delete_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = OkNoStage(message, yes, no, '', uiconfig.baloon_image_delete_icon)
runtime.manager.stack_stage(stage)