diff --git a/sao/src/screen.js b/sao/src/screen.js index 641b1e17bc..b982ee6667 100644 --- a/sao/src/screen.js +++ b/sao/src/screen.js @@ -926,6 +926,18 @@ get number_of_views() { return this.views.length + this.view_to_load.length; }, + get view_index() { + return this.views.indexOf(this.current_view); + }, + get next_view_type() { + var views = this.views.concat(this.view_to_load) + var next_view_index = (this.view_index + 1) % views.length; + var next_view = views[next_view_index]; + if (typeof next_view != 'string') { + next_view = next_view.view_type; + } + return next_view; + }, switch_view: function( view_type=null, view_id=null, creatable=null, display=true) { if (view_id !== null) { diff --git a/sao/src/tab.js b/sao/src/tab.js index d2a430600d..fe508f2d7b 100644 --- a/sao/src/tab.js +++ b/sao/src/tab.js @@ -1452,6 +1452,7 @@ } } const view_type = this.screen.current_view.view_type; + var next_view_type = this.screen.next_view_type; const has_views = this.screen.number_of_views > 1; var buttons = ['print', 'relate', 'email', 'attach']; for (const button_id of buttons) { @@ -1472,7 +1473,9 @@ set_sensitive(button_id, position && can_be_sensitive); } set_sensitive( - 'switch_', (position || (view_type == 'form')) && has_views); + 'switch_', + (position || (view_type == 'form') || (next_view_type != 'form')) && + has_views); set_sensitive('delete_', this.screen.deletable); set_sensitive('previous', this.screen.has_previous()); set_sensitive('next', this.screen.has_next()); diff --git a/tryton/tryton/gui/window/form.py b/tryton/tryton/gui/window/form.py index 51a721c6b6..c6f4a32e02 100644 --- a/tryton/tryton/gui/window/form.py +++ b/tryton/tryton/gui/window/form.py @@ -578,6 +578,7 @@ class Form(TabContent): name = str(position) if position else '_' selected = len(self.screen.selected_records) view_type = self.screen.current_view.view_type + next_view_type = self.screen.next_view_type has_views = self.screen.number_of_views > 1 if selected > 1: name += '#%i' % selected @@ -593,7 +594,9 @@ class Form(TabContent): for b in self.screen.get_buttons()) set_sensitive(button_id, bool(position) and can_be_sensitive) set_sensitive( - 'switch', (position or view_type == 'form') and has_views) + 'switch', + (position or view_type == 'form' or next_view_type != 'form') + and has_views) set_sensitive('remove', self.screen.deletable) set_sensitive('previous', self.screen.has_prev()) set_sensitive('next', self.screen.has_next()) diff --git a/tryton/tryton/gui/window/view_form/screen/screen.py b/tryton/tryton/gui/window/view_form/screen/screen.py index 0f499ecbe0..3546c038c7 100644 --- a/tryton/tryton/gui/window/view_form/screen/screen.py +++ b/tryton/tryton/gui/window/view_form/screen/screen.py @@ -536,6 +536,19 @@ class Screen: def number_of_views(self): return len(self.views) + len(self.view_to_load) + @property + def view_index(self): + return self.__current_view + + @property + def next_view_type(self): + views = self.views + self.view_to_load + next_view_index = (self.view_index + 1) % len(views) + next_view = views[next_view_index] + if not isinstance(next_view, str): + next_view = next_view.view_type + return next_view + def switch_view( self, view_type=None, view_id=None, creatable=None, display=True): if view_id is not None: