X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Flibview.py;h=0a6b94200fe5d75aab3085f8bc48e04f59bf474f;hb=31b3c764afddb30b8e12aa3da80f1245fdab1a93;hp=481464c7fe07c934218853df9656ba556ff14756;hpb=e72943142e4a1317b463bce10f9a971b3e2d2535;p=multilist diff --git a/src/libview.py b/src/libview.py index 481464c..0a6b942 100644 --- a/src/libview.py +++ b/src/libview.py @@ -1,304 +1,137 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- - -""" - This file is part of Multilist. - - Multilist is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Multilist is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Multilist. If not, see . - - Copyright (C) 2008 Christoph Würstle + """ - -import gtk -import gobject -import logging -import pango -import libliststorehandler - - -class Columns_dialog(gtk.VBox): - - def is_col_selected(self, icol): - children=self.framebox.get_children() - if icol. - def __init__(self): - #self.__gobject_init__() - #gtk.GenericCellRenderer.__init__(self,*args,**kwargs) - gtk.GenericCellRenderer.__init__(self) - #self.__gobject_init__() - self.status=-1 - self.xpad = 2 - self.ypad = 2 - self.mode = gtk.CELL_RENDERER_MODE_ACTIVATABLE - self.xpad = -2; self.ypad = -2 - self.xalign = 0.5; self.yalign = 0.5 - self.active = 0 - self.widget=None - self.last_cell=None - self.connect('editing-started', self.on_clicked) +Copyright (C) 2008 Christoph Würstle +""" - def do_set_property(self,property,value): - setattr(self, property.name, value) +import sys +import logging - def do_get_property(self, property): - return getattr(self, property.name) +import gobject +import gtk +import pango - def get_layout(self, widget): - '''Gets the Pango layout used in the cell in a TreeView widget.''' +import hildonize +import gtk_toolbox +import libliststorehandler - layout = pango.Layout(widget.get_pango_context()) - layout.set_width(-1) # Do not wrap text. - layout.set_text(' ') +try: + _ +except NameError: + _ = lambda x: x - return layout - def on_get_size(self, widget, cell_area=None): - xpad = 2 - ypad = 2 +_moduleLogger = logging.getLogger(__name__) - xalign = 0 - yalign = 0.5 - layout = self.get_layout(widget) - width, height = layout.get_pixel_size() +class TripleToggleCellRenderer(gtk.CellRendererToggle): - x_offset = xpad - y_offset = ypad + __gproperties__ = { + "status": (gobject.TYPE_STRING, "Status", "Status", "", gobject.PARAM_READWRITE), + } - if cell_area: + __gsignals__ = { + 'status_changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_STRING)), + } - x_offset = xalign * (cell_area.width - width) - x_offset = max(x_offset, xpad) - x_offset = int(round(x_offset, 0)) + def __init__(self): + gtk.CellRendererToggle.__init__(self) + self.set_property("activatable", True) + self.connect('toggled', self._on_toggled) + self.status = libliststorehandler.Liststorehandler.SHOW_NEW + + @gtk_toolbox.log_exception(_moduleLogger) + def do_set_property(self, property, value): + if getattr(self, property.name) == value or value is None: + return - y_offset = yalign * (cell_area.height - height) - y_offset = max(y_offset, ypad) - y_offset = int(round(y_offset, 0)) + setattr(self, property.name, value) - width = width + (xpad * 2) - height = height + (ypad * 2) + if property.name == "status": + active, inconsistent = { + libliststorehandler.Liststorehandler.SHOW_NEW: (False, False), + libliststorehandler.Liststorehandler.SHOW_ACTIVE: (False, True), + libliststorehandler.Liststorehandler.SHOW_COMPLETE: (True, False), + }[value] + self.set_property("active", active) + self.set_property("inconsistent", inconsistent) - - return x_offset, y_offset, width, height - - def on_clicked(self, widget, data): - print widget,data - - def clicked(self, widget, data1=None): - x,y=widget.get_pointer() - widget.realize() - - path=widget.get_path_at_pos(x,y) - - #print "a",widget.get_cursor() - #print path - - - - path=widget.get_cursor()[0] - - if path!=None: - irow=path[0] #path[0][0]-1 - rect=widget.get_cell_area(irow, widget.get_column(0)) #FixME 0 is hardcoded - if x5: - default="0" + if i in [1, 2]: # status, title + default = "1" else: - default="1" - if self.db.ladeDirekt("showcol_"+str(self.liststorehandler.get_colname(i)),default)=="1": - - if (i==1): - self.cell[i] = CellRendererTriple() - self.tvcolumn[i] = gtk.TreeViewColumn(self.liststorehandler.get_colname(i),self.cell[i]) - self.cell[i].connect( 'status_changed', self.col_toggled) - self.tvcolumn[i].set_attributes( self.cell[i], status=i) - - elif (i==3)or(i==4)or(i==6): + default = "0" + if self.db.ladeDirekt("showcol_"+str(self.liststorehandler.get_colname(i)), default) == "1": + if i in [1]: # status + # HACK Hildon has theme issues with inconsistent items, so + # we have a hacked together toggle to make it work on + # hildon + if hildonize.IS_HILDON_SUPPORTED: + self.cell[i] = CellRendererTriple() + else: + self.cell[i] = TripleToggleCellRenderer() + self.cell[i].connect('status_changed', self._on_col_toggled) + self.tvcolumn[i] = gtk.TreeViewColumn("", self.cell[i]) + self.tvcolumn[i].set_attributes( self.cell[i], status = i) + elif i in [3, 5]: # quantity, price + self.cell[i] = gtk.CellRendererSpin() + try: + # Python 2.6 is much cleaner + floatMin = -sys.float_info.min + floatMax = sys.float_info.max + except AttributeError: + # Python 2.5 support + floatMin = -1.79e308 + floatMax = 1.79e308 + adjustment = gtk.Adjustment(0, floatMin, floatMax, 1) + self.cell[i].set_property('adjustment', adjustment) + self.cell[i].set_property('digits', 2 if i == 5 else 0) + self.cell[i].set_property('editable', True) + self.cell[i].connect("edited", self._on_col_edited, i) + self.tvcolumn[i] = gtk.TreeViewColumn( + self.liststorehandler.get_colname(i), self.cell[i] + ) + self.tvcolumn[i].set_attributes( self.cell[i], text = i) + elif i in [4, 6]: # unit, priority self.cell[i] = gtk.CellRendererCombo() - self.tvcolumn[i] = gtk.TreeViewColumn(self.liststorehandler.get_colname(i),self.cell[i]) - self.cell[i].set_property("model",m) + self.cell[i].set_property("model", m) self.cell[i].set_property('text-column', i) - self.cell[i].set_property('editable',True) - self.cell[i].connect("edited", self.col_edited,i) - self.tvcolumn[i].set_attributes( self.cell[i], text=i) + self.cell[i].set_property('editable', True) + self.cell[i].connect("edited", self._on_col_edited, i) + self.tvcolumn[i] = gtk.TreeViewColumn( + self.liststorehandler.get_colname(i), self.cell[i] + ) + self.tvcolumn[i].set_attributes( self.cell[i], text = i) else: self.cell[i] = gtk.CellRendererText() - self.tvcolumn[i] = gtk.TreeViewColumn(self.liststorehandler.get_colname(i),self.cell[i]) - self.cell[i].set_property('editable',True) - self.cell[i].set_property('editable-set',True) - self.cell[i].connect("edited", self.col_edited,i) - #self.cell[i].connect("editing-canceled", self.col_edited2,i) - self.tvcolumn[i].set_attributes(self.cell[i], text=i) - - self.cell[i].set_property('cell-background', 'lightgray') + self.cell[i].set_property('editable', True) + self.cell[i].set_property('editable-set', True) + self.cell[i].connect("edited", self._on_col_edited, i) + self.tvcolumn[i] = gtk.TreeViewColumn( + self.liststorehandler.get_colname(i), self.cell[i] + ) + self.tvcolumn[i].set_attributes(self.cell[i], text = i) + self.tvcolumn[i].set_sort_column_id(i) self.tvcolumn[i].set_resizable(True) - - - if (i>0): - self.treeview.append_column(self.tvcolumn[i]) - - - # Allow NOT drag and drop reordering of rows - self.treeview.set_reorderable(False) - - - if self.scrolled_window != None: - self.scrolled_window.destroy() - - self.scrolled_window = gtk.ScrolledWindow() - self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) + self.treeview.append_column(self.tvcolumn[i]) self.scrolled_window.add(self.treeview) - self.pack_start(self.scrolled_window, expand=True, fill=True, padding=0) self.loadList() - + self.show_all() - - def __init__(self,db,liststorehandler,parent_window): - - self.db=db - self.parent_window=parent_window - self.liststorehandler = liststorehandler - - - gtk.VBox.__init__(self,homogeneous=False, spacing=0) - - logging.info("libview, init") - self.scrolled_window = None - self.reload_view() - - - - - - """ - bearbeitenFrame=gtk.Frame("Verteilung kopieren nach") - bearbeitenvBox=gtk.VBox(homogeneous=False, spacing=0) - - bearbeitenhBox=gtk.HBox(homogeneous=False, spacing=0) - self.comboKlassen = gtk.combo_box_new_text() - bearbeitenhBox.pack_start(self.comboKlassen, expand=False, fill=True, padding=0) - button=gtk.Button("Kopieren") - button.connect("clicked", self.kopiereStoffverteilung, None) - bearbeitenhBox.pack_start(button, expand=False, fill=True, padding=0) - - label=gtk.Label(" ") - bearbeitenhBox.pack_start(label, expand=False, fill=True, padding=0) - - button=gtk.Button("Export in CSV-Datei") - button.connect("clicked", self.exportStoffverteilung, None) - bearbeitenhBox.pack_start(button, expand=False, fill=True, padding=0) - - bearbeitenvBox.pack_start(bearbeitenhBox, expand=False, fill=True, padding=0) - - - bearbeitenFrame.add(bearbeitenvBox) - self.pack_start(bearbeitenFrame, expand=False, fill=True, padding=0) - """ - - #self.connect("unmap", self.speichere) - #self.connect("map", self.ladeWirklich) - - #self.show_all() - - - - #print "libstoffverteilung 9: ",time.clock() + @gtk_toolbox.log_exception(_moduleLogger) + def _on_col_edited(self, cell, irow, new_text, icol = None): + if (irow != 4): + self.liststorehandler.update_row(irow, icol, new_text) + else: + print cell, irow, new_text, icol + + @gtk_toolbox.log_exception(_moduleLogger) + def _on_col_toggled(self, widget, irow, status): + ls = self.treeview.get_model() + if self.liststorehandler.get_filter() == self.liststorehandler.SHOW_ACTIVE: + if ls[irow][1] == "0": + self.liststorehandler.update_row(irow, 1, "1") + else: + self.liststorehandler.update_row(irow, 1, "0") + else: + if ls[irow][1] == "1": + self.liststorehandler.update_row(irow, 1, "-1") + elif ls[irow][1] == "0": + self.liststorehandler.update_row(irow, 1, "1") + else: + self.liststorehandler.update_row(irow, 1, "0")