Inherit from standard cellrenderer when possible

issue3463
review15511002
This commit is contained in:
Cédric Krier committed 2015-07-16 22:53:05 +02:00
1 parent 93a687838d
commit 69d5b47868
3 files changed
+74 -187

No files matched your search

+24 -67
View File
@@ -2,99 +2,56 @@
# this repository contains the full copyright notices and license terms.
import gtk
import gobject
import pango
from tryton.common.selection import selection_shortcuts
class CellRendererCombo(gtk.GenericCellRenderer):
class CellRendererCombo(gtk.CellRendererCombo):
__gproperties__ = {
'text': (gobject.TYPE_STRING, None, 'Text',
'Text', gobject.PARAM_READWRITE),
'foreground': (gobject.TYPE_STRING, None, 'Foreground',
'Foreground', gobject.PARAM_WRITABLE),
'foreground-set': (gobject.TYPE_INT, 'Foreground Set',
'Foreground Set', 0, 10, 0, gobject.PARAM_READWRITE),
'background': (gobject.TYPE_STRING, None, 'Background',
'Background', gobject.PARAM_WRITABLE),
'background-set': (gobject.TYPE_INT, 'Background Set',
'Background Set', 0, 10, 0, gobject.PARAM_READWRITE),
'editable': (gobject.TYPE_INT, 'Editable',
'Editable', 0, 10, 0, gobject.PARAM_READWRITE),
'xalign': (gobject.TYPE_FLOAT, 'XAlign',
'XAlign', 0, 1, 0, gobject.PARAM_READWRITE),
'visible': (gobject.TYPE_INT, 'Visible',
'Visible', 0, 10, 0, gobject.PARAM_READWRITE),
'has-entry': (gobject.TYPE_INT, 'Has Entry',
'Has Entry', 0, 10, 0, gobject.PARAM_READWRITE),
'model': (gobject.TYPE_OBJECT, 'Model', 'Model',
gobject.PARAM_READWRITE),
'text-column': (gobject.TYPE_INT, 'Text Column',
'Text Column', 0, 10, 0, gobject.PARAM_READWRITE),
'strikethrough': (gobject.TYPE_BOOLEAN, 'Strikethrough',
'Strikethrough', False, gobject.PARAM_WRITABLE),
}
def __init__(self):
self.__gobject_init__()
self._renderer = gtk.CellRendererCombo()
self.set_property("mode", self._renderer.get_property("mode"))
self.text = self._renderer.get_property('text')
self.editable = self._renderer.get_property('editable')
self.visible = True
gtk.CellRendererCombo.__init__(self)
self.__visible = True
def set_sensitive(self, value):
if hasattr(self._renderer, 'set_sensitive'):
return self._renderer.set_sensitive(value)
return self._renderer.set_property('sensitive', value)
self.set_property('sensitive', value)
def do_set_property(self, pspec, value):
setattr(self, pspec.name, value)
if pspec.name == 'visible':
def do_set_property(self, prop, value):
if prop.name == 'visible':
self.__visible = value
return
self._renderer.set_property(pspec.name, value)
self.set_property("mode", self._renderer.get_property("mode"))
gtk.CellRendererCombo.do_set_property(self, prop, value)
def do_get_property(self, pspec):
return getattr(self, pspec.name)
def do_get_property(self, prop):
if prop.name == 'visible':
return self.__visible
return gtk.CellRendererCombo.do_get_property(self, prop)
def on_get_size(self, widget, cell_area):
return self._renderer.get_size(widget, cell_area)
def on_render(self, window, widget, background_area, cell_area,
def do_render(self, window, widget, background_area, cell_area,
expose_area, flags):
if not self.visible:
if not self.__visible:
return
# Handle Pixmap window as pygtk failed
if type(window) == gtk.gdk.Pixmap:
layout = widget.create_pango_layout(self.text)
layout.set_font_description(widget.style.font_desc)
w, h = layout.get_size()
xalign = self._renderer.get_property('xalign')
x = int(cell_area.x + (cell_area.width - w / pango.SCALE) * xalign)
y = int(cell_area.y + (cell_area.height - h / pango.SCALE) / 2)
window.draw_layout(widget.style.text_gc[0], x, y, layout)
return
return self._renderer.render(window, widget, background_area,
cell_area, expose_area, flags)
gtk.CellRendererCombo.do_render(self, window, widget,
background_area, cell_area, expose_area, flags)
def on_activate(self, event, widget, path, background_area, cell_area,
def do_activate(self, event, widget, path, background_area, cell_area,
flags):
if not self.visible:
if not self.__visible:
return
return self._renderer.activate(event, widget, path, background_area,
cell_area, flags)
return gtk.CellRendererCombo.do_activate(self, event, widget, path,
background_area, cell_area, flags)
def on_start_editing(self, event, widget, path, background_area,
def do_start_editing(self, event, widget, path, background_area,
cell_area, flags):
if not self.visible:
if not self.__visible:
return
if not event:
event = gtk.gdk.Event(gtk.keysyms.Tab)
editable = self._renderer.start_editing(event, widget, path,
background_area, cell_area, flags)
editable = gtk.CellRendererCombo.do_start_editing(self, event, widget,
path, background_area, cell_area, flags)
return selection_shortcuts(editable)
gobject.type_register(CellRendererCombo)
+25 -68
View File
@@ -2,97 +2,54 @@
# this repository contains the full copyright notices and license terms.
import gtk
import gobject
import pango
class CellRendererText(gtk.GenericCellRenderer):
class CellRendererText(gtk.CellRendererText):
__gproperties__ = {
'text': (gobject.TYPE_STRING, None, 'Text',
'Text', gobject.PARAM_READWRITE),
'foreground': (gobject.TYPE_STRING, None, 'Foreground',
'Foreground', gobject.PARAM_WRITABLE),
'foreground-set': (gobject.TYPE_INT, 'Foreground Set',
'Foreground Set', 0, 10, 0, gobject.PARAM_READWRITE),
'background': (gobject.TYPE_STRING, None, 'Background',
'Background', gobject.PARAM_WRITABLE),
'background-set': (gobject.TYPE_INT, 'Background Set',
'Background Set', 0, 10, 0, gobject.PARAM_READWRITE),
'editable': (gobject.TYPE_INT, 'Editable',
'Editable', 0, 10, 0, gobject.PARAM_READWRITE),
'xalign': (gobject.TYPE_FLOAT, 'XAlign',
'XAlign', 0, 1, 0, gobject.PARAM_READWRITE),
'visible': (gobject.TYPE_INT, 'Visible',
'Visible', 0, 10, 0, gobject.PARAM_READWRITE),
'strikethrough': (gobject.TYPE_BOOLEAN, 'Strikethrough',
'Strikethrough', False, gobject.PARAM_WRITABLE),
'single-paragraph-mode': (gobject.TYPE_BOOLEAN,
'Single Paragraph Mode', 'Single Paragraph Mode', False,
gobject.PARAM_WRITABLE),
}
def __init__(self):
self.__gobject_init__()
self._renderer = gtk.CellRendererText()
self.set_property("mode", self._renderer.get_property("mode"))
self.text = self._renderer.get_property('text')
self.editable = self._renderer.get_property('editable')
self.visible = True
gtk.CellRendererText.__init__(self)
self.__visible = True
def set_sensitive(self, value):
if hasattr(self._renderer, 'set_sensitive'):
return self._renderer.set_sensitive(value)
return self._renderer.set_property('sensitive', value)
self.set_property('sensitive', value)
def do_set_property(self, pspec, value):
setattr(self, pspec.name, value)
if pspec.name == 'visible':
def do_set_property(self, prop, value):
if prop.name == 'visible':
self.__visible = value
return
self._renderer.set_property(pspec.name, value)
self.set_property("mode", self._renderer.get_property("mode"))
gtk.CellRendererText.do_set_property(self, prop, value)
def do_get_property(self, pspec):
return getattr(self, pspec.name)
def do_get_property(self, prop):
if prop.name == 'visible':
return self.__visible
return gtk.CellRendererText.do_get_property(self, prop)
def on_get_size(self, widget, cell_area):
return self._renderer.get_size(widget, cell_area)
def on_render(self, window, widget, background_area, cell_area,
def do_render(self, window, widget, background_area, cell_area,
expose_area, flags):
if not self.visible:
if not self.__visible:
return
# Handle Pixmap window as pygtk failed
if type(window) == gtk.gdk.Pixmap:
layout = widget.create_pango_layout(self.text)
layout.set_font_description(widget.style.font_desc)
w, h = layout.get_size()
xalign = self._renderer.get_property('xalign')
x = int(cell_area.x + (cell_area.width - w / pango.SCALE) * xalign)
y = int(cell_area.y + (cell_area.height - h / pango.SCALE) / 2)
window.draw_layout(widget.style.text_gc[0], x, y, layout)
return
return self._renderer.render(window, widget, background_area,
cell_area, expose_area, flags)
gtk.CellRendererText.do_render(self, window, widget,
background_area, cell_area, expose_area, flags)
def on_activate(self, event, widget, path, background_area, cell_area,
def do_activate(self, event, widget, path, background_area, cell_area,
flags):
if not self.visible:
if not self.__visible:
return
return self._renderer.activate(event, widget, path, background_area,
cell_area, flags)
return gtk.CellRendererText.activate(self, event, widget, path,
background_area, cell_area, flags)
def on_start_editing(self, event, widget, path, background_area,
def do_start_editing(self, event, widget, path, background_area,
cell_area, flags):
if not self.visible:
if not self.__visible:
return
if not event:
event = gtk.gdk.Event(gtk.keysyms.Tab)
editable = gtk.Entry()
editable.set_property('shadow-type', gtk.SHADOW_NONE)
editable.set_text(self.text)
editable.grab_focus()
editable.show()
return editable
return gtk.CellRendererText.do_start_editing(self, event, widget,
path, background_area, cell_area, flags)
class CellRendererTextCompletion(CellRendererText):
@@ -101,7 +58,7 @@ class CellRendererTextCompletion(CellRendererText):
super(CellRendererTextCompletion, self).__init__()
self.set_completion = set_completion
def on_start_editing(self, event, widget, path, background_area, cell_area,
def do_start_editing(self, event, widget, path, background_area, cell_area,
flags):
editable = super(CellRendererTextCompletion,
self).on_start_editing(event, widget, path, background_area,
+25 -52
View File
@@ -4,78 +4,51 @@ import gtk
import gobject
class CellRendererToggle(gtk.GenericCellRenderer):
class CellRendererToggle(gtk.CellRendererToggle):
__gproperties__ = {
'activatable': (gobject.TYPE_INT, 'Activatable',
'Activatable', 0, 10, 0, gobject.PARAM_READWRITE),
'visible': (gobject.TYPE_INT, 'Visible',
'Visible', 0, 10, 0, gobject.PARAM_READWRITE),
}
__gsignals__ = {
'toggled': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
(gobject.TYPE_STRING, )),
}
def __init__(self):
self.__gobject_init__()
self._renderer = gtk.CellRendererToggle()
self._renderer.connect('toggled', self._sig_toggled)
self.set_property("mode", self._renderer.get_property("mode"))
self.activatable = self._renderer.get_property('activatable')
self.visible = True
gtk.CellRendererToggle.__init__(self)
self.__visible = True
def set_sensitive(self, value):
if hasattr(self._renderer, 'set_sensitive'):
return self._renderer.set_sensitive(value)
return self._renderer.set_property('sensitive', value)
self.set_property('sensitive', value)
def do_set_property(self, pspec, value):
setattr(self, pspec.name, value)
if pspec.name == 'visible':
def do_set_property(self, prop, value):
if prop.name == 'visible':
self.__visible = value
return
self._renderer.set_property(pspec.name, value)
self.set_property("mode", self._renderer.get_property("mode"))
gtk.CellRendererToggle.do_set_property(self, prop, value)
def do_get_property(self, pspec):
return getattr(self, pspec.name)
def do_get_property(self, prop):
if prop.name == 'visible':
return self.__visible
return gtk.CellRendererToggle.do_get_property(self, prop)
def on_get_size(self, widget, cell_area):
return self._renderer.get_size(widget, cell_area)
def on_render(self, window, widget, background_area, cell_area,
def do_render(self, window, widget, background_area, cell_area,
expose_area, flags):
if not self.visible:
if not self.__visible:
return
# Handle Pixmap window as pygtk failed
if type(window) == gtk.gdk.Pixmap:
return
return self._renderer.render(window, widget, background_area,
cell_area, expose_area, flags)
gtk.CellRendererToggle.do_render(self, window, widget,
background_area, cell_area, expose_area, flags)
def on_activate(self, event, widget, path, background_area, cell_area,
def do_activate(self, event, widget, path, background_area, cell_area,
flags):
if not self.visible:
if not self.__visible:
return
if not event:
event = gtk.gdk.Event(gtk.keysyms.KP_Space)
return self._renderer.activate(event, widget, path, background_area,
cell_area, flags)
return gtk.CellRendererToggle.do_activate(self, event, widget, path,
background_area, cell_area, flags)
def on_start_editing(self, event, widget, path, background_area,
def do_start_editing(self, event, widget, path, background_area,
cell_area, flags):
return self._renderer.start_editing(event, widget, path,
background_area, cell_area, flags)
def get_active(self):
return self._renderer.get_active()
def set_active(self, setting):
return self._renderer.set_active(setting)
def _sig_toggled(self, renderer, path):
if self.activatable and self.visible:
self.emit('toggled', path)
if not self.__visible:
return
return gtk.CellRendererToggle.do_start_editing(event, widget, path,
background_area, cell_area, flags)
gobject.type_register(CellRendererToggle)