Manage domains on Action Window

review589002
This commit is contained in:
Cédric Krier committed 2012-11-16 00:49:16 +01:00
1 parent 26e5fd0570
commit e071b088da
6 files changed
+86 -24

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
* Manage domains on Action Window
* Use range for Date/Time fields in filter box
* Allow multi-selection for Selection field in filter box
+8 -1
View File
@@ -119,6 +119,12 @@ class Action(object):
search_value = PYSONDecoder(search_context).decode(
action['pyson_search_value'] or '[]')
tab_domain_context = ctx.copy()
tab_domain_context['context'] = ctx
tab_domain_context['_user'] = rpc._USER
decoder = PYSONDecoder(tab_domain_context)
tab_domain = [(n, decoder.decode(d)) for n, d in action['domains']]
name = False
if action.get('window_name', True):
name = action.get('name', False)
@@ -131,7 +137,8 @@ class Action(object):
limit=action.get('limit'),
auto_refresh=action.get('auto_refresh'),
search_value=search_value,
icon=(action.get('icon.rec_name') or ''))
icon=(action.get('icon.rec_name') or ''),
tab_domain=tab_domain)
elif action['type'] == 'ir.action.wizard':
Window.create_wizard(action['wiz_name'], data,
direct_print=action.get('direct_print', False),
+3 -2
View File
@@ -89,7 +89,7 @@ class Form(SignalEvent, TabContent):
def __init__(self, model, res_id=False, domain=None, mode=None,
view_ids=None, context=None, name=False, limit=None,
auto_refresh=False, search_value=None):
auto_refresh=False, search_value=None, tab_domain=None):
super(Form, self).__init__()
if not mode:
@@ -112,7 +112,8 @@ class Form(SignalEvent, TabContent):
self.screen = Screen(self.model, mode=mode, context=self.context,
view_ids=view_ids, domain=domain, limit=limit,
readonly=bool(auto_refresh), search_value=search_value)
readonly=bool(auto_refresh), search_value=search_value,
tab_domain=tab_domain)
self.screen.widget.show()
if not name:
+7 -2
View File
@@ -32,7 +32,7 @@ class Screen(SignalEvent):
def __init__(self, model_name, view_ids=None, mode=None, context=None,
views_preload=None, domain=None, row_activate=None, limit=None,
readonly=False, exclude_field=None, sort=None, search_value=None,
alternate_view=False):
tab_domain=None, alternate_view=False):
if view_ids is None:
view_ids = []
if mode is None:
@@ -70,7 +70,7 @@ class Screen(SignalEvent):
self.new_group()
self.__current_record = None
self.current_record = None
self.screen_container = ScreenContainer()
self.screen_container = ScreenContainer(tab_domain)
self.screen_container.alternate_view = alternate_view
self.widget = self.screen_container.widget_get()
self.__current_view = 0
@@ -169,6 +169,11 @@ class Screen(SignalEvent):
domain = ['AND', domain, self.domain]
else:
domain = self.domain
tab_domain = self.screen_container.get_tab_domain()
if tab_domain:
domain = ['AND', domain, tab_domain]
try:
ids = RPCExecute('model', self.model_name, 'search', domain,
self.offset, self.limit, self.sort, context=self.context)
@@ -71,30 +71,19 @@ class Selection(gtk.ScrolledWindow):
class ScreenContainer(object):
def __init__(self):
def __init__(self, tab_domain):
self.viewport = gtk.Viewport()
self.viewport.set_shadow_type(gtk.SHADOW_NONE)
self.vbox = gtk.VBox(spacing=3)
self.vbox.pack_end(self.viewport)
self.filter_vbox = None
self.filter_button = None
self.but_prev = None
self.but_next = None
self.alternate_viewport = gtk.Viewport()
self.alternate_viewport.set_shadow_type(gtk.SHADOW_NONE)
self.alternate_view = False
self.search_window = None
self.search_table = None
def widget_get(self):
return self.vbox
def set_screen(self, screen):
self.screen = screen
self.tab_domain = tab_domain or []
tooltips = common.Tooltips()
if self.filter_vbox is not None:
return
self.filter_vbox = gtk.VBox(spacing=0)
self.filter_vbox.set_border_width(0)
hbox = gtk.HBox(homogeneous=False, spacing=0)
@@ -171,22 +160,56 @@ class ScreenContainer(object):
hbox.show_all()
hbox.set_focus_chain([self.search_entry])
self.filter_vbox.pack_start(hbox, expand=True, fill=False)
self.filter_vbox.pack_start(hbox, expand=False, fill=False)
hseparator = gtk.HSeparator()
hseparator.show()
self.filter_vbox.pack_start(hseparator, expand=True, fill=False)
self.filter_vbox.pack_start(hseparator, expand=False, fill=False)
self.vbox.pack_start(self.filter_vbox, expand=False, fill=True)
if self.tab_domain:
self.notebook = gtk.Notebook()
self.notebook.props.homogeneous = True
self.notebook.set_scrollable(True)
for name, domain in self.tab_domain:
label = gtk.Label('_' + name)
label.set_use_underline(True)
self.notebook.append_page(gtk.VBox(), label)
self.filter_vbox.pack_start(self.notebook, expand=True, fill=True)
self.notebook.show_all()
# Set the current page before connecting to switch-page to not
# trigger the search a second times.
self.notebook.set_current_page(0)
self.notebook.get_nth_page(0).pack_end(self.viewport)
self.notebook.connect('switch-page', self.switch_page)
self.notebook.connect_after('switch-page', self.switch_page_after)
filter_expand = True
else:
self.notebook = None
self.vbox.pack_end(self.viewport)
filter_expand = False
self.vbox.pack_start(self.filter_vbox, expand=filter_expand, fill=True)
self.but_next.set_sensitive(False)
self.but_prev.set_sensitive(False)
tooltips.enable()
def widget_get(self):
return self.vbox
def set_screen(self, screen):
self.screen = screen
def show_filter(self):
if self.filter_vbox:
self.filter_vbox.show()
if self.notebook:
self.notebook.set_show_tabs(True)
if self.viewport in self.vbox.get_children():
self.vbox.remove(self.viewport)
self.notebook.get_nth_page(self.notebook.get_current_page()
).pack_end(self.viewport)
def hide_filter(self):
if self.filter_vbox:
@@ -194,6 +217,12 @@ class ScreenContainer(object):
if self.filter_button and self.filter_button.get_active():
self.filter_button.set_active(False)
self.filter_button.toggled()
if self.notebook:
self.notebook.set_show_tabs(False)
if self.viewport not in self.vbox.get_children():
self.notebook.get_nth_page(self.notebook.get_current_page()
).remove(self.viewport)
self.vbox.pack_end(self.viewport)
def set(self, widget):
if self.alternate_view:
@@ -232,6 +261,25 @@ class ScreenContainer(object):
def search_prev(self, widget=None):
self.screen.search_prev(self.get_text())
def switch_page(self, notebook, page, page_num):
current_page = notebook.get_nth_page(notebook.get_current_page())
current_page.remove(self.viewport)
new_page = notebook.get_nth_page(page_num)
new_page.pack_end(self.viewport)
def switch_page_after(self, notebook, page, page_num):
self.do_search()
notebook.grab_focus()
def get_tab_domain(self):
if not self.notebook:
return []
idx = self.notebook.get_current_page()
if idx < 0:
return []
return self.tab_domain[idx][1]
def match_selected(self, completion, model, iter):
def callback():
self.update()
+2 -2
View File
@@ -21,7 +21,7 @@ class Window(object):
@staticmethod
def create(view_ids, model, res_id=False, domain=None,
context=None, mode=None, name=False, limit=None,
auto_refresh=False, search_value=None, icon=None):
auto_refresh=False, search_value=None, icon=None, tab_domain=None):
from tryton.gui import Main
if context is None:
context = {}
@@ -31,7 +31,7 @@ class Window(object):
win = Form(model, res_id, domain, mode=mode,
view_ids=(view_ids or []), context=context, name=name,
limit=limit, auto_refresh=auto_refresh,
search_value=search_value)
search_value=search_value, tab_domain=tab_domain)
else:
from board import Board
win = Board(model, view_ids and view_ids[0] or None,