Reviewers: ,
Please review this at http://codereview.tryton.org/276002/
Affected files:
M tryton/gui/main.py
Index: tryton/gui/main.py
===================================================================
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -17,6 +17,7 @@
import tryton.rpc as rpc
from tryton.config import CONFIG, TRYTON_ICON, get_config_dir
import tryton.common as common
+from tryton.pyson import PYSONDecoder
from tryton.action import Action
from tryton.exceptions import TrytonServerError, TrytonError
from tryton.gui.window import Window
@@ -405,7 +406,7 @@
image = gtk.Image()
image.set_from_stock('tryton-start-here', gtk.ICON_SIZE_MENU)
imagemenuitem_menu.set_image(image)
- imagemenuitem_menu.connect('activate', self.sig_win_menu)
+ imagemenuitem_menu.connect('activate', lambda *a:
self.sig_win_menu())
imagemenuitem_menu.set_accel_path('<tryton>/User/Menu Reload')
menu_user.add(imagemenuitem_menu)
@@ -416,14 +417,6 @@
imagemenuitem_menu_toggle.set_accel_path('<tryton>/User/Menu
Toggle')
menu_user.add(imagemenuitem_menu_toggle)
- imagemenuitem_home = gtk.ImageMenuItem(_('_Home'),
self.accel_group)
- image = gtk.Image()
- image.set_from_stock('tryton-go-home', gtk.ICON_SIZE_MENU)
- imagemenuitem_home.set_image(image)
- imagemenuitem_home.connect('activate', self.sig_home_new)
- imagemenuitem_home.set_accel_path('<tryton>/User/Home')
- menu_user.add(imagemenuitem_home)
-
menu_user.add(gtk.SeparatorMenuItem())
imagemenuitem_send_request = gtk.ImageMenuItem(_('_Send a
Request'))
@@ -936,10 +929,13 @@
translate.set_language_direction(prefs['language_direction'])
CONFIG['client.language_direction'] = \
prefs['language_direction']
- menu_id = self.sig_win_menu(quiet=False, prefs=prefs)
- if menu_id:
- self.sig_home_new(quiet=True, except_id=menu_id,
prefs=prefs)
+ self.sig_win_menu(prefs=prefs)
+ for action_id in prefs.get('actions', []):
+ Action.execute(action_id, {})
self.request_set()
+ self.sb_username.set_text(prefs.get('status_bar', ''))
+ self.sb_servername.set_text('%s@%s:%d/%s'
+ % (rpc._USERNAME, rpc._HOST, rpc._PORT, rpc._DATABASE))
if prefs and 'language' in prefs:
translate.setlang(prefs['language'], prefs.get('locale'))
if CONFIG['client.lang'] != prefs['language']:
@@ -1041,19 +1037,9 @@
if self.menu_screen:
self.menu_screen.set_cursor()
- def sig_win_menu(self, widget=None, quiet=True, prefs=None):
- if self.pane.get_child1():
- self.pane.remove(self.pane.get_child1())
- if self.pane.get_position():
- CONFIG['menu.pane'] = self.pane.get_position()
- self.menu_screen = None
- self.menu_toggle(nohide=True)
- res = self.sig_win_new(widget, menu_type='menu', quiet=quiet,
- prefs=prefs)
- return res
+ def sig_win_menu(self, prefs=None):
+ from tryton.gui.window.view_form.screen import Screen
- def sig_win_new(self, widget=None, menu_type='menu', quiet=True,
- except_id=False, prefs=None):
if not prefs:
args = ('model', 'res.user', 'get_preferences', False,
rpc.CONTEXT)
try:
@@ -1061,29 +1047,30 @@
except TrytonServerError, exception:
prefs = common.process_exception(exception, *args)
if not prefs:
- return False
- self.sb_username.set_text(prefs.get('status_bar', ''))
- self.sb_servername.set_text('%s@%s:%d/%s' % (rpc._USERNAME,
- rpc._HOST, rpc._PORT, rpc._DATABASE))
- if not prefs[menu_type]:
- if quiet:
- return False
- common.warning(_('You can not log into the system!\n' \
- 'Verify if you have a menu defined on your user.'),
- 'Access Denied!')
- rpc.logout()
- self.refresh_ssl()
- return False
- act_id = prefs[menu_type]
- if except_id and act_id == except_id:
- return act_id
- Action.execute(act_id, {})
- return act_id
-
- def sig_home_new(self, widget=None, quiet=True, except_id=False,
- prefs=None):
- return self.sig_win_new(widget, menu_type='action', quiet=quiet,
- except_id=except_id, prefs=prefs)
+ return
+ if self.pane.get_child1():
+ self.pane.remove(self.pane.get_child1())
+ if self.pane.get_position():
+ CONFIG['menu.pane'] = self.pane.get_position()
+ self.menu_screen = None
+ self.menu_toggle(nohide=True)
+ action = PYSONDecoder().decode(prefs['pyson_menu'])
+ view_ids = False
+ if action.get('views', []):
+ view_ids = [x[0] for x in action['views']]
+ elif action.get('view_id', False):
+ view_ids = [action['view_id'][0]]
+ ctx = rpc.CONTEXT.copy()
+ domain = PYSONDecoder(ctx).decode(action['pyson_domain'])
+ screen = Screen(action['res_model'], mode=['tree'],
+ view_ids=view_ids, domain=domain, readonly=True)
+ # Use alternate view to not show search box
+ screen.screen_container.alternate_view = True
+ screen.switch_view(view_type=screen.current_view.view_type)
+ self.pane.pack1(screen.screen_container.alternate_viewport)
+ screen.search_filter()
+ screen.display(set_cursor=True)
+ self.menu_screen = screen
def sig_plugin_execute(self, widget):
page = self.notebook.get_current_page()
@@ -1136,14 +1123,6 @@
if current_page == page_num:
self._sig_page_changt(self.notebook, None,
page_num)
return
- if not self.pane.get_child1():
- screen = page.screen
- screen.screen_container.alternate_view = True
- screen.switch_view(view_type=screen.current_view.view_type)
- self.pane.pack1(screen.screen_container.alternate_viewport)
- self.menu_screen = screen
- screen.display(set_cursor=True)
- return
previous_page_id = self.notebook.get_current_page()
previous_widget = self.notebook.get_nth_page(previous_page_id)
if previous_widget and hide_current:
--
[email protected] mailing list