Refactore button sensitive setup
review430001
This commit is contained in:
1 parent
2986fe1214
commit
c34c8f5fd1
4 files changed
+92
-80
No files matched your search
@@ -20,6 +20,7 @@ class Many2Many(WidgetInterface):
|
||||
|
||||
self.widget = gtk.VBox(homogeneous=False, spacing=5)
|
||||
self._readonly = True
|
||||
self._position = 0
|
||||
|
||||
hbox = gtk.HBox(homogeneous=False, spacing=0)
|
||||
hbox.set_border_width(2)
|
||||
@@ -176,12 +177,9 @@ class Many2Many(WidgetInterface):
|
||||
|
||||
def _readonly_set(self, value):
|
||||
self._readonly = value
|
||||
self.wid_text.set_editable(not value)
|
||||
self.wid_text.set_sensitive(not value)
|
||||
self.but_remove.set_sensitive(not value)
|
||||
self.but_add.set_sensitive(not value)
|
||||
self._set_button_sensitive()
|
||||
|
||||
def _sig_label(self, screen, signal_data):
|
||||
def _set_button_sensitive(self):
|
||||
if self.record and self.field:
|
||||
field_size = self.record.expr_eval(self.attrs.get('size'))
|
||||
m2m_size = len(self.field.get_eval(self.record))
|
||||
@@ -190,11 +188,17 @@ class Many2Many(WidgetInterface):
|
||||
else:
|
||||
size_limit = False
|
||||
|
||||
self.but_add.set_sensitive(not size_limit)
|
||||
if signal_data[0] >= 1:
|
||||
self.but_remove.set_sensitive(not self._readonly)
|
||||
else:
|
||||
self.but_remove.set_sensitive(False)
|
||||
self.wid_text.set_sensitive(not self._readonly)
|
||||
self.but_add.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and not size_limit))
|
||||
self.but_remove.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and self._position))
|
||||
|
||||
def _sig_label(self, screen, signal_data):
|
||||
self._position = signal_data[0]
|
||||
self._set_button_sensitive()
|
||||
|
||||
def display(self, record, field):
|
||||
super(Many2Many, self).display(record, field)
|
||||
|
||||
@@ -75,14 +75,29 @@ class Many2One(WidgetInterface):
|
||||
|
||||
def _readonly_set(self, value):
|
||||
self._readonly = value
|
||||
self.wid_text.set_editable(not value)
|
||||
self.but_new.set_sensitive(not value
|
||||
and self.attrs.get('create', True))
|
||||
self._set_button_sensitive()
|
||||
if value:
|
||||
self.widget.set_focus_chain([])
|
||||
else:
|
||||
self.widget.set_focus_chain([self.wid_text])
|
||||
|
||||
def _set_button_sensitive(self):
|
||||
model = self.get_model()
|
||||
if model:
|
||||
access = common.MODELACCESS[model]
|
||||
else:
|
||||
access = {
|
||||
'create': True,
|
||||
'read': True,
|
||||
}
|
||||
self.wid_text.set_editable(not self._readonly)
|
||||
self.but_new.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and self.attrs.get('create', True)
|
||||
and access['create']))
|
||||
self.but_open.set_sensitive(bool(
|
||||
access['read']))
|
||||
|
||||
@property
|
||||
def modified(self):
|
||||
if self.record and self.field:
|
||||
@@ -310,13 +325,7 @@ class Many2One(WidgetInterface):
|
||||
self.changed = False
|
||||
super(Many2One, self).display(record, field)
|
||||
|
||||
model = self.get_model()
|
||||
if model:
|
||||
access = common.MODELACCESS[model]
|
||||
if not access['create'] or not self.attrs.get('create', True):
|
||||
self.but_new.set_sensitive(False)
|
||||
if not access['read']:
|
||||
self.but_open.set_sensitive(False)
|
||||
self._set_button_sensitive()
|
||||
|
||||
if not field:
|
||||
self.wid_text.set_text('')
|
||||
|
||||
@@ -20,6 +20,8 @@ class One2Many(WidgetInterface):
|
||||
|
||||
self.widget = gtk.VBox(homogeneous=False, spacing=2)
|
||||
self._readonly = True
|
||||
self._position = 0
|
||||
self._length = 0
|
||||
|
||||
hbox = gtk.HBox(homogeneous=False, spacing=0)
|
||||
hbox.set_border_width(2)
|
||||
@@ -223,15 +225,53 @@ class One2Many(WidgetInterface):
|
||||
|
||||
def _readonly_set(self, value):
|
||||
self._readonly = value
|
||||
self.but_new.set_sensitive(not value
|
||||
and self.attrs.get('create', True))
|
||||
self.but_del.set_sensitive(not value
|
||||
and self.attrs.get('delete', True))
|
||||
self.but_undel.set_sensitive(not value)
|
||||
self._set_button_sensitive()
|
||||
|
||||
def _set_button_sensitive(self):
|
||||
access = common.MODELACCESS[self.screen.model_name]
|
||||
if self.record and self.field:
|
||||
field_size = self.record.expr_eval(self.attrs.get('size'))
|
||||
o2m_size = len(self.field.get_eval(self.record))
|
||||
size_limit = (field_size is not None
|
||||
and o2m_size >= field_size >= 0)
|
||||
else:
|
||||
size_limit = False
|
||||
|
||||
self.but_new.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and self.attrs.get('create', True)
|
||||
and not size_limit
|
||||
and access['create']))
|
||||
self.but_del.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and self.attrs.get('delete', True)
|
||||
and self._position
|
||||
and access['delete']))
|
||||
self.but_undel.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and not size_limit
|
||||
and self._position))
|
||||
self.but_open.set_sensitive(bool(
|
||||
self._position
|
||||
and access['read']))
|
||||
self.but_next.set_sensitive(bool(
|
||||
self._position
|
||||
and self._position < self._length))
|
||||
self.but_pre.set_sensitive(bool(
|
||||
self._position
|
||||
and self._position > 1))
|
||||
if self.attrs.get('add_remove'):
|
||||
self.wid_text.set_sensitive(not value)
|
||||
self.but_add.set_sensitive(not value)
|
||||
self.but_remove.set_sensitive(not value)
|
||||
self.wid_text.set_sensitive(not self._readonly)
|
||||
self.but_add.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and not size_limit
|
||||
and access['write']
|
||||
and access['read']))
|
||||
self.but_remove.set_sensitive(bool(
|
||||
not self._readonly
|
||||
and self._position
|
||||
and access['write']
|
||||
and access['read']))
|
||||
|
||||
def _sig_new(self, widget):
|
||||
if not common.MODELACCESS[self.screen.model_name]['create']:
|
||||
@@ -362,63 +402,20 @@ class One2Many(WidgetInterface):
|
||||
callback([(i, None) for i in ids])
|
||||
|
||||
def _sig_label(self, screen, signal_data):
|
||||
name = '_'
|
||||
if self.record and self.field:
|
||||
field_size = self.record.expr_eval(self.attrs.get('size'))
|
||||
o2m_size = len(self.field.get_eval(self.record))
|
||||
size_limit = (field_size is not None
|
||||
and o2m_size >= field_size >= 0)
|
||||
self._position = signal_data[0]
|
||||
self._length = signal_data[1]
|
||||
if self._position >= 1:
|
||||
name = str(self._position)
|
||||
else:
|
||||
size_limit = False
|
||||
|
||||
self.but_new.set_sensitive(not size_limit)
|
||||
if signal_data[0] >= 1:
|
||||
name = str(signal_data[0])
|
||||
self.but_open.set_sensitive(True)
|
||||
self.but_del.set_sensitive(not self._readonly
|
||||
and self.attrs.get('delete', True))
|
||||
if self.attrs.get('add_remove'):
|
||||
self.but_remove.set_sensitive(not self._readonly)
|
||||
self.but_add.set_sensitive(not self._readonly
|
||||
and not size_limit)
|
||||
if signal_data[0] < signal_data[1]:
|
||||
self.but_next.set_sensitive(True)
|
||||
else:
|
||||
self.but_next.set_sensitive(False)
|
||||
if signal_data[0] > 1:
|
||||
self.but_pre.set_sensitive(True)
|
||||
else:
|
||||
self.but_pre.set_sensitive(False)
|
||||
self.but_del.set_sensitive(not self._readonly)
|
||||
self.but_undel.set_sensitive(not self._readonly and not size_limit)
|
||||
else:
|
||||
self.but_open.set_sensitive(False)
|
||||
self.but_del.set_sensitive(False)
|
||||
self.but_undel.set_sensitive(not size_limit)
|
||||
self.but_next.set_sensitive(False)
|
||||
self.but_pre.set_sensitive(False)
|
||||
if self.attrs.get('add_remove'):
|
||||
self.but_remove.set_sensitive(False)
|
||||
self.but_add.set_sensitive(not size_limit)
|
||||
|
||||
line = '(%s/%s)' % (name, signal_data[1])
|
||||
name = '_'
|
||||
line = '(%s/%s)' % (name, self._length)
|
||||
self.label.set_text(line)
|
||||
self._set_button_sensitive()
|
||||
|
||||
def display(self, record, field):
|
||||
super(One2Many, self).display(record, field)
|
||||
|
||||
access = common.MODELACCESS[self.screen.model_name]
|
||||
if not access['create'] or not self.attrs.get('create', True):
|
||||
self.but_new.set_sensitive(False)
|
||||
if not access['write'] or not access['read']:
|
||||
if hasattr(self, 'but_add'):
|
||||
self.but_add.set_sensitive(False)
|
||||
if hasattr(self, 'but_remove'):
|
||||
self.but_remove.set_sensitive(False)
|
||||
if not access['read']:
|
||||
self.but_open.set_sensitive(False)
|
||||
if not access['delete'] or not self.attrs.get('delete', True):
|
||||
self.but_del.set_sensitive(False)
|
||||
self._set_button_sensitive()
|
||||
|
||||
if field is None:
|
||||
self.screen.new_group()
|
||||
|
||||
@@ -67,10 +67,12 @@ class Reference(Many2One):
|
||||
|
||||
def _readonly_set(self, value):
|
||||
super(Reference, self)._readonly_set(value)
|
||||
self.widget_combo.set_sensitive(not value)
|
||||
if not value:
|
||||
self.widget.set_focus_chain([self.widget_combo, self.wid_text])
|
||||
|
||||
def _set_button_sensitive(self):
|
||||
self.widget_combo.set_sensitive(not self._readonly)
|
||||
|
||||
@property
|
||||
def modified(self):
|
||||
if self.record and self.field:
|
||||
|
||||
Reference in new issue
Block a user