diff options
author | Ariel Calzada <aricalso@000PaRaDoX000.(none)> | 2012-04-28 03:10:43 (GMT) |
---|---|---|
committer | Ariel Calzada <aricalso@000PaRaDoX000.(none)> | 2012-04-28 03:10:43 (GMT) |
commit | b7d431cf773992b9e8a2058faf3c5894c28eb581 (patch) | |
tree | 2ed037bcf183709f3d4d5d721e9db3cf82ef4b4c | |
parent | c388594908413dc39b532da1dadb13f7df1c8e48 (diff) |
Modificacion de get_categories para que filtre correctamente el segundo combobox
-rw-r--r-- | CeibalNotifica.py | 790 | ||||
-rw-r--r-- | prueba.db | bin | 6144 -> 6144 bytes | |||
-rw-r--r-- | store.py | 25 |
3 files changed, 415 insertions, 400 deletions
diff --git a/CeibalNotifica.py b/CeibalNotifica.py index 5fc5531..62d0894 100644 --- a/CeibalNotifica.py +++ b/CeibalNotifica.py @@ -1,8 +1,8 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# Plan Ceibal - Uruguay -# Flavio Danesse - fdanesse@activitycentral.com +# Plan Ceibal - Uruguay +# Flavio Danesse - fdanesse@activitycentral.com # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,408 +24,410 @@ import gtk import sys import gobject from store import * + BASE = os.path.dirname(__file__) pixbuf1 = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(BASE, "Iconos", "ceibal-gris.png"), 32,32) pixbuf2 = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(BASE, "Iconos", "ceibal.png"), 32,32) - + class CeibalNotifica(gtk.Window): - def __init__(self): - super(CeibalNotifica, self).__init__() - self.set_title("Ceibal Notifica") - self.set_icon_from_file(os.path.join(BASE, "Iconos", "ceibal.png")) - self.set_resizable(True) - self.set_size_request(640, 480) - self.set_border_width(2) - self.set_position(gtk.WIN_POS_CENTER) - self.text_buffer = None - self.text_view = None - self.store = None - self.listore_model = None - self.modelsort = None - self.notify_store = None - self.info_toolbar = None - self.control_toolbar = None - self.filter = None - self.set_layout() - self.show_all() - self.connect("delete_event", self.delete_event) - self.notify_store.connect("show_notify", self.show_notify) - self.notify_store.connect("delete_notify", self.delete_notify) - self.notify_store.connect("marcar_notify", self.marcar_notify) - self.control_toolbar.connect("get_filter", self.get_filter) - self.control_toolbar.connect("make_filter", self.make_filter) - self.load_notify() - self.notify_store.columns_autosize() - - def set_layout(self): - self.listore_model = ListoreModel() - self.modelsort = gtk.TreeModelSort(self.listore_model) - self.notify_store = Notify_Store(self.modelsort) - self.text_buffer = gtk.TextBuffer() - self.text_view = gtk.TextView(buffer=self.text_buffer) - self.text_view.set_editable(False) - self.text_view.set_justification(gtk.JUSTIFY_LEFT) - hpanel = gtk.HPaned() - self.store = Store(db_filename="prueba.db") - scroll = gtk.ScrolledWindow() - scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - scroll.add_with_viewport(self.notify_store) - hpanel.pack1(scroll, resize = False, shrink = True) - scroll = gtk.ScrolledWindow() - scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - scroll.add_with_viewport(self.text_view) - hpanel.pack2(scroll, resize = False, shrink = True) - vbox = gtk.VBox() - self.info_toolbar = ToolbarInfo() - self.control_toolbar = ToolbarControl() - vbox.pack_start(self.control_toolbar, False, False, 0) - vbox.pack_start(hpanel, True, True, 0) - vbox.pack_start(self.info_toolbar, False, False, 0) - hpanel.show_all() - self.add(vbox) - - def get_filter(self, widget, value): - # En value viene el primer valor para el filtro, - # a saber: ["Tipo", "Prioridad", "Lanzamiento", "Expiración"] - # Con este valor se obtienen todos los valores en la base, - # en ese campo, mediante: - # filtro_nivel2 = self.store.db.get_categories() - # y se llena con ellos el segundo combo en la toolbar, mediante: - # widget.set_filter(filtro_nivel2) - - # cuando el usuario selecciona algún valor allí, se realiza el - # filtro sobre los datos en la base. - - # obtener valores posibles para el 1º filtro y - # llamar a set_filter(lista) de esta misma toolbar - # El filtro final será [tipo, valor] - # Ejemplo: - filtro_nivel2 = self.store.db.get_categories() - widget.set_filter(filtro_nivel2) - - def make_filter(self, widget, value): - if value[1] == "Ninguno": - self.filter = None - return - else: - self.filter = value - self.load_notify() - - def show_notify(self, widget, text, info): - self.text_buffer.set_text(text) - self.info_toolbar.set_text(info) - - def delete_notify(self, widget, path): - iter = widget.get_model().get_iter(path) - id_registro = int(widget.get_model().get_value(iter, 1)) - self.store.db.remove_message(id_registro) - iter = self.listore_model.get_iter(path) - self.listore_model.remove(iter) - self.update_view() - - def marcar_notify(self, widget, path): - iter = widget.get_model().get_iter(path) - id_registro = int(widget.get_model().get_value(iter, 1)) - marca = not self.store.db.is_fav(id_registro) - self.store.db.set_fav(id_registro, fav=marca) - iter = self.listore_model.get_iter(path) - fav = self.store.db.is_fav(id_registro) - self.listore_model.set_value(iter, 8, fav) - self.update_view() - - def update_view(self): - path = self.notify_store.get_path_selected() - if path == None: path = 0 - self.notify_store.treeselection.select_path(path) - try: - iter = self.listore_model.get_iter(path) - if self.listore_model.get_value(iter, 8): - self.listore_model.set_value(iter, 0, pixbuf2) - else: - self.listore_model.set_value(iter, 0, pixbuf1) - except: - self.text_buffer.set_text('') - self.info_toolbar.set_text('') - - def load_notify(self): - notificaciones = self.store.db.get_messages([]) - self.listore_model.clear() - for notif in notificaciones: - self.add_notify(notif) - - def add_notify(self, notify): - mark = pixbuf1 - if bool(notify['fav']): mark = pixbuf2 - notify = [mark, notify['id'], notify['priority'], notify['title'], notify['text'], - notify['launched'], notify['expires'], notify['type'], bool(notify['fav'])] - # Filtrado - print self.filter - io = self.modelsort.get_model().append(notify) - sel = self.notify_store.get_selection() - il = self.modelsort.convert_child_iter_to_iter(None, io) - sel.select_iter(il) - - def delete_event(self, widget, event): - self.salir() - return False - - def salir(self, widget=None): - sys.exit(0) + def __init__(self): + super(CeibalNotifica, self).__init__() + self.set_title("Ceibal Notifica") + self.set_icon_from_file(os.path.join(BASE, "Iconos", "ceibal.png")) + self.set_resizable(True) + self.set_size_request(640, 480) + self.set_border_width(2) + self.set_position(gtk.WIN_POS_CENTER) + self.text_buffer = None + self.text_view = None + self.store = None + self.listore_model = None + self.modelsort = None + self.notify_store = None + self.info_toolbar = None + self.control_toolbar = None + self.filter = None + self.set_layout() + self.show_all() + self.connect("delete_event", self.delete_event) + self.notify_store.connect("show_notify", self.show_notify) + self.notify_store.connect("delete_notify", self.delete_notify) + self.notify_store.connect("marcar_notify", self.marcar_notify) + self.control_toolbar.connect("get_filter", self.get_filter) + self.control_toolbar.connect("make_filter", self.make_filter) + self.load_notify() + self.notify_store.columns_autosize() + + def set_layout(self): + self.listore_model = ListoreModel() + self.modelsort = gtk.TreeModelSort(self.listore_model) + self.notify_store = Notify_Store(self.modelsort) + self.text_buffer = gtk.TextBuffer() + self.text_view = gtk.TextView(buffer=self.text_buffer) + self.text_view.set_editable(False) + self.text_view.set_justification(gtk.JUSTIFY_LEFT) + hpanel = gtk.HPaned() + self.store = Store(db_filename="prueba.db") + scroll = gtk.ScrolledWindow() + scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scroll.add_with_viewport(self.notify_store) + hpanel.pack1(scroll, resize = False, shrink = True) + scroll = gtk.ScrolledWindow() + scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scroll.add_with_viewport(self.text_view) + hpanel.pack2(scroll, resize = False, shrink = True) + vbox = gtk.VBox() + self.info_toolbar = ToolbarInfo() + self.control_toolbar = ToolbarControl() + vbox.pack_start(self.control_toolbar, False, False, 0) + vbox.pack_start(hpanel, True, True, 0) + vbox.pack_start(self.info_toolbar, False, False, 0) + hpanel.show_all() + self.add(vbox) + + def get_filter(self, widget, value): + # En value viene el primer valor para el filtro, + # a saber: ["Tipo", "Prioridad", "Lanzamiento", "Expiración"] + # Con este valor se obtienen todos los valores en la base, + # en ese campo, mediante: + # filtro_nivel2 = self.store.db.get_categories() + # y se llena con ellos el segundo combo en la toolbar, mediante: + # widget.set_filter(filtro_nivel2) + + # cuando el usuario selecciona algún valor allí, se realiza el + # filtro sobre los datos en la base. + + # obtener valores posibles para el 1º filtro y + # llamar a set_filter(lista) de esta misma toolbar + # El filtro final será [tipo, valor] + # Ejemplo: + + filtro_nivel2 = self.store.db.get_categories(value=value) + widget.set_filter(filtro_nivel2) + + def make_filter(self, widget, value): + if value[1] == "Ninguno": + self.filter = None + return + else: + self.filter = value + self.load_notify() + + def show_notify(self, widget, text, info): + self.text_buffer.set_text(text) + self.info_toolbar.set_text(info) + + def delete_notify(self, widget, path): + iter = widget.get_model().get_iter(path) + id_registro = int(widget.get_model().get_value(iter, 1)) + self.store.db.remove_message(id_registro) + iter = self.listore_model.get_iter(path) + self.listore_model.remove(iter) + self.update_view() + + def marcar_notify(self, widget, path): + iter = widget.get_model().get_iter(path) + id_registro = int(widget.get_model().get_value(iter, 1)) + marca = not self.store.db.is_fav(id_registro) + self.store.db.set_fav(id_registro, fav=marca) + iter = self.listore_model.get_iter(path) + fav = self.store.db.is_fav(id_registro) + self.listore_model.set_value(iter, 8, fav) + self.update_view() + + def update_view(self): + path = self.notify_store.get_path_selected() + if path == None: path = 0 + self.notify_store.treeselection.select_path(path) + try: + iter = self.listore_model.get_iter(path) + if self.listore_model.get_value(iter, 8): + self.listore_model.set_value(iter, 0, pixbuf2) + else: + self.listore_model.set_value(iter, 0, pixbuf1) + except: + self.text_buffer.set_text('') + self.info_toolbar.set_text('') + + def load_notify(self): + notificaciones = self.store.db.get_messages([]) + self.listore_model.clear() + for notif in notificaciones: + self.add_notify(notif) + + def add_notify(self, notify): + mark = pixbuf1 + if bool(notify['fav']): mark = pixbuf2 + notify = [mark, notify['id'], notify['priority'], notify['title'], notify['text'], + notify['launched'], notify['expires'], notify['type'], bool(notify['fav'])] + # Filtrado + print self.filter + io = self.modelsort.get_model().append(notify) + sel = self.notify_store.get_selection() + il = self.modelsort.convert_child_iter_to_iter(None, io) + sel.select_iter(il) + + def delete_event(self, widget, event): + self.salir() + return False + + def salir(self, widget=None): + sys.exit(0) class ListoreModel(gtk.ListStore): - def __init__(self): - gtk.ListStore.__init__(self, gtk.gdk.Pixbuf, - gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) + def __init__(self): + gtk.ListStore.__init__(self, gtk.gdk.Pixbuf, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) class Notify_Store(gtk.TreeView): - __gsignals__ = {"show_notify": (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, (gobject.TYPE_STRING, gobject.TYPE_STRING)), - "delete_notify": (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, )), - "marcar_notify": (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, ))} - def __init__(self, model): - gtk.TreeView.__init__(self, model) - self.set_property("rules-hint", True) - self.add_events(gtk.gdk.BUTTON2_MASK) - self.connect("button-press-event", self.handle_click) - self.set_headers_clickable(True) - self.set_columns() - self.show_all() - self.treeselection = self.get_selection() - self.treeselection.set_mode(gtk.SELECTION_SINGLE) - self.treeselection.set_select_function(self.func_selections, - self.get_model(), True) - - def set_columns(self): - self.append_column(self.make_column_mark('', 0, True)) - self.append_column(self.make_column('id', 1, False)) - self.append_column(self.make_column('Prioridad', 2, True)) - self.append_column(self.make_column('Título', 3, True)) - self.append_column(self.make_column('Notificación', 4, False)) - self.append_column(self.make_column('Lanzamiento', 5, False)) - self.append_column(self.make_column('Expira', 6, True)) - self.append_column(self.make_column('Tipo', 7, True)) - self.append_column(self.make_column('Favorito', 8, False)) - - def make_column_mark(self, text, index, visible): - render = gtk.CellRendererPixbuf() - column = gtk.TreeViewColumn(text, render, pixbuf = index) - column.set_property("visible", visible) - return column - - def make_column(self, text, index, visible): - render = gtk.CellRendererText() - column = gtk.TreeViewColumn(text, render, text=index) - column.set_sort_column_id(index) - column.set_property('visible', visible) - return column - - def func_selections(self, selection, model, path, is_selected, user_data): - iter = self.get_model().get_iter(path) - texto = self.get_model().get_value(iter, 4) - nid = self.get_model().get_value(iter, 1) - lanzamiento = self.get_model().get_value(iter, 5) - fav = self.get_model().get_value(iter, 8) - if fav: - fav = "Si" - else: - fav = "No" - info = "id: %s Lanzamiento: %s Favorito: %s" % (nid, lanzamiento, fav) - self.emit("show_notify", texto, info) - return True - - def handle_click(self, widget, event): - boton = event.button - pos = (int(event.x), int(event.y)) - tiempo = event.time - try: - path, col, x, y = widget.get_path_at_pos(pos[0], pos[1]) - if boton == 1: - return - elif boton == 3: - self.get_menu(boton, pos, tiempo, path) - return - elif boton == 2: - return - except: - pass - - def get_menu(self, boton, pos, tiempo, path): - menu = gtk.Menu() - eliminar = gtk.MenuItem("Eliminar Notificación.") - menu.append(eliminar) - eliminar.connect_object("activate", self.emit_delete_notify, path) - iter = self.get_model().get_iter(path) - fav = self.get_model().get_value(iter, 8) - marcar = gtk.MenuItem("Marcar Como Favorito.") - if fav: marcar = gtk.MenuItem("Desmarcar Como Favorito.") - menu.append(marcar) - marcar.connect_object("activate", self.emit_marcar_notify, path) - menu.show_all() - gtk.Menu.popup(menu, None, None, None, boton, tiempo) - - def get_path_selected(self): - (model, iter) = self.get_selection().get_selected() - path = None - if iter: - treemodelrow = model[iter] - path = treemodelrow.path - return path - - def emit_delete_notify(self, path): - self.emit("delete_notify", path) - def emit_marcar_notify(self, path): - self.emit("marcar_notify", path) - + __gsignals__ = {"show_notify": (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, (gobject.TYPE_STRING, gobject.TYPE_STRING)), + "delete_notify": (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, )), + "marcar_notify": (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, ))} + def __init__(self, model): + gtk.TreeView.__init__(self, model) + self.set_property("rules-hint", True) + self.add_events(gtk.gdk.BUTTON2_MASK) + self.connect("button-press-event", self.handle_click) + self.set_headers_clickable(True) + self.set_columns() + self.show_all() + self.treeselection = self.get_selection() + self.treeselection.set_mode(gtk.SELECTION_SINGLE) + self.treeselection.set_select_function(self.func_selections, + self.get_model(), True) + + def set_columns(self): + self.append_column(self.make_column_mark('', 0, True)) + self.append_column(self.make_column('id', 1, False)) + self.append_column(self.make_column('Prioridad', 2, True)) + self.append_column(self.make_column('Título', 3, True)) + self.append_column(self.make_column('Notificación', 4, False)) + self.append_column(self.make_column('Lanzamiento', 5, False)) + self.append_column(self.make_column('Expira', 6, True)) + self.append_column(self.make_column('Tipo', 7, True)) + self.append_column(self.make_column('Favorito', 8, False)) + + def make_column_mark(self, text, index, visible): + render = gtk.CellRendererPixbuf() + column = gtk.TreeViewColumn(text, render, pixbuf = index) + column.set_property("visible", visible) + return column + + def make_column(self, text, index, visible): + render = gtk.CellRendererText() + column = gtk.TreeViewColumn(text, render, text=index) + column.set_sort_column_id(index) + column.set_property('visible', visible) + return column + + def func_selections(self, selection, model, path, is_selected, user_data): + iter = self.get_model().get_iter(path) + texto = self.get_model().get_value(iter, 4) + nid = self.get_model().get_value(iter, 1) + lanzamiento = self.get_model().get_value(iter, 5) + fav = self.get_model().get_value(iter, 8) + if fav: + fav = "Si" + else: + fav = "No" + info = "id: %s Lanzamiento: %s Favorito: %s" % (nid, lanzamiento, fav) + self.emit("show_notify", texto, info) + return True + + def handle_click(self, widget, event): + boton = event.button + pos = (int(event.x), int(event.y)) + tiempo = event.time + try: + path, col, x, y = widget.get_path_at_pos(pos[0], pos[1]) + if boton == 1: + return + elif boton == 3: + self.get_menu(boton, pos, tiempo, path) + return + elif boton == 2: + return + except: + pass + + def get_menu(self, boton, pos, tiempo, path): + menu = gtk.Menu() + eliminar = gtk.MenuItem("Eliminar Notificación.") + menu.append(eliminar) + eliminar.connect_object("activate", self.emit_delete_notify, path) + iter = self.get_model().get_iter(path) + fav = self.get_model().get_value(iter, 8) + marcar = gtk.MenuItem("Marcar Como Favorito.") + if fav: marcar = gtk.MenuItem("Desmarcar Como Favorito.") + menu.append(marcar) + marcar.connect_object("activate", self.emit_marcar_notify, path) + menu.show_all() + gtk.Menu.popup(menu, None, None, None, boton, tiempo) + + def get_path_selected(self): + (model, iter) = self.get_selection().get_selected() + path = None + if iter: + treemodelrow = model[iter] + path = treemodelrow.path + return path + + def emit_delete_notify(self, path): + self.emit("delete_notify", path) + def emit_marcar_notify(self, path): + self.emit("marcar_notify", path) + class ToolbarInfo(gtk.Toolbar): - def __init__(self): - gtk.Toolbar.__init__(self) - self.modify_bg(gtk.STATE_NORMAL, - gtk.gdk.Color(0, 0, 0, 1)) - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_size_request(0, -1) - separator.set_expand(True) - self.insert(separator, -1) - item = gtk.ToolItem() - self.info_label = gtk.Label("") - self.info_label.modify_fg(gtk.STATE_NORMAL, - gtk.gdk.Color(65535, 65535, 65535,1)) - self.info_label.show() - item.add(self.info_label) - self.insert(item, -1) - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_size_request(0, -1) - separator.set_expand(True) - self.insert(separator, -1) - def set_text(self, text=""): - self.info_label.set_text(text) + def __init__(self): + gtk.Toolbar.__init__(self) + self.modify_bg(gtk.STATE_NORMAL, + gtk.gdk.Color(0, 0, 0, 1)) + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_size_request(0, -1) + separator.set_expand(True) + self.insert(separator, -1) + item = gtk.ToolItem() + self.info_label = gtk.Label("") + self.info_label.modify_fg(gtk.STATE_NORMAL, + gtk.gdk.Color(65535, 65535, 65535,1)) + self.info_label.show() + item.add(self.info_label) + self.insert(item, -1) + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_size_request(0, -1) + separator.set_expand(True) + self.insert(separator, -1) + def set_text(self, text=""): + self.info_label.set_text(text) class ToolbarControl(gtk.Toolbar): - __gsignals__ = {"get_filter": (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, (gobject.TYPE_STRING, )), - "make_filter": (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, ))} - def __init__(self): - gtk.Toolbar.__init__(self) - #self.modify_bg(gtk.STATE_NORMAL, - # gtk.gdk.Color(0, 0, 0, 1)) - self.filter_combo1 = None - self.filter_combo2 = None - self.set_layout() - self.show_all() - - self.filter_combo1.connect("change_selection", self.emit_get_filter) - self.filter_combo2.connect("change_selection", self.emit_make_filter) - - def set_layout(self): - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_size_request(10, -1) - separator.set_expand(False) - self.insert(separator, -1) - - item = gtk.ToolItem() - label = gtk.Label("Filtrar por:") - #label.modify_fg(gtk.STATE_NORMAL, - # gtk.gdk.Color(65535, 65535, 65535,1)) - label.show() - item.add(label) - self.insert(item, -1) - - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_size_request(10, -1) - separator.set_expand(False) - self.insert(separator, -1) - - item = gtk.ToolItem() - self.filter_combo1 = Combo() - self.filter_combo1.set_items(["Tipo", "Prioridad", - "Lanzamiento", "Expiración"]) - self.filter_combo1.show() - item.add(self.filter_combo1) - self.insert(item, -1) - - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_size_request(10, -1) - separator.set_expand(False) - self.insert(separator, -1) - - item = gtk.ToolItem() - label = gtk.Label("Seleccionar:") - #label.modify_fg(gtk.STATE_NORMAL, - # gtk.gdk.Color(65535, 65535, 65535,1)) - label.show() - item.add(label) - self.insert(item, -1) - - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_size_request(10, -1) - separator.set_expand(False) - self.insert(separator, -1) - - item = gtk.ToolItem() - self.filter_combo2 = Combo() - self.filter_combo2.set_items([]) - self.filter_combo2.show() - item.add(self.filter_combo2) - self.insert(item, -1) - - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_size_request(0, -1) - separator.set_expand(True) - self.insert(separator, -1) - - def emit_get_filter(self, widget, value): - self.emit("get_filter", value) - def emit_make_filter(self, widget, value): - val1 = self.filter_combo1.get_value_select() - self.emit("make_filter", [val1,value]) - - def set_filter(self, lista): - self.filter_combo2.set_items(lista) - + __gsignals__ = {"get_filter": (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, (gobject.TYPE_STRING, )), + "make_filter": (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, ))} + def __init__(self): + gtk.Toolbar.__init__(self) + #self.modify_bg(gtk.STATE_NORMAL, + # gtk.gdk.Color(0, 0, 0, 1)) + self.filter_combo1 = None + self.filter_combo2 = None + self.set_layout() + self.show_all() + + self.filter_combo1.connect("change_selection", self.emit_get_filter) + self.filter_combo2.connect("change_selection", self.emit_make_filter) + + def set_layout(self): + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_size_request(10, -1) + separator.set_expand(False) + self.insert(separator, -1) + + item = gtk.ToolItem() + label = gtk.Label("Filtrar por:") + #label.modify_fg(gtk.STATE_NORMAL, + # gtk.gdk.Color(65535, 65535, 65535,1)) + label.show() + item.add(label) + self.insert(item, -1) + + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_size_request(10, -1) + separator.set_expand(False) + self.insert(separator, -1) + + item = gtk.ToolItem() + self.filter_combo1 = Combo() + self.filter_combo1.set_items(["Tipo", "Prioridad", + "Lanzamiento", "Expiración"]) + self.filter_combo1.show() + item.add(self.filter_combo1) + self.insert(item, -1) + + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_size_request(10, -1) + separator.set_expand(False) + self.insert(separator, -1) + + item = gtk.ToolItem() + label = gtk.Label("Seleccionar:") + #label.modify_fg(gtk.STATE_NORMAL, + # gtk.gdk.Color(65535, 65535, 65535,1)) + label.show() + item.add(label) + self.insert(item, -1) + + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_size_request(10, -1) + separator.set_expand(False) + self.insert(separator, -1) + + item = gtk.ToolItem() + self.filter_combo2 = Combo() + self.filter_combo2.set_items([]) + self.filter_combo2.show() + item.add(self.filter_combo2) + self.insert(item, -1) + + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_size_request(0, -1) + separator.set_expand(True) + self.insert(separator, -1) + + def emit_get_filter(self, widget, value): + self.emit("get_filter", value) + def emit_make_filter(self, widget, value): + val1 = self.filter_combo1.get_value_select() + self.emit("make_filter", [val1,value]) + + def set_filter(self, lista): + self.filter_combo2.set_items(lista) + class Combo(gtk.ComboBox): - __gsignals__ = {"change_selection": (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, (gobject.TYPE_STRING, ))} - def __init__(self): - gtk.ComboBox.__init__(self, gtk.ListStore(str)) - cell = gtk.CellRendererText() - self.pack_start(cell, True) - self.add_attribute(cell, 'text', 0) - self.show_all() - self.connect("changed", self.emit_selection) - - def set_items(self, items): - self.get_model().clear() - self.append_text("Ninguno") - for item in items: - self.append_text(item) - self.set_active(0) - - def emit_selection(self, widget): - indice = widget.get_active() - if indice < 0: return - iter = widget.get_model().get_iter(indice) - value = widget.get_model().get_value(iter, 0) - self.emit("change_selection", value) - - def get_value_select(self): - indice = self.get_active() - if indice < 0: return None - iter = self.get_model().get_iter(indice) - value = self.get_model().get_value(iter, 0) - return value - + __gsignals__ = {"change_selection": (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, (gobject.TYPE_STRING, ))} + def __init__(self): + gtk.ComboBox.__init__(self, gtk.ListStore(str)) + cell = gtk.CellRendererText() + self.pack_start(cell, True) + self.add_attribute(cell, 'text', 0) + self.show_all() + self.connect("changed", self.emit_selection) + + def set_items(self, items): + self.get_model().clear() + self.append_text("Ninguno") + for item in items: + self.append_text(str(item)) + self.set_active(0) + + def emit_selection(self, widget): + indice = widget.get_active() + if indice < 0: return + iter = widget.get_model().get_iter(indice) + value = widget.get_model().get_value(iter, 0) + self.emit("change_selection", value) + + def get_value_select(self): + indice = self.get_active() + if indice < 0: return None + iter = self.get_model().get_iter(indice) + value = self.get_model().get_value(iter, 0) + return value + if __name__ == "__main__": - CeibalNotifica() - gtk.main() + CeibalNotifica() + gtk.main() Binary files differ@@ -74,14 +74,27 @@ class Db: c.execute('END TRANSACTION') self._close_connection(con) - def get_categories(self, order='+'): + def get_categories(self, order='+',value="Tipo"): if order == '+': order = "ASC" else: order = "DESC" - query = "select distinct type from notifications order by type "+order - return map(lambda x:x['type'],self.run_query(query)) - + + mappedValue = "type" + + if value == "Tipo": + mappedValue = "type" + elif value == "Prioridad": + mappedValue = "priority" + elif value == "Lanzamiento": + mappedValue = "launched" + elif value == u"Expiración": + mappedValue = "expires" + + query = "select distinct " + mappedValue + " from notifications order by type " + order + + return map(lambda x:x[mappedValue],self.run_query(query)) + def set_fav(self, id_msg, fav=True): """Marca un mensaje como favorito. Si fav == False lo desmarca""" @@ -188,7 +201,7 @@ class Store: values = [] for item in keys: values.append(str(msg[item])) - self.db.add_message(keys, values) + self.db.add_message(keys, values) def _save_XML_message(self, msg): # For future releases @@ -200,7 +213,7 @@ class Store: map(lambda x: values.append(msg.getAttribute(x)), keys) for node in refNode: if node.nodeType == 1: - #print "clave: %s, valor: %s" % (node.localName, node.firstChild.data) + #print "clave: %s, valor: %s" % (node.localName, node.firstChild.data) keys.append(node.localName) values.append(node.firstChild.wholeText.strip()) self.db.add_message(keys, values) |