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:
Cédric Krier
2023-03-19 01:20:45 +01:00
parent df56af6cde
commit 0bff126745
4 changed files with 39 additions and 46 deletions
+17 -21
View File
@@ -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
View File
@@ -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');
}
+16 -19
View File
@@ -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)
+3 -3
View File
@@ -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