def run(self, parent, standalone=False): ##set edje file to be used ##TODO: make one edje file per plugin self.edje_file = join(dirname(__file__), 'messages.edj') ##get message service and list of all messages self.contact_service = Service.get('Contacts') self.contacts = self.contact_service.contacts ##sort contact by date def comp2(m1, m2): return cmp(str(m1.name).lower(), str(m2.name).lower()) self.contacts.sort(comp2) ##get message service and list of all messages self.msgs_service = Service.get('Messages') self.messages = self.msgs_service.messages self.window = ElementaryListWindow(self.edje_file, "main", "list", None, None, True) self.edje_obj = self.window.main_layout ##sort messages by date def comp(m1, m2): return cmp(m2.timestamp, m1.timestamp) self.list_label = [('label', 'peer'), ('label-number', 'text'), ('status', 'status'), ('direction', 'direction')] self.item_list = ElementaryList(self.messages, self.window, self.edje_file, "item", self.list_label, comp) self.edje_obj.add_callback("*", "messaging", self.create_msg) self.item_list.add_callback("*", "messaging", self.adv_msg) self.item_list.add_callback("save", "*", self.create_contact) ## close the Tele app, with the back button (signal, source, method) self.edje_obj.add_callback("back", "edje", self.signal) self.oid = self.contacts.connect('inserted', self.item_list._redraw_view) self.item_list.add_callback("details", "*", self.msg_details) parent.emit("unblock") i, args = yield WaitFirst(Wait(self.window, 'delete_request'), Wait(self.window, 'back'), Wait(self.window.window, 'closing')) logger.info('Messages closing') if i != 2: self.contacts.disconnect(self.oid) self.window.delete() del self.item_list
class SettingsSublist(Application): name = 'SettingsSublist' def run(self, parent, edje_file, group, layout, *args, **kargs): layout.elm_obj.hide() self.parent = parent self.window = ElementaryListSubwindow(parent, edje_file, "main", "list") self.edje_obj = self.window.main_layout self.edje_obj.edje.signal_emit("sublist_mode", "*") self.settings = List() self.cb_list = List() for i in Setting.groups[group]: o = Setting.groups[group][i] self.settings.append(o) def comp(m1, m2): return cmp(m2.name, m1.name) self.list_label = [('title', 'name'), ('subtitle', 'value')] self.item_list = ElementaryList(self.settings, self.window, edje_file, "item", self.list_label, comp) for i in self.settings: if hasattr(i, 'options'): oid = i.options.connect('updated', self.item_list._redraw_view) self.cb_list.append([i.options, oid]) self.item_list.add_callback("*", "sublist", self.action) yield WaitFirst(Wait(self.window, 'delete_request'), Wait(self.edje_obj, 'back')) for i in self.cb_list: i[0].disconnect(i[1]) self.edje_obj.elm_obj.visible_set(False) self.edje_obj.delete() parent.restore_orig() layout.elm_obj.show() def action(self, emission, signal, source, item): item[0].rotate(self.parent, self.edje_obj)
def run(self, parent=None, standalone=False): ##the edje file self.edje_file = join(dirname(__file__), 'settings.edj') ##import a parameter which tells the app about paroli's window's size self.standalone = config.getboolean('standalone', 'activated', False) ##generate app-window self.window = ElementaryListWindow(self.edje_file, "main", "list", None, None, True) self.edje_obj = self.window.main_layout self.groups = List() for i in Setting.groups: t = Text(i) self.groups.append(Text(i)) def comp(m1, m2): return cmp(str(m2).lower(), str(m1).lower()) self.list_label = [('title', 'value')] self.item_list = ElementaryList(self.groups, self.window, self.edje_file, "item", self.list_label, comp) self.item_list.add_callback("*", "sublist", self._show_sublist) ## close the Tele app, with the back button (signal, source, method) self.edje_obj.add_callback("back", "edje", self.signal) parent.emit("unblock") i, args = yield WaitFirst(Wait(self.window, 'delete_request'), Wait(self.window, 'back'), Wait(self.window.window, 'closing')) ##we write a logger message that the application is closing logger.info('Settings closing') ##we delete the window object (the class would also delete all children object) if i != 2: self.item_list._remove_cb() self.window.delete()
class Letters(Application): name = 'SMS' icon = 'icon.png' category = 'launcher' # So that we see the app in the launcher launcher_info = ['Messages', "unread"] def run(self, parent, standalone=False): ##set edje file to be used ##TODO: make one edje file per plugin self.edje_file = join(dirname(__file__), 'messages.edj') ##get message service and list of all messages self.contact_service = Service.get('Contacts') self.contacts = self.contact_service.contacts ##sort contact by date def comp2(m1, m2): return cmp(str(m1.name).lower(), str(m2.name).lower()) self.contacts.sort(comp2) ##get message service and list of all messages self.msgs_service = Service.get('Messages') self.messages = self.msgs_service.messages self.window = ElementaryListWindow(self.edje_file, "main", "list", None, None, True) self.edje_obj = self.window.main_layout ##sort messages by date def comp(m1, m2): return cmp(m2.timestamp, m1.timestamp) self.list_label = [('label', 'peer'), ('label-number', 'text'), ('status', 'status'), ('direction', 'direction')] self.item_list = ElementaryList(self.messages, self.window, self.edje_file, "item", self.list_label, comp) self.edje_obj.add_callback("*", "messaging", self.create_msg) self.item_list.add_callback("*", "messaging", self.adv_msg) self.item_list.add_callback("save", "*", self.create_contact) ## close the Tele app, with the back button (signal, source, method) self.edje_obj.add_callback("back", "edje", self.signal) self.oid = self.contacts.connect('inserted', self.item_list._redraw_view) self.item_list.add_callback("details", "*", self.msg_details) parent.emit("unblock") i, args = yield WaitFirst(Wait(self.window, 'delete_request'), Wait(self.window, 'back'), Wait(self.window.window, 'closing')) logger.info('Messages closing') if i != 2: self.contacts.disconnect(self.oid) self.window.delete() del self.item_list def signal(self, emission, signal, source): """ Callback function. It invokes, when the "back" button clicked.""" logger.info("msgs2.py:signal() emmision: %s, signal: %s, source: %s", str(emission), str(signal), str(source)) self.window.emit('back') ##DEBUG FUNCTIONS ## general output check def self_test(self, *args, **kargs): txt = "self test called with args: ", args, "and kargs: ", kargs logger.info(txt) def create_contact(self, emission, source, param, item): service = Service.get('ContactCreate') service.create(self.window, item[0].peer).start() def create_msg(self, emission, signal, source, item=None): service = Service.get('MessageCreate') service.write(self.window, signal).start() 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 = ElementaryLayout(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 = 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 = 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 adv_msg(self, emission, signal, source, item=None, layout=None): service = Service.get('MessageCreate') service.write(self.window, signal, item[0].peer, item[0].text, layout).start() def delete_msg(self, emission, signal, source, item, layout): logger.info("delete message called") message = item try: messages_service = Service.get('Messages') messages_service.remove(message).start() except Exception, ex: logger.exception("Got error %s", ex) else:
def run(self, parent=None, standalone=False): ##to be standardized self.edje_file = join(dirname(__file__), 'inout.edj') self.gsm_service = Service.get('GSM') self.callLogs = self.gsm_service.logs ##get message service and list of all messages self.contact_service = Service.get('Contacts') self.contacts = self.contact_service.contacts ##sort contact by date def comp2(m1, m2): return cmp(str(m1.name).lower(), str(m2.name).lower()) self.contacts.sort(comp2) ##generate app-window self.window = ElementaryListWindow(self.edje_file, "main", "list", None, None, True) self.edje_obj = self.window.main_layout def comp(m1, m2): return cmp(m2.timestamp, m1.timestamp) # We use the Call object to as items in the call log self.list_label = [('label', 'number'), ('subtext', 'description')] self.item_list = ElementaryList(self.callLogs, self.window, self.edje_file, "item", self.list_label, comp) self.edje_obj.add_callback("to_edit_mode", "*", self.to_edit_mode) self.edje_obj.add_callback("to_default_mode", "*", self.to_default_mode) ## close the Tele app, with the back button (signal, source, method) self.edje_obj.add_callback("back", "edje", self.signal) self.oid = self.contacts.connect('inserted', self.item_list._redraw_view) if len(self.callLogs) == 0: self.edje_obj.edje.signal_emit("ListEmpty", "python") self.oid2 = self.callLogs.connect('inserted', self.restore_edit) self.item_list.add_callback("new_call", "*", self.create_call) self.item_list.add_callback("new_msg", "*", self.create_msg) self.item_list.add_callback("save_number", "*", self.create_contact) self.item_list.elm_window = self.window.window parent.emit("unblock") i, args = yield WaitFirst(Wait(self.window, 'back'), Wait(self.window, 'delete_request'), Wait(self.window.window, 'closing')) for i in self.callLogs: i.missed = False i.check() self.callLogs.emit("modified") if i != 2: self.contacts.disconnect(self.oid) self.window.delete() del self.item_list
class InOutCallLog(Application): name = 'CallLog' icon = 'icon.png' category = 'launcher' # So that we see the app in the launcher launcher_info = ['GSM', "missed_call_count"] def run(self, parent=None, standalone=False): ##to be standardized self.edje_file = join(dirname(__file__), 'inout.edj') self.gsm_service = Service.get('GSM') self.callLogs = self.gsm_service.logs ##get message service and list of all messages self.contact_service = Service.get('Contacts') self.contacts = self.contact_service.contacts ##sort contact by date def comp2(m1, m2): return cmp(str(m1.name).lower(), str(m2.name).lower()) self.contacts.sort(comp2) ##generate app-window self.window = ElementaryListWindow(self.edje_file, "main", "list", None, None, True) self.edje_obj = self.window.main_layout def comp(m1, m2): return cmp(m2.timestamp, m1.timestamp) # We use the Call object to as items in the call log self.list_label = [('label', 'number'), ('subtext', 'description')] self.item_list = ElementaryList(self.callLogs, self.window, self.edje_file, "item", self.list_label, comp) self.edje_obj.add_callback("to_edit_mode", "*", self.to_edit_mode) self.edje_obj.add_callback("to_default_mode", "*", self.to_default_mode) ## close the Tele app, with the back button (signal, source, method) self.edje_obj.add_callback("back", "edje", self.signal) self.oid = self.contacts.connect('inserted', self.item_list._redraw_view) if len(self.callLogs) == 0: self.edje_obj.edje.signal_emit("ListEmpty", "python") self.oid2 = self.callLogs.connect('inserted', self.restore_edit) self.item_list.add_callback("new_call", "*", self.create_call) self.item_list.add_callback("new_msg", "*", self.create_msg) self.item_list.add_callback("save_number", "*", self.create_contact) self.item_list.elm_window = self.window.window parent.emit("unblock") i, args = yield WaitFirst(Wait(self.window, 'back'), Wait(self.window, 'delete_request'), Wait(self.window.window, 'closing')) for i in self.callLogs: i.missed = False i.check() self.callLogs.emit("modified") if i != 2: self.contacts.disconnect(self.oid) self.window.delete() del self.item_list def signal(self, emission, signal, source): """ Callback function. It invokes, when the "back" button clicked.""" logger.info("i-o2.py:signal() emmision: %s, signal: %s, source: %s", str(emission), str(signal), str(source)) self.window.emit('back') def restore_edit(self, *args, **kargs): self.edje_obj.edje.signal_emit("ListFilled", "python") def to_edit_mode(self, emission, source, param): for item in self.item_list.items: item[1].signal_emit("to_edit_mode", "*") def to_default_mode(self, emission, source, param): deleting = [] for i in range(len(self.item_list.items)): if self.item_list.items[i][1].part_text_get("delete-flag") == "1": deleting.append(self.item_list.items[i][0]) else: logger.debug( 'to_default_mode %s', self.item_list.items[i][1].part_text_get("delete-flag")) deleting.reverse() self.item_list.model.remove_group(deleting) for item in self.item_list.items: item[1].signal_emit("to_default_mode", "*") if len(self.callLogs) == 0: self.edje_obj.edje.signal_emit("ListEmpty", "python") def create_call(self, emission, source, param, callLog): number = callLog[0].number.value name = unicode(callLog[0]) caller_service = Service.get('TeleCaller2') caller_service.call("window", number, name).start() def create_msg(self, emission, source, param, callLog): service = Service.get('MessageCreate') service.write(self.window, 'reply', callLog[0].number).start() def create_contact(self, emission, source, param, callLog): service = Service.get('ContactCreate') service.create(self.window, callLog[0].number).start() def printer(self, *args, **kargs): logger.debug('printer %s %s', args, kargs)
class Settings(Application): ##this name is used by paroli to find your application name = 'Settings' ##the icon attribute is currently unused icon = 'icon.png' ## the category is used by paroli when applications are to be grouped. ## Set it to 'launcher' if you want your application to appear ## on the launcher screen category = 'launcher' # was 'settings' ##the run method of the app is called when the app is started def run(self, parent=None, standalone=False): ##the edje file self.edje_file = join(dirname(__file__), 'settings.edj') ##import a parameter which tells the app about paroli's window's size self.standalone = config.getboolean('standalone', 'activated', False) ##generate app-window self.window = ElementaryListWindow(self.edje_file, "main", "list", None, None, True) self.edje_obj = self.window.main_layout self.groups = List() for i in Setting.groups: t = Text(i) self.groups.append(Text(i)) def comp(m1, m2): return cmp(str(m2).lower(), str(m1).lower()) self.list_label = [('title', 'value')] self.item_list = ElementaryList(self.groups, self.window, self.edje_file, "item", self.list_label, comp) self.item_list.add_callback("*", "sublist", self._show_sublist) ## close the Tele app, with the back button (signal, source, method) self.edje_obj.add_callback("back", "edje", self.signal) parent.emit("unblock") i, args = yield WaitFirst(Wait(self.window, 'delete_request'), Wait(self.window, 'back'), Wait(self.window.window, 'closing')) ##we write a logger message that the application is closing logger.info('Settings closing') ##we delete the window object (the class would also delete all children object) if i != 2: self.item_list._remove_cb() self.window.delete() def signal(self, emission, signal, source): """ Callback function. It invokes, when the "back" button clicked.""" logger.info( "settings.py:signal() emmision: %s, signal: %s, source: %s", str(emission), str(signal), str(source)) self.window.emit('back') def _show_sublist(self, emission, signal, source, group): logger.info("showing sublist from group %s; source: %s, signal: %s", str(group[0]), str(source), str(signal)) SettingsSublist(self.window, self.edje_file, str(group[0]), self.edje_obj).start()
def run(self, setting, parent, model, list_label, layout, group="item", save_button=False, *args, **kargs): layout.elm_obj.hide() self.parent = parent self.setting = setting self.edje_file = join(dirname(__file__), 'settings.edj') self.window = ElementaryListSubwindow(parent, self.edje_file, "main", "list") self.edje_obj = self.window.main_layout self.edje_obj.edje.signal_emit("sublist_mode", "*") if save_button: self.edje_obj.edje.signal_emit("save_button", "*") self.ItemList = model self.cb_list = List() #for i in Setting.groups[group]: #o = Setting.groups[group][i] #self.settings.append(o) def comp(m1, m2): if m1.name == None or m1.name == "": return cmp(m2, m1) else: return cmp(m2.name, m1.name) item_group = group or "item" self.list_label = list_label self.item_list = ElementaryList(self.ItemList, self.window, self.edje_file, item_group, list_label, comp) for i in self.ItemList: if hasattr(i, 'connect'): oid = i.connect('updated', self.item_list._redraw_view) self.cb_list.append([i, oid]) self.item_list.add_callback("*", "sublist", self.action) self.item_list.add_callback("pressed", "decrease", self.decrease) self.item_list.add_callback("pressed", "increase", self.increase) self.edje_obj.edje.signal_callback_add("pressed", "save", self.save) yield WaitFirst(Wait(self.window, 'delete_request'), Wait(self.edje_obj, 'back'), Wait(self.ItemList, 'save')) for i in self.cb_list: i[0].disconnect(i[1]) self.edje_obj.elm_obj.visible_set(False) self.edje_obj.delete() self.item_list._remove_cb() layout.elm_obj.show()
class ListSettingApp(Application): name = 'ListSetting' def run(self, setting, parent, model, list_label, layout, group="item", save_button=False, *args, **kargs): layout.elm_obj.hide() self.parent = parent self.setting = setting self.edje_file = join(dirname(__file__), 'settings.edj') self.window = ElementaryListSubwindow(parent, self.edje_file, "main", "list") self.edje_obj = self.window.main_layout self.edje_obj.edje.signal_emit("sublist_mode", "*") if save_button: self.edje_obj.edje.signal_emit("save_button", "*") self.ItemList = model self.cb_list = List() #for i in Setting.groups[group]: #o = Setting.groups[group][i] #self.settings.append(o) def comp(m1, m2): if m1.name == None or m1.name == "": return cmp(m2, m1) else: return cmp(m2.name, m1.name) item_group = group or "item" self.list_label = list_label self.item_list = ElementaryList(self.ItemList, self.window, self.edje_file, item_group, list_label, comp) for i in self.ItemList: if hasattr(i, 'connect'): oid = i.connect('updated', self.item_list._redraw_view) self.cb_list.append([i, oid]) self.item_list.add_callback("*", "sublist", self.action) self.item_list.add_callback("pressed", "decrease", self.decrease) self.item_list.add_callback("pressed", "increase", self.increase) self.edje_obj.edje.signal_callback_add("pressed", "save", self.save) yield WaitFirst(Wait(self.window, 'delete_request'), Wait(self.edje_obj, 'back'), Wait(self.ItemList, 'save')) for i in self.cb_list: i[0].disconnect(i[1]) self.edje_obj.elm_obj.visible_set(False) self.edje_obj.delete() self.item_list._remove_cb() layout.elm_obj.show() def action(self, emission, signal, source, item): item[0].action(item, self.parent, self.edje_obj) logger.info("action called") def EnableSaveButton(self, *args, **kargs): self.edje_obj.edje.signal_emit("EnableSave", "*") def save(self, *args, **kargs): logger.info("save triggered") self.ItemList.emit('save') def increase(self, emission, signal, source, item): if item[0].val_type == "int": current = item[0].val_range.index( int(emission.part_text_get('value'))) else: current = item[0].val_range.index(emission.part_text_get('value')) if len(item[0].val_range) - 1 > current: new = item[0].val_range[current + 1] else: new = item[0].val_range[0] item[0].value = new emission.part_text_set('value', str(new)) def decrease(self, emission, signal, source, item): if item[0].val_type == "int": current = item[0].val_range.index( int(emission.part_text_get('value'))) else: current = item[0].val_range.index(emission.part_text_get('value')) if current < 0: new = item[0].val_range[len(item[0].val_range) - 1] else: new = item[0].val_range[current - 1] item[0].value = new emission.part_text_set('value', str(new))