_moduleLogger = logging.getLogger(__name__)
-class CellRendererTriple(gtk.GenericCellRenderer):
+class TripleToggleCellRenderer(gtk.CellRendererToggle):
+
__gproperties__ = {
"status": (gobject.TYPE_STRING, "Status",
"Status", "", gobject.PARAM_READWRITE),
}
def __init__(self):
- #self.__gobject_init__()
- #gtk.GenericCellRenderer.__init__(self, *args, **kwargs)
- gtk.GenericCellRenderer.__init__(self)
- #self.__gobject_init__()
+ gtk.CellRendererToggle.__init__(self)
+ self.set_property("activatable", True)
+ self.connect('toggled', self._on_toggled)
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)
def do_set_property(self, property, value):
- setattr(self, property.name, value)
-
- def do_get_property(self, property):
- return getattr(self, property.name)
-
- def get_layout(self, widget):
- '''Gets the Pango layout used in the cell in a TreeView widget.'''
-
- layout = pango.Layout(widget.get_pango_context())
- layout.set_width(-1) # Do not wrap text.
-
- layout.set_text(' ')
-
- return layout
-
- def on_get_size(self, widget, cell_area = None):
- xpad = 2
- ypad = 2
-
- xalign = 0
- yalign = 0.5
-
- layout = self.get_layout(widget)
- width, height = layout.get_pixel_size()
-
- x_offset = xpad
- y_offset = ypad
-
- if cell_area:
-
- x_offset = xalign * (cell_area.width - width)
- x_offset = max(x_offset, xpad)
- x_offset = int(round(x_offset, 0))
-
- y_offset = yalign * (cell_area.height - height)
- y_offset = max(y_offset, ypad)
- y_offset = int(round(y_offset, 0))
-
- width = width + (xpad * 2)
- height = height + (ypad * 2)
-
- 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 is not None:
- irow = path[0] #path[0][0]-1
- rect = widget.get_cell_area(irow, widget.get_column(0)) #FixME 0 is hardcoded
- if x < rect.x+rect.width:
- self.emit("status_changed", irow, self.status)
- else:
+ if getattr(self, property.name) == value:
return
- #workarround -1 means last item, because bug in treeview?!
- #print "not in list"
- rect = widget.get_visible_rect() #widget.get_cell_area(-1, widget.get_column(0))
- #print rect.x, rect.y, rect.width, rect.height, x, y
- irow = -1
- rect = widget.get_cell_area(0, widget.get_column(0)) #FixME 0 is hardcoded
- if x < rect.x+rect.width:
- self.emit("status_changed", irow, "-1")
-
- def on_render(self, window, widget, background_area, cell_area, expose_area, flags ):
- if (self.widget == None):
- #print widget
- self.widget = widget
- self.widget.connect("cursor-changed", self.clicked) #button-press-event
-
- self.last_cell = cell_area
-
- x = int(cell_area.x+(cell_area.width-2)/2-(cell_area.height-2)/2)
- y = int(cell_area.y+1)
- height = int(cell_area.height-2)
- width = int(height)
-
- if (self.status == "1"):
- widget.style.paint_check(window, gtk.STATE_NORMAL, gtk.SHADOW_IN, cell_area, widget, "cellradio", x, y, width, height)
- elif (self.status == "0"):
- #width = height
- height = height-3
- width = height
-
- widget.style.paint_flat_box(window, gtk.STATE_NORMAL, gtk.SHADOW_NONE, cell_area, widget, "cellunselected", x, y, width, height)
-
- widget.style.paint_hline(window, gtk.STATE_NORMAL, cell_area, widget, "cellunselected", x, x+width, y)
- widget.style.paint_hline(window, gtk.STATE_NORMAL, cell_area, widget, "cellunselected", x, x+width, y+height)
- widget.style.paint_vline(window, gtk.STATE_NORMAL, cell_area, widget, "cellunselected", y, y+height, x)
- widget.style.paint_vline(window, gtk.STATE_NORMAL, cell_area, widget, "cellunselected", y, y+height, x+width)
-
- else:
- widget.style.paint_diamond(window, gtk.STATE_NORMAL, gtk.SHADOW_IN, cell_area, widget, "cellunselected", x, y, width, height)
+ setattr(self, property.name, value)
- #widget.show_all()
- #print "render"
- pass
+ if property.name == "status":
+ active, inconsistent = {
+ "-1": (False, True),
+ "0": (False, False),
+ "1": (True, False),
+ }[value]
+ self.set_property("active", active)
+ self.set_property("inconsistent", inconsistent)
- def on_start_editing(self, event, widget, path, background_area, cell_area, flags):
- print "on_start_editing", path
- return None
+ def do_get_property(self, property):
+ return getattr(self, property.name)
- def on_activate(self, event, widget, path, background_area, cell_area, flags):
- print "activate", path
- return False
+ def _on_toggled(self, widget, path):
+ self.emit("status_changed", int(path), "-1")
class CellRendererCombo2(gtk.GenericCellRenderer):
gobject.type_register(CellRendererCombo2)
-gobject.type_register(CellRendererTriple)
+gobject.type_register(TripleToggleCellRenderer)
class View(gtk.VBox):
self.treeview = gtk.TreeView(self.modelsort)
self.treeview.set_headers_visible(True)
+ self.treeview.set_reorderable(False)
self.cell = range(self.liststorehandler.get_colcount())
self.tvcolumn = range(self.liststorehandler.get_colcount())
default = "0"
if self.db.ladeDirekt("showcol_"+str(self.liststorehandler.get_colname(i)), default) == "1":
if i in [1]:
- self.cell[i] = CellRendererTriple()
+ #self.cell[i] = CellRendererTriple()
+ self.cell[i] = TripleToggleCellRenderer()
self.tvcolumn[i] = gtk.TreeViewColumn("", self.cell[i])
self.cell[i].connect( 'status_changed', self.col_toggled)
self.tvcolumn[i].set_attributes( self.cell[i], status = i)
self.tvcolumn[i].set_resizable(True)
self.treeview.append_column(self.tvcolumn[i])
- # Disable drag and drop reordering of rows
- self.treeview.set_reorderable(False)
-
if self.scrolled_window is not None:
self.scrolled_window.destroy()