From 0f480930b7d9d7e98bc21ea28b44bca28207d10d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 4 Sep 2008 19:18:51 +0200 Subject: [PATCH] Add color on editing cell --- tryton/common/cellrendererdate.py | 13 +++- tryton/common/cellrenderertext.py | 67 +++++++++++++++++++ .../window/view_form/view/list_gtk/parser.py | 3 +- 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 tryton/common/cellrenderertext.py diff --git a/tryton/common/cellrendererdate.py b/tryton/common/cellrendererdate.py index 0c774a0ddd..0a007907b6 100644 --- a/tryton/common/cellrendererdate.py +++ b/tryton/common/cellrendererdate.py @@ -1,7 +1,6 @@ #This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. import gtk import gobject -import pango from date_widget import mapping, DateEntry, compute_date import re import time @@ -58,6 +57,18 @@ class CellRendererDate(gtk.GenericCellRenderer): def on_start_editing(self, event, widget, path, background_area, cell_area, flags): editable = DateEntry(self.format, self._date_cb, self._process_cb) + + colormap = editable.get_colormap() + if hasattr(self, 'background'): + colour = colormap.alloc_color(getattr(self, 'background')) + else: + colour = colormap.alloc_color('white') + editable.modify_bg(gtk.STATE_ACTIVE, colour) + editable.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("black")) + editable.modify_base(gtk.STATE_NORMAL, colour) + editable.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse("black")) + editable.modify_text(gtk.STATE_INSENSITIVE, gtk.gdk.color_parse("black")) + editable.set_text(self.text) editable.grab_focus() editable.show() diff --git a/tryton/common/cellrenderertext.py b/tryton/common/cellrenderertext.py new file mode 100644 index 0000000000..408b3706ff --- /dev/null +++ b/tryton/common/cellrenderertext.py @@ -0,0 +1,67 @@ +#This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. +import gtk +import gobject + + +class CellRendererText(gtk.GenericCellRenderer): + __gproperties__ = { + 'text': (gobject.TYPE_STRING, None, 'Text', + 'Text', gobject.PARAM_READWRITE), + 'foreground': (gobject.TYPE_STRING, None, 'Foreground', + 'Foreground', gobject.PARAM_READWRITE), + 'background': (gobject.TYPE_STRING, None, 'Background', + 'Background', gobject.PARAM_READWRITE), + 'editable': (gobject.TYPE_INT, 'Editable', + 'Editable', 0, 10, 0, gobject.PARAM_READWRITE), + } + + 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') + + def do_set_property(self, pspec, value): + setattr(self, pspec.name, value) + self._renderer.set_property(pspec.name, value) + self.set_property("mode", self._renderer.get_property("mode")) + + def do_get_property(self, pspec): + return getattr(self, pspec.name) + + 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, + expose_area, flags): + return self._renderer.render(window, widget, background_area, + cell_area, expose_area, flags) + + def on_activate(self, event, widget, path, background_area, cell_area, + flags): + return self._renderer.activate(event, widget, path, background_area, + cell_area, flags) + + def on_start_editing(self, event, widget, path, background_area, + cell_area, flags): + if not event: + event = gtk.gdk.Event(gtk.keysyms.Tab) + editable = self._renderer.start_editing(event, widget, path, + background_area, cell_area, flags) + + colormap = editable.get_colormap() + if hasattr(self, 'background'): + colour = colormap.alloc_color(getattr(self, 'background')) + else: + colour = colormap.alloc_color('white') + editable.modify_bg(gtk.STATE_ACTIVE, colour) + editable.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("black")) + editable.modify_base(gtk.STATE_NORMAL, colour) + editable.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse("black")) + editable.modify_text(gtk.STATE_INSENSITIVE, gtk.gdk.color_parse("black")) + + return editable + +gobject.type_register(CellRendererText) diff --git a/tryton/gui/window/view_form/view/list_gtk/parser.py b/tryton/gui/window/view_form/view/list_gtk/parser.py index 9e9b0ea048..9b708b02db 100644 --- a/tryton/gui/window/view_form/view/list_gtk/parser.py +++ b/tryton/gui/window/view_form/view/list_gtk/parser.py @@ -22,6 +22,7 @@ from tryton.common import DT_FORMAT, DHM_FORMAT, COLORS, node_attributes, \ import tryton.common as common from tryton.common.cellrendererbutton import CellRendererButton from tryton.common.cellrendererdate import CellRendererDate +from tryton.common.cellrenderertext import CellRendererText from tryton.action import Action from tryton.translate import date_format @@ -237,7 +238,7 @@ class Char(object): self.field_name = field_name self.model = model self.attrs = attrs or {} - self.renderer = gtk.CellRendererText() + self.renderer = CellRendererText() self.treeview = treeview self.window = window