1
# -*- encoding: utf-8 -*-
2
##############################################################################
4
# OpenERP, Open Source Management Solution
5
# Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
8
# This program is free software: you can redistribute it and/or modify
9
# it under the terms of the GNU General Public License as published by
10
# the Free Software Foundation, either version 3 of the License, or
11
# (at your option) any later version.
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
# GNU General Public License for more details.
18
# You should have received a copy of the GNU General Public License
19
# along with this program. If not, see <http://www.gnu.org/licenses/>.
21
##############################################################################
35
class widget_interface(object):
36
def __init__(self, window, parent=None, view=None, attrs=None):
43
for key,val in _attrs_boolean.items():
44
self.attrs[key] = attrs.get(key, False) not in ('False', '0', False)
45
self.default_readonly = self.attrs.get('readonly', False)
46
self._menu_entries = [
47
(_('Set to default value'), lambda x: self._menu_sig_default_get(), 1),
48
(_('Set as default'), lambda x: self._menu_sig_default_set(), 1),
54
def _menu_sig_default_get(self):
56
if self._view.modelfield.get_state_attrs(self._view.model).get('readonly', False):
58
model = self._view.modelfield.parent.resource
59
res = rpc.session.rpc_exec_auth_try('/object', 'execute', model, 'default_get', [self.attrs['name']])
60
self._view.modelfield.set(self._view.model, res.get(self.attrs['name'], False))
61
self.display(self._view.model, self._view.modelfield)
63
common.warning('You can not set to the default value here !', 'Operation not permited')
66
def sig_activate(self, widget=None):
67
# emulate a focus_out so that the onchange is called if needed
70
def _readonly_set(self, ro):
73
def _color_widget(self):
76
def color_set(self, name):
77
widget = self._color_widget()
78
map = widget.get_colormap()
79
colour = map.alloc_color(common.colors.get(name,'white'))
80
widget.modify_bg(gtk.STATE_ACTIVE, colour)
81
widget.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("black"))
82
widget.modify_base(gtk.STATE_NORMAL, colour)
83
widget.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse("black"))
84
widget.modify_text(gtk.STATE_INSENSITIVE, gtk.gdk.color_parse("black"))
86
def _menu_sig_default_set(self):
88
wid = self._view.view_form.widgets
89
for wname, wview in self._view.view_form.widgets.items():
90
if wview.modelfield.attrs.get('change_default', False):
91
value = wview.modelfield.get(self._view.model)
92
deps.append((wname, wname, value, value))
93
value = self._view.modelfield.get_default(self._view.model)
94
model = self._view.modelfield.parent.resource
95
wid_common.field_pref_set(self._view.widget_name,
96
self.attrs.get('string', self._view.widget_name), model,
97
value, deps, window=self._window)
99
def _menu_open(self, obj, event):
100
if event.button == 3:
102
for stock_id,callback,sensitivity in self._menu_entries:
104
item = gtk.ImageMenuItem(stock_id)
106
item.connect("activate",callback)
107
item.set_sensitive(sensitivity)
109
item=gtk.SeparatorMenuItem()
112
menu.popup(None,None,None,event.button,event.time)
118
def _focus_out(self):
119
if not self._view.modelfield:
121
self.set_value(self._view.model, self._view.modelfield)
123
def display(self, model, modelfield):
125
self._readonly_set(self.attrs.get('readonly', False))
127
self._readonly_set(modelfield.get_state_attrs(model).get('readonly', False))
128
if modelfield.get_state_attrs(model).get('readonly', False):
129
self.color_set('readonly')
130
elif not modelfield.get_state_attrs(model).get('valid', True):
131
self.color_set('invalid')
132
elif modelfield.get_state_attrs(model).get('required', False):
133
self.color_set('required')
135
self.color_set('normal')
137
def sig_changed(self):
138
if self.attrs.get('on_change',False):
139
self._view.view_form.screen.on_change(self.attrs['on_change'])
141
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: