diff options
author | flavio <fdanesse@gmail.com> | 2012-04-26 22:00:54 (GMT) |
---|---|---|
committer | flavio <fdanesse@gmail.com> | 2012-04-26 22:00:54 (GMT) |
commit | c388594908413dc39b532da1dadb13f7df1c8e48 (patch) | |
tree | 72dae4ecf3fba07a689916c1331a0fa64f3d5fc9 /CeibalNotifica.py | |
parent | 6639fe3fd851bfb9704c79054799d490013141f8 (diff) |
Filtrando
Diffstat (limited to 'CeibalNotifica.py')
-rw-r--r-- | CeibalNotifica.py | 166 |
1 files changed, 163 insertions, 3 deletions
diff --git a/CeibalNotifica.py b/CeibalNotifica.py index e86b350..5fc5531 100644 --- a/CeibalNotifica.py +++ b/CeibalNotifica.py @@ -44,12 +44,16 @@ class CeibalNotifica(gtk.Window): 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() @@ -60,6 +64,7 @@ class CeibalNotifica(gtk.Window): 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() @@ -71,12 +76,41 @@ class CeibalNotifica(gtk.Window): scroll.add_with_viewport(self.text_view) hpanel.pack2(scroll, resize = False, shrink = True) vbox = gtk.VBox() - self.info_toolbar = Toolbar() + 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) @@ -118,12 +152,14 @@ class CeibalNotifica(gtk.Window): 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) @@ -194,6 +230,10 @@ class Notify_Store(gtk.TreeView): 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 @@ -241,7 +281,7 @@ class Notify_Store(gtk.TreeView): def emit_marcar_notify(self, path): self.emit("marcar_notify", path) -class Toolbar(gtk.Toolbar): +class ToolbarInfo(gtk.Toolbar): def __init__(self): gtk.Toolbar.__init__(self) self.modify_bg(gtk.STATE_NORMAL, @@ -265,7 +305,127 @@ class Toolbar(gtk.Toolbar): 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) + +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 + if __name__ == "__main__": CeibalNotifica() gtk.main() |