Beispiel #1
0
    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)
Beispiel #2
0
 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"
Beispiel #3
0
    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()
Beispiel #4
0
 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
Beispiel #5
0
    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
Beispiel #6
0
    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
Beispiel #7
0
    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