def contact_details(self, emission, source, param, item): number = str(item[0].tel) name = unicode(item[0].name).encode("utf-8") detail_layout = gui.elm_layout(self.window.window, self.edje_file, "contact_details") edje_obj = detail_layout.elm_obj.edje_get() edje_obj.part_text_set('name-text',str(name).encode('utf8')) edje_obj.part_text_set('number-text',str(number).encode('utf8')) detail_layout.elm_obj.show() self.window.main_layout.elm_obj.hide() self.window.bg.elm_obj.content_set("content-swallow", detail_layout.elm_obj) def _update_values(*args, **kargs): contact = args[0] edje = args[1] edje.part_text_set('name-text',unicode(contact.name).encode('utf8')) edje.part_text_set('number-text',str(contact.tel).encode('utf8')) self.contacts.emit("inserted") oid = item[0].connect('modified', _update_values, edje_obj) ##add callback for delete button edje_obj.signal_callback_add("delete_contact", "*", self.delete_contact, item[0], detail_layout) ##add callback for edit buttons edje_obj.signal_callback_add("*", "edit", self.edit_contact, item[0], detail_layout) ##add callback for calling edje_obj.signal_callback_add("call_contact", "*", self.call_contact, item[0]) ##add callbacks for back button edje_obj.signal_callback_add("close_details", "*", detail_layout.delete) edje_obj.signal_callback_add("close_details", "*", self.window.restore_orig)
def create_win(self): if self.win == None: self.win = gui.elm_window() self.layout = gui.elm_layout(self.win, self.edje_file, "busywin") self.win.elm_obj.resize_object_add(self.layout.elm_obj) self.win.elm_obj.show() yield "me"
def msg_details(self, emission, signal, source, item): number = item[0].peer.get_text() text = item[0].text timestamp = item[0].timestamp.local_repr() detail_layout = gui.elm_layout(self.window.window, self.edje_file, "message_details") edje_obj = detail_layout.elm_obj.edje_get() edje_obj.part_text_set('name-text', unicode(number).encode('utf8')) edje_obj.part_text_set('name-info', unicode(timestamp).encode('utf8')) detail_layout.elm_obj.show() textbox = gui.elementary.Entry(self.window.window.elm_obj) textbox.entry_set(unicode(text.value).replace('&', '&')) textbox.size_hint_weight_set(1.0, 1.0) textbox.scale_set(1.5) textbox.editable_set(False) textbox.line_wrap_set(True) textbox.show() sc = gui.elementary.Scroller(self.window.window.elm_obj) sc.content_set(textbox) detail_layout.elm_obj.content_set('message', sc) sc.show() self.window.main_layout.elm_obj.hide() self.window.bg.elm_obj.content_set("content-swallow", detail_layout.elm_obj) ##add callback for delete button edje_obj.signal_callback_add("delete_message", "*", self.delete_msg, item[0], detail_layout) ##add callback for messaging buttons edje_obj.signal_callback_add("*", "messaging", self.adv_msg, item, detail_layout) ##add callbacks for back button edje_obj.signal_callback_add("close_details", "*", detail_layout.delete) edje_obj.signal_callback_add("close_details", "*", self.window.restore_orig) if item[0].direction == 'in' and item[0].status == 'unread': item[0].read() self.item_list._redraw_view()
def run(self, parent, number, name, contact, mode, layout, *args, **kargs): try: self.edje_file = os.path.join(os.path.dirname(__file__), 'people.edj') number_layout = 0 text_layout = 0 send = 0 if contact != None: name = unicode(contact.name).encode("utf-8") number = str(contact.tel) layout.elm_obj.hide() if number == "": full = True else: full = False while True: if full or mode == "number": parent.window.elm_obj.keyboard_mode_set(gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) if number_layout == 0: number_layout = gui.elm_layout(parent.window, self.edje_file, "edit_number") edje_obj = number_layout.elm_obj.edje_get() edje_obj.part_text_set('num_field-text', number) number_layout.elm_obj.show() parent.main_layout.elm_obj.hide() else: number_layout.elm_obj.show() parent.bg.elm_obj.content_set("content-swallow", number_layout.elm_obj) i, args = yield tichy.WaitFirst(Wait(number_layout, 'back'), Wait(number_layout, 'next')) if i == 0: #back print "breaking" break if i == 1: #next number_layout.elm_obj.hide() number = edje_obj.part_text_get('num_field-text') if mode == "number": send = 1 break if mode != "number": parent.window.elm_obj.keyboard_mode_set(gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_ON) if text_layout == 0: text_layout = gui.elm_layout(parent.window, self.edje_file, "CreateContact") edje_obj = text_layout.elm_obj.edje_get() text_layout.elm_obj.show() parent.main_layout.elm_obj.hide() textbox = gui.elementary.Entry(parent.window.elm_obj) textbox.single_line_set(True) textbox.color_set(255, 255, 255, 255) textbox.entry_set(name) textbox.size_hint_weight_set(1.0, 1.0) text_layout.elm_obj.content_set('entry', textbox) textbox.editable_set(True) else: text_layout.elm_obj.show() parent.bg.elm_obj.content_set("content-swallow", text_layout.elm_obj) textbox.focus() textbox.show() i, args = yield tichy.WaitFirst(Wait(text_layout, 'back'), Wait(text_layout, 'save')) if i == 0: #back if full: text_layout.elm_obj.hide() parent.window.elm_obj.keyboard_mode_set(gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) continue else: break if i == 1: #save send = 1 break if send == 1: if text_layout: text_layout.elm_obj.edje_get().signal_emit("save-notice","*") contacts_service = tichy.Service.get('Contacts') if contact not in contacts_service.contacts: name = unicode(textbox.entry_get()).replace("<br>","").encode("utf-8") new_contact = contacts_service.create(name.strip(),tel=str(number)) contacts_service.add(new_contact) contacts_service.contacts.emit('inserted') else: if mode == "name": name = unicode(textbox.entry_get()).replace("<br>","").encode("utf-8") logger.info("updating name") contact.name = name.strip() elif mode == "number": logger.info("updating number") contact.tel = number layout.elm_obj.show() parent.window.elm_obj.keyboard_mode_set(gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) if number_layout: number_layout.delete() if text_layout: text_layout.delete() parent.restore_orig() ret = "done" yield ret except Exception, e: print e print Exception
def run(self, parent=None, standalone=False): #logger.info('launcher launching') self.ready = 0 self.standalone = tichy.config.getboolean('standalone', 'activated', False) self.advanced = tichy.config.getboolean('advanced-mode', 'activated', False) self.settings = tichy.config.getboolean('settings', 'activated', False) self.edje_file = os.path.join(os.path.dirname(__file__), 'paroli-launcher.edj') self.window = gui.elm_layout_window(self.edje_file, "main", None, None, True) self.edje_obj = self.window.main_layout if hasattr(self.window.bg_m, "tb"): self.window.bg_m.tb.elm_obj.edje_get().signal_emit( "hide_clock", "*") self.active_app = None if self.advanced == False: ##create list of apps from list of registered apps apps = ['Paroli-I/O', "Msgs", "Paroli-Dialer", "Paroli-Contacts"] else: apps = [] for app in tichy.Application.subclasses: if app.category == 'launcher': logger.info("adding - %s to launcher", app.name) apps.append(app) box = gui.elm_box(self.window.window.elm_obj) self.app_objs = {} apps.sort(key=lambda x: x.name) # sort apps alphabetically. for app in apps: logger.info("app: %s %s", str(app), type(app)) link_obj = gui.elm_layout(self.window.window, self.edje_file, 'link') link_obj.elm_obj.size_hint_min_set(400, 60) box.elm_obj.pack_end(link_obj.elm_obj) link_obj.elm_obj.show() link_obj.Edje.part_text_set("texter", app.name) link_obj.Edje.part_text_set( "testing_textblock", "<normal>" + app.name + "</normal><small></small>") if hasattr(app, 'launcher_info'): attr = app.launcher_info else: attr = 0 link_obj.elm_obj.show() link_obj.add_callback("*", "launch_app", self.launch_app) app_obj = [link_obj, attr] self.app_objs[app.name] = app_obj box.elm_obj.show() self.edje_obj.elm_obj.content_set("link-box", box.elm_obj) self.storage = tichy.Service.get('TeleCom2') self.edje_obj.add_callback("*", "launch_app", self.launch_app) self.edje_obj.add_callback("*", "embryo", self.embryo) self.edje_obj.add_callback("quit_app", "*", self.quit_app) ##current hack #self.standalone = True self.msg = tichy.Service.get('Messages') if self.msg.ready == False: self.msg.connect('ready', self.unblock_screen) else: self.unblock_screen() self.busywin = tichy.Service.get('BusyWin') self.button = tichy.Service.get('Buttons') self.aux_btn_profile_conn = self.button.connect( 'aux_button_pressed', self.switch_profile) if self.settings: self.aux_btn_settings_conn = self.button.connect( 'aux_button_held', self.open_settings) self.prefs = tichy.Service.get('Prefs') self.audio_service = tichy.Service.get('Audio') self.ussd = tichy.Service.get('Ussd') self.ussd.connect('incoming', self.incoming_ussd) self.systime = tichy.Service.get('SysTime') self.alarm = tichy.Service.get('Alarm') self.ready = 1 self.window.connect('block', self.block_edje) self.window.connect('unblock', self.unblock_edje) yield tichy.WaitFirst(tichy.Wait(self.window, 'backs'), tichy.Wait(self.window.window, 'closing')) self.dialog = tichy.Service.get("Dialog") keep_alive = yield self.dialog.option_dialog( "shutdown", "Keep paroli running in the background? Note: if you click no you will not be able to receive calls anymore", "YES", "no") print "keep_alive", keep_alive if keep_alive == "no": logger.info("keep alive set to no: %s", str(keep_alive)) tichy.mainloop.quit() else: logger.info("keep alive set to %s", str(keep_alive)) if self.window.window.elm_obj.is_deleted() == False: self.window.delete() # Don't forget to close the window
def run(self, parent, sms, mode, layout=None, *args, **kargs): self.dialog = tichy.Service.get("Dialog") try: self.edje_file = os.path.join(os.path.dirname(__file__), 'msgs.edj') number_layout = 0 text_layout = 0 send = 0 number = "" full = False pre_text = None self.window = parent if layout != None: layout.elm_obj.hide() if mode != "reply": full = True number = "" else: sms.text = "" while True: if full: parent.window.elm_obj.keyboard_mode_set( gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) if number_layout == 0: number_layout = gui.elm_layout(parent.window, self.edje_file, "edit_number") edje_obj = number_layout.elm_obj.edje_get() edje_obj.part_text_set('num_field-text', number) number_layout.elm_obj.show() parent.main_layout.elm_obj.hide() else: logger.info("back pressed in text") number_layout.elm_obj.show() edje_obj = number_layout.elm_obj.edje_get() edje_obj.signal_callback_add("num_field_pressed", "*", self.num_field_action) self.number_layout = number_layout parent.bg.elm_obj.content_set("content-swallow", number_layout.elm_obj) number_layout.connect("too_short", self.error_win, "number too short") i, args = yield tichy.WaitFirst( Wait(number_layout, 'back'), Wait(number_layout, 'next')) if i == 0: #back break if i == 1: #next number_layout.elm_obj.hide() number = edje_obj.part_text_get('num_field-text') sms.peer = number if sms.text == "" or mode == "forward": text_layout = gui.elm_layout(parent.window, self.edje_file, "CreateText") parent.window.elm_obj.keyboard_mode_set( gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_ON) text_layout.elm_obj.layer_set(99) edje_obj = text_layout.elm_obj.edje_get() text_layout.elm_obj.show() parent.main_layout.elm_obj.hide() parent.bg.elm_obj.content_set("content-swallow", text_layout.elm_obj) textbox = gui.elementary.Entry(parent.window.elm_obj) textbox.color_set(255, 255, 255, 255) if pre_text != None: textbox.entry_set(unicode(pre_text).encode("utf-8")) else: textbox.entry_set(unicode(sms.text).encode("utf-8")) self.counter(textbox, "event", text_layout) textbox.size_hint_weight_set(1.0, 1.0) sc = gui.elementary.Scroller(parent.window.elm_obj) sc.content_set(textbox) textbox.line_wrap_set(True) text_layout.elm_obj.content_set('entry', sc) sc.show() textbox.editable_set(True) textbox.focus() textbox.show() textbox.on_key_down_add(self.counter, text_layout) text_layout.connect("send_request", self.send_request, textbox) i, args = yield tichy.WaitFirst(Wait(text_layout, 'back'), Wait(text_layout, 'send')) if i == 0: #back if full: text_layout.elm_obj.hide() logger.info("win set False") parent.window.elm_obj.keyboard_mode_set( gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) pre_text = unicode( textbox.entry_get()).encode("utf-8").replace( "<br>", "") pre_text = pre_text.strip() textbox.on_key_down_del(self.counter) continue else: print "breaking" break if i == 1: #send send = 1 logger.info("win set False") parent.window.elm_obj.keyboard_mode_set( gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) break logger.info("broke loop") if send == 1: text = unicode(textbox.entry_get()).encode("utf-8").replace( "<br>", "") sms.text = text.strip() text_layout.elm_obj.edje_get().signal_emit("save-notice", "*") yield self.send_sms(sms) if number_layout: number_layout.delete() if text_layout: logger.info("deleting text layout") text_layout.delete() parent.window.elm_obj.keyboard_mode_set( gui.ecore.x.ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) if layout != None: layout.elm_obj.show() else: parent.restore_orig() ret = "done" yield ret except Exception, e: print e print Exception
def run(self, parent, number, name=None, layout=None): """show the Caller window :Parameters: parent : `tichy.gui.Widget` The parent window number : str | `tichy.Text` | Call object If the number is a string, we consider it to the number to call, otherwise we consider it to be a Call object that is already active. """ logger.debug("caller run, names : %s", name) self.storage = tichy.Service.get('TeleCom2') self.gsm_service = tichy.Service.get('GSM') self.dialog = tichy.Service.get('Dialog') self.audio_service = tichy.Service.get('Audio') self.usage_service = tichy.Service.get('Usage') self.edje_file = os.path.join(os.path.dirname(__file__), 'tele.edj') logger.info("occupy cpu") self.usage_service.occupy_cpu().start() if layout: self.main = parent self.main.bg_m.onclick = 'hide' layout.elm_obj.hide() self.layout = gui.elm_layout(self.main.window, self.edje_file, "main") self.main.bg.elm_obj.content_set("content-swallow", self.layout.elm_obj) else: self.main = gui.elm_layout_window(self.edje_file, "main", None, None, True) self.main.bg_m.onclick = 'hide' self.layout = self.main.main_layout self.storage.window = self.main if self.audio_service.muted == 1: self.audio_service.audio_toggle() self.button = tichy.Service.get('Buttons') self.button_oid = self.button.connect('aux_button_pressed', self.audio_rotate) self.TopBarService = tichy.Service.get("TopBar") self.TopBarService.volume_change( self.audio_service.get_speaker_volume()) self.main.connect("dehide", self.dehide_call) self.main.connect("hide", self.hide_call) self.edje_obj = self.layout.elm_obj.edje_get() self.edje_obj.signal_callback_add("*", "embryo", self.embryo) self.edje_obj.signal_callback_add("add_digit", "*", self.add_digit) self.edje_obj.signal_callback_add("*", "dtmf", self.send_dtmf) self.edje_obj.signal_callback_add("mute-toggle", "del-button", self.mute_toggle) self.edje_obj.signal_callback_add("audio-toggle", "del-button", self.speaker_toggle) self.SoundsService = tichy.Service.get("Sounds") try: # The case when we have an incoming call # XXX: we should use an other way to check for a call object ! if not isinstance(number, (basestring, tichy.Text)): call = number try: self.SoundsService.call() except Exception, e: logger.info("%s %s", str(Exception), str(e)) self.main.window.connect("close", call.release().start) self.storage.call = call self.main.emit('call_active') self.edje_obj.signal_emit('to_incoming_state', "*") self.edje_obj.part_text_set( 'num_field-text', unicode(call.number.get_text()).encode('utf-8')) self.edje_obj.layer_set(2) self.edje_obj.show() def make_active(emission, source, param): # XXX: we should connect to the error callback self.SoundsService.Stop() call.activate().start() self.storage.caller.value = call.number.get_text() self.edje_obj.signal_callback_add("activate", "call", make_active) else: # If not it means we want to initiate the call first