Disable new button when record is modified
To simplify the management of the state of button, activate_save is merged with set_buttons_sensitive. Closes #8053
This commit is contained in:
+17
-21
@@ -497,9 +497,8 @@
|
||||
}
|
||||
};
|
||||
|
||||
this.set_buttons_sensitive();
|
||||
|
||||
this.view_prm = this.screen.switch_view().done(() => {
|
||||
this.set_buttons_sensitive();
|
||||
this.content.append(screen.screen_container.el);
|
||||
if (attributes.res_id) {
|
||||
if (!jQuery.isArray(attributes.res_id)) {
|
||||
@@ -817,7 +816,7 @@
|
||||
return this.modified_save().then(() => {
|
||||
return this.screen.new_().then(() => {
|
||||
this.info_bar.clear();
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
});
|
||||
});
|
||||
},
|
||||
@@ -870,7 +869,7 @@
|
||||
.then(set_cursor => {
|
||||
return this.screen.display(set_cursor).then(() => {
|
||||
this.info_bar.clear();
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
this.screen.count_tab_domain();
|
||||
});
|
||||
});
|
||||
@@ -924,7 +923,7 @@
|
||||
return this.modified_save().then(() => {
|
||||
var prm = this.screen.display_previous();
|
||||
this.info_bar.clear();
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
return prm;
|
||||
});
|
||||
},
|
||||
@@ -932,7 +931,7 @@
|
||||
return this.modified_save().then(() => {
|
||||
var prm = this.screen.display_next();
|
||||
this.info_bar.clear();
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
return prm;
|
||||
});
|
||||
},
|
||||
@@ -1051,14 +1050,18 @@
|
||||
}
|
||||
this.title.text(label);
|
||||
this.title.attr('title', title);
|
||||
this.set_buttons_sensitive(revision);
|
||||
this.set_buttons_sensitive();
|
||||
},
|
||||
set_buttons_sensitive: function(revision) {
|
||||
set_buttons_sensitive: function() {
|
||||
var revision = this.screen.context._datetime;
|
||||
if (!revision) {
|
||||
var access = Sao.common.MODELACCESS.get(this.screen.model_name);
|
||||
var modified = this.screen.modified();
|
||||
const accesses = new Map([
|
||||
['new_', access.create],
|
||||
['save', access.create || access.write],
|
||||
['new_', access.create && !modified],
|
||||
['save',
|
||||
(access.create || access.write) &&
|
||||
modified && !this.screen.readonly],
|
||||
['delete_', access.delete],
|
||||
['copy', access.create],
|
||||
['import', access.create],
|
||||
@@ -1465,7 +1468,7 @@
|
||||
name += '#' + selected;
|
||||
}
|
||||
}
|
||||
var buttons = ['print', 'relate', 'email', 'save', 'attach'];
|
||||
var buttons = ['print', 'relate', 'email', 'attach'];
|
||||
for (const button_id of buttons) {
|
||||
const button = this.buttons[button_id];
|
||||
let can_be_sensitive = button._can_be_sensitive;
|
||||
@@ -1480,8 +1483,6 @@
|
||||
var keyword = button.attributes.keyword || 'action';
|
||||
return keyword == button_id;
|
||||
});
|
||||
} else if (button_id == 'save') {
|
||||
can_be_sensitive &= !this.screen.readonly;
|
||||
}
|
||||
set_sensitive(button_id, position && can_be_sensitive);
|
||||
}
|
||||
@@ -1504,22 +1505,17 @@
|
||||
}
|
||||
this.status_label.text(msg).attr('title', msg);
|
||||
this.info_bar.clear();
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
this.refresh_attachment_preview();
|
||||
},
|
||||
record_modified: function() {
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
this.info_bar.refresh();
|
||||
},
|
||||
record_saved: function() {
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
this.refresh_resources();
|
||||
},
|
||||
activate_save: function() {
|
||||
this.menu_buttons.save.toggleClass(
|
||||
'disabled', !this.screen.modified());
|
||||
this.buttons.save.prop('disabled', !this.screen.modified());
|
||||
},
|
||||
action: function() {
|
||||
window.setTimeout(() => {
|
||||
this.buttons.action.click();
|
||||
|
||||
+3
-3
@@ -388,7 +388,7 @@
|
||||
});
|
||||
},
|
||||
record_message: function(position, size) {
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
if (this.view_type != 'tree') {
|
||||
return;
|
||||
}
|
||||
@@ -420,10 +420,10 @@
|
||||
this.label.text(message).attr('title', message);
|
||||
},
|
||||
record_modified: function() {
|
||||
this.activate_save();
|
||||
this.set_buttons_sensitive();
|
||||
this.info_bar.refresh();
|
||||
},
|
||||
activate_save: function() {
|
||||
set_buttons_sensitive: function() {
|
||||
if (this.but_ok.hasClass('disabled') && this.screen.modified()) {
|
||||
this.but_ok.removeClass('disabled');
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ class Form(TabContent):
|
||||
self.screen.search_filter()
|
||||
|
||||
self.update_revision()
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
|
||||
def get_toolbars(self):
|
||||
try:
|
||||
@@ -374,14 +374,18 @@ class Form(TabContent):
|
||||
tooltip = self.name
|
||||
self.title.set_text(label)
|
||||
tooltips.set_tip(self.title, tooltip)
|
||||
self.set_buttons_sensitive(revision)
|
||||
self.set_buttons_sensitive()
|
||||
|
||||
def set_buttons_sensitive(self, revision=None):
|
||||
def set_buttons_sensitive(self):
|
||||
revision = self.screen.context.get('_datetime')
|
||||
if not revision:
|
||||
access = common.MODELACCESS[self.model]
|
||||
modified = self.screen.modified()
|
||||
for name, sensitive in [
|
||||
('new', access['create']),
|
||||
('save', access['create'] or access['write']),
|
||||
('new', access['create'] and not modified),
|
||||
('save',
|
||||
(access['create'] or access['write'])
|
||||
and modified and not self.screen.readonly),
|
||||
('remove', access['delete']),
|
||||
('copy', access['create']),
|
||||
('import', access['create']),
|
||||
@@ -467,7 +471,7 @@ class Form(TabContent):
|
||||
return
|
||||
self.screen.new()
|
||||
self.info_bar_clear()
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
|
||||
def sig_copy(self, widget=None):
|
||||
if not common.MODELACCESS[self.model]['create']:
|
||||
@@ -502,14 +506,14 @@ class Form(TabContent):
|
||||
return
|
||||
self.screen.display_prev()
|
||||
self.info_bar_clear()
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
|
||||
def sig_next(self, widget=None):
|
||||
if not self.modified_save():
|
||||
return
|
||||
self.screen.display_next()
|
||||
self.info_bar_clear()
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
|
||||
def sig_reload(self, test_modified=True):
|
||||
if test_modified:
|
||||
@@ -531,7 +535,6 @@ class Form(TabContent):
|
||||
self.screen.display(set_cursor=set_cursor)
|
||||
self.info_bar_clear()
|
||||
self.set_buttons_sensitive()
|
||||
self.activate_save()
|
||||
self.screen.count_tab_domain()
|
||||
return True
|
||||
|
||||
@@ -601,8 +604,7 @@ class Form(TabContent):
|
||||
selected = len(self.screen.selected_records)
|
||||
if selected > 1:
|
||||
name += '#%i' % selected
|
||||
for button_id in ('print', 'relate', 'email', 'open', 'save',
|
||||
'attach'):
|
||||
for button_id in ['print', 'relate', 'email', 'open', 'attach']:
|
||||
button = self.buttons[button_id]
|
||||
can_be_sensitive = getattr(button, '_can_be_sensitive', True)
|
||||
if button_id in {'print', 'relate', 'email', 'open'}:
|
||||
@@ -612,8 +614,6 @@ class Form(TabContent):
|
||||
can_be_sensitive |= any(
|
||||
b.attrs.get('keyword', 'action') == action_type
|
||||
for b in self.screen.get_buttons())
|
||||
elif button_id == 'save':
|
||||
can_be_sensitive &= not self.screen.readonly
|
||||
set_sensitive(button_id, bool(position) and can_be_sensitive)
|
||||
set_sensitive('switch', self.screen.number_of_views > 1)
|
||||
set_sensitive('remove', self.screen.deletable)
|
||||
@@ -629,7 +629,7 @@ class Form(TabContent):
|
||||
msg = "%s/%s" % (name, common.humanize(size))
|
||||
self.status_label.set_text(msg)
|
||||
self.info_bar_clear()
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
self.refresh_attachment_preview()
|
||||
|
||||
def record_modified(self):
|
||||
@@ -637,12 +637,12 @@ class Form(TabContent):
|
||||
# As it is called via idle_add, the form could have been destroyed
|
||||
# in the meantime.
|
||||
if self.widget_get().props.window:
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
GLib.idle_add(_record_modified)
|
||||
self.info_bar_refresh()
|
||||
|
||||
def record_saved(self):
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
self.refresh_resources()
|
||||
|
||||
def modified_save(self):
|
||||
@@ -693,9 +693,6 @@ class Form(TabContent):
|
||||
}
|
||||
Action.execute(action, data, context=self.screen.local_context)
|
||||
|
||||
def activate_save(self):
|
||||
self.buttons['save'].props.sensitive = self.screen.modified()
|
||||
|
||||
def sig_win_close(self, widget):
|
||||
Main().sig_win_close(widget)
|
||||
|
||||
|
||||
@@ -345,7 +345,7 @@ class WinForm(NoModal, InfoBar):
|
||||
win.show()
|
||||
|
||||
def record_message(self, position, size, *args):
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
if self.view_type != 'tree':
|
||||
return
|
||||
name = '_'
|
||||
@@ -380,10 +380,10 @@ class WinForm(NoModal, InfoBar):
|
||||
self.label.set_text(line)
|
||||
|
||||
def record_modified(self, *args):
|
||||
self.activate_save()
|
||||
self.set_buttons_sensitive()
|
||||
self.info_bar_refresh()
|
||||
|
||||
def activate_save(self):
|
||||
def set_buttons_sensitive(self):
|
||||
modified = self.screen.modified()
|
||||
# Keep sensible as change could have been trigger by a Many2One edition
|
||||
sensitive = modified or self.but_ok.props.sensitive
|
||||
|
||||
Reference in New Issue
Block a user