Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/CeibalNotifica.py
diff options
context:
space:
mode:
authorflavio <fdanesse@gmail.com>2012-04-26 22:00:54 (GMT)
committer flavio <fdanesse@gmail.com>2012-04-26 22:00:54 (GMT)
commitc388594908413dc39b532da1dadb13f7df1c8e48 (patch)
tree72dae4ecf3fba07a689916c1331a0fa64f3d5fc9 /CeibalNotifica.py
parent6639fe3fd851bfb9704c79054799d490013141f8 (diff)
Filtrando
Diffstat (limited to 'CeibalNotifica.py')
-rw-r--r--CeibalNotifica.py166
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()