Reviewers: ,
Please review this at http://codereview.tryton.org/587006/
Affected files:
M CHANGELOG
M tryton/config.py
M tryton/gui/main.py
Index: CHANGELOG
===================================================================
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+* Add toggle button for menu
* Use range for Date/Time fields in filter box
* Allow multi-selection for Selection field in filter box
Index: tryton/config.py
===================================================================
--- a/tryton/config.py
+++ b/tryton/config.py
@@ -69,6 +69,7 @@
'roundup.url': 'http://bugs.tryton.org/roundup/',
'roundup.xmlrpc': 'roundup-xmlrpc.tryton.org',
'menu.pane': 200,
+ 'menu.expanded': True,
}
self.config = {}
self.options = {
Index: tryton/gui/main.py
===================================================================
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -147,7 +147,20 @@
self.buttons = {}
self.pane = gtk.HPaned()
+ self.pane.connect('button-press-event',
+ self.on_paned_button_press_event)
+
self.menu_screen = None
+ self.menu_expander = gtk.Expander()
+ self.menu_expander.connect('notify::expanded', self.menu_expanded)
+ if self.menu_expander.get_direction() == gtk.TEXT_DIR_RTL:
+ self.menu_expander.set_direction(gtk.TEXT_DIR_LTR)
+ else:
+ self.menu_expander.set_direction(gtk.TEXT_DIR_RTL)
+ self.menu_expander.show()
+ self.menu_expander.set_expanded(CONFIG['menu.expanded'])
+ self.pane.add(self.menu_expander)
+
self.vbox.pack_start(self.pane, True, True)
self.notebook = gtk.Notebook()
@@ -981,13 +994,10 @@
res = self._win_del()
else:
res = False
- if self.pane.get_child1():
- self.pane.remove(self.pane.get_child1())
- if self.pane.get_position():
- CONFIG['menu.pane'] = self.pane.get_position()
if self.menu_screen:
self.menu_screen.destroy()
self.menu_screen = None
+ self.menu_expander_clear()
return True
def sig_logout(self, widget=None, disconnect=True):
@@ -1025,25 +1035,40 @@
def sig_shortcuts(self, widget):
Shortcuts().run()
- def menu_toggle(self, nohide=False):
- has_focus = True
- if (self.menu_screen
- and self.menu_screen.current_view.view_type == 'tree'):
- try:
- has_focus = \
- self.menu_screen.current_view.widget_tree.has_focus()
- except AttributeError:
- has_focus =
(self.menu_screen.current_view.widget_tree.flags()
- & gtk.HAS_FOCUS)
- if self.pane.get_position() and has_focus:
- CONFIG['menu.pane'] = self.pane.get_position()
- if not nohide:
- self.pane.set_position(0)
- self.notebook.grab_focus()
- else:
+ def menu_toggle(self):
+ expander = self.pane.get_child1()
+ if expander:
+ expander.set_expanded(not expander.get_expanded())
+
+ @property
+ def menu_expander_size(self):
+ return self.menu_expander.style_get_property('expander-size')
+
+ def menu_expanded(self, expander, *args):
+ expanded = expander.get_expanded()
+ CONFIG['menu.expanded'] = expanded
+ if expanded:
self.pane.set_position(int(CONFIG['menu.pane']))
if self.menu_screen:
self.menu_screen.set_cursor()
+ else:
+ CONFIG['menu.pane'] = self.pane.get_position()
+ self.pane.set_position(self.menu_expander_size)
+ self.notebook.grab_focus()
+
+ def menu_expander_clear(self):
+ if self.menu_expander.get_child():
+ self.menu_expander.remove(self.menu_expander.get_child())
+ expanded = self.menu_expander.get_expanded()
+ CONFIG['menu.expanded'] = expanded
+ if expanded:
+ CONFIG['menu.pane'] = self.pane.get_position()
+
+ def on_paned_button_press_event(self, paned, event):
+ expander = self.pane.get_child1()
+ if expander:
+ return not expander.get_expanded()
+ return False
def sig_win_menu(self, prefs=None):
from tryton.gui.window.view_form.screen import Screen
@@ -1054,12 +1079,8 @@
False)
except RPCException:
return False
- 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)
+ self.menu_expander_clear()
action = PYSONDecoder().decode(prefs['pyson_menu'])
view_ids = False
if action.get('views', []):
@@ -1073,7 +1094,7 @@
# 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)
+ self.menu_expander.add(screen.screen_container.alternate_viewport)
screen.search_filter()
screen.display(set_cursor=True)
self.menu_screen = screen
--
--
[email protected] mailing list