本文整理汇总了Python中widget.screen.Screen.switch_view方法的典型用法代码示例。如果您正苦于以下问题:Python Screen.switch_view方法的具体用法?Python Screen.switch_view怎么用?Python Screen.switch_view使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类widget.screen.Screen
的用法示例。
在下文中一共展示了Screen.switch_view方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
class one2many_list(interface.widget_interface):
def __init__(self, window, parent, model, attrs={}):
interface.widget_interface.__init__(self, window, parent, model, attrs)
self.context = {}
#TODO:
# group by context are evaled here as we need the context in screen
# while displaying.
# We need a better way to eval context that has group_by'
# We needed to do this as normal context also get evaled here
# and results in a traceback which should not be evaled here.
if str(attrs.get('context',"{}")).find('group_by') != -1:
self.context = tools.expr_eval(attrs.get('context',"{}"))
self._readonly = self.default_readonly
self.widget = gtk.VBox(homogeneous=False, spacing=5)
hb = gtk.HBox(homogeneous=False, spacing=5)
menubar = gtk.MenuBar()
if hasattr(menubar, 'set_pack_direction') and \
hasattr(menubar, 'set_child_pack_direction'):
menubar.set_pack_direction(gtk.PACK_DIRECTION_LTR)
menubar.set_child_pack_direction(gtk.PACK_DIRECTION_LTR)
menuitem_title = gtk.ImageMenuItem(stock_id='gtk-preferences')
menu_title = gtk.Menu()
menuitem_set_to_default = gtk.MenuItem(_('Set to default value'), True)
menuitem_set_to_default.connect('activate', lambda *x:self._menu_sig_default_get())
menu_title.add(menuitem_set_to_default)
menuitem_set_default = gtk.MenuItem(_('Set Default'), True)
menuitem_set_default.connect('activate', lambda *x: self._menu_sig_default_set())
menu_title.add(menuitem_set_default)
menuitem_title.set_submenu(menu_title)
menubar.add(menuitem_title)
hb.pack_start(menubar, expand=True, fill=True)
if self.context.get('group_by'):
self.context['group_by'] = [self.context['group_by']]
# the context to pass to default_get can be optionally specified in
# the context of the one2many field. We also support a legacy
# 'default_get' attribute for the same effect (pending removal)
default_get_ctx = (attrs.get('default_get') or attrs.get('context'))
self.screen = Screen(attrs['relation'],
view_type=attrs.get('mode','tree,form').split(','),
parent=self.parent, views_preload=attrs.get('views', {}),
tree_saves=attrs.get('saves', False),
create_new=True,
context=self.context,
row_activate=self._on_activate,
default_get=default_get_ctx,
window=self._window, readonly=self._readonly, limit=pager.DEFAULT_LIMIT)
self.screen.type = 'one2many'
self.pager = pager(object=self, relation=attrs['relation'], screen=self.screen)
# Button New
self.eb_new = self.pager.create_event_box(_('Create a new entry'), self._sig_new, 'gtk-new')
hb.pack_start(self.eb_new, expand=False, fill=False)
# Button Edit
self.eb_open = self.pager.create_event_box(_('Edit this entry'), self._sig_edit, 'gtk-open')
hb.pack_start(self.eb_open, expand=False, fill=False)
# Button Delete
self.eb_del = self.pager.create_event_box(_('Remove this entry'), self._sig_remove, 'gtk-delete')
hb.pack_start(self.eb_del, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Button Previous Page
self.eb_prev_page = self.pager.create_event_box(_('Previous Page'), self._sig_prev_page, 'gtk-goto-first')
hb.pack_start(self.eb_prev_page, expand=False, fill=False)
# Button Previous Record
self.eb_pre = self.pager.create_event_box(_('Previous Record'), self._sig_previous, 'gtk-go-back')
hb.pack_start(self.eb_pre, expand=False, fill=False)
# Record display
self.label = gtk.Label('(0,0)')
hb.pack_start(self.label, expand=False, fill=False)
# Button Next
self.eb_next = self.pager.create_event_box(_('Next Record'), self._sig_next, 'gtk-go-forward')
hb.pack_start(self.eb_next, expand=False, fill=False)
# Button Next Page
self.eb_next_page = self.pager.create_event_box(_('Next Page'), self._sig_next_page, 'gtk-goto-last')
hb.pack_start(self.eb_next_page, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Button Switch
self.eb_switch = self.pager.create_event_box(_('Switch'), self.switch_view, 'gtk-justify-left')
hb.pack_start(self.eb_switch, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Limit Combo
#.........这里部分代码省略.........
示例2: form
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
#.........这里部分代码省略.........
self.screen.destroy()
del self.screen
del self.glade
del self.widget
self.sw.destroy()
del self.sw
gc.collect()
def ids_get(self):
return self.screen.ids_get()
def id_get(self):
return self.screen.id_get()
def sig_attach(self, widget=None):
id = self.id_get()
if id:
ctx = self.context.copy()
ctx.update(rpc.session.context)
action = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.attachment', 'action_get', ctx)
action['domain'] = [('res_model', '=', self.model), ('res_id', '=', id)]
ctx['default_res_model'] = self.model
ctx['default_res_id'] = id
obj = service.LocalService('action.main')
obj._exec_action(action, {}, ctx)
else:
self.message_state(_('No record selected ! You can only attach to existing record.'), color='red')
return True
def sig_switch(self, widget=None, mode=None):
if not self.modified_save():
return
if mode<>self.screen.current_view.view_type:
self.screen.switch_view(mode=mode)
self.sig_reload()
self.screen.current_view.set_cursor()
def sig_logs(self, widget=None):
id = self.id_get()
if not id:
self.message_state(_('You have to select a record !'), color='red')
return False
res = rpc.session.rpc_exec_auth('/object', 'execute', self.model, 'perm_read', [id])
message = ''
for line in res:
todo = [
('id', _('ID')),
('create_uid', _('Creation User')),
('create_date', _('Creation Date')),
('write_uid', _('Latest Modification by')),
('write_date', _('Latest Modification Date'))
]
for (key,val) in todo:
if line[key] and key in ('create_uid','write_uid','uid'):
line[key] = line[key][1]
message+=val+': '+str(line[key] or '/')+'\n'
common.message(message)
return True
def sig_remove(self, widget=None):
if not self.id_get():
msg = _('Record is not saved ! \n Do You want to Clear Current Record ?')
else:
if self.screen.current_view.view_type == 'form':
msg = _('Are you sure to remove this record ?')
else:
示例3: form
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
#.........这里部分代码省略.........
self.screen.destroy()
self.widget.destroy()
self.sw.destroy()
del self.screen
del self.handlers
def ids_get(self):
return self.screen.ids_get()
def id_get(self):
return self.screen.id_get()
def sig_attach(self, widget=None):
id = self.id_get()
if id:
ctx = self.context.copy()
ctx.update(rpc.session.context)
action = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.attachment', 'action_get', ctx)
action['domain'] = [('res_model', '=', self.model), ('res_id', '=', id)]
ctx['default_res_model'] = self.model
ctx['default_res_id'] = id
obj = service.LocalService('action.main')
obj._exec_action(action, {}, ctx)
else:
self.message_state(_('No record selected ! You can only attach to existing record.'), color='red')
return True
@set_tooltips
def sig_switch(self, widget=None, mode=None):
if not self.modified_save():
return
id = self.screen.id_get()
if mode<>self.screen.current_view.view_type:
self.screen.switch_view(mode=mode)
if id:
self.sig_reload()
self.get_resource(get_id=id)
def sig_logs(self, widget=None):
id = self.id_get()
if not id:
self.message_state(_('You have to select a record !'), color='red')
return False
res = rpc.session.rpc_exec_auth('/object', 'execute', self.model, 'perm_read', [id])
message = ''
for line in res:
todo = [
('id', _('ID')),
('create_uid', _('Creation User')),
('create_date', _('Creation Date')),
('write_uid', _('Latest Modification by')),
('write_date', _('Latest Modification Date')),
('xmlid', _('Internal Module Data ID'))
]
for (key,val) in todo:
if line[key] and key in ('create_uid','write_uid','uid'):
line[key] = line[key][1]
message+=val+': '+str(line[key] or '/')+'\n'
common.message(message)
return True
@set_tooltips
def sig_remove(self, widget=None):
if not self.id_get():
msg = _('Record is not saved ! \n Do you want to clear current record ?')
else:
示例4: action
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
class action(interface.widget_interface):
def __init__(self, window, parent, model, attrs={}):
interface.widget_interface.__init__(self, window, parent, model, attrs)
self.act_id=attrs['name']
res = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.actions.actions', 'read', [self.act_id], ['type'], rpc.session.context)
if not res:
raise Exception, 'ActionNotFound'
type=res[0]['type']
self.action = rpc.session.rpc_exec_auth('/object', 'execute', type, 'read', [self.act_id], False, rpc.session.context)[0]
if 'view_mode' in attrs:
self.action['view_mode'] = attrs['view_mode']
if self.action['type']=='ir.actions.act_window':
if not self.action.get('domain', False):
self.action['domain']='[]'
self.context = {'active_id': False, 'active_ids': []}
self.context.update(eval(self.action.get('context', '{}'), self.context.copy()))
a = self.context.copy()
a['time'] = time
a['datetime'] = datetime
self.domain = tools.expr_eval(self.action['domain'], a)
view_id = []
if self.action['view_id']:
view_id = [self.action['view_id'][0]]
if self.action['view_type']=='form':
mode = (self.action['view_mode'] or 'form,tree').split(',')
self.screen = Screen(self.action['res_model'], view_type=mode, context=self.context, view_ids = view_id, domain=self.domain)
self.win_gl = glade.XML(common.terp_path("openerp.glade"), 'widget_paned', gettext.textdomain())
self.win_gl.signal_connect('on_switch_button_press_event', self._sig_switch)
self.win_gl.signal_connect('on_search_button_press_event', self._sig_search)
self.win_gl.signal_connect('on_open_button_press_event', self._sig_open)
label=self.win_gl.get_widget('widget_paned_lab')
label.set_text(attrs.get('string', self.screen.current_view.title))
vbox=self.win_gl.get_widget('widget_paned_vbox')
vbox.add(self.screen.widget)
self.widget=self.win_gl.get_widget('widget_paned')
self.widget.set_size_request(int(attrs.get('width', -1)), int(attrs.get('height', -1)))
elif self.action['view_type']=='tree':
pass #TODO
def _sig_switch(self, *args):
self.screen.switch_view()
def _sig_search(self, *args):
win = win_search(self.action['res_model'], domain=self.domain, context=self.context)
res = win.go()
if res:
self.screen.clear()
self.screen.load(res)
def _sig_open(self, *args):
obj = service.LocalService('action.main')
obj.execute(self.act_id, {})
def set_value(self, mode, model_field):
self.screen.current_view.set_value()
return True
def display(self, model, model_field):
res_id = rpc.session.rpc_exec_auth('/object', 'execute',
self.action['res_model'], 'search', self.domain, 0,
self.action.get('limit', 80),False,self.context)
self.screen.clear()
self.screen.load(res_id)
return True
示例5: action
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
class action(interface.widget_interface):
def __init__(self, window, parent, model, attrs={}):
interface.widget_interface.__init__(self, window, parent, model, attrs)
self.act_id = int(attrs['name'])
res = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.actions.actions', 'read', [self.act_id], ['type'], rpc.session.context)
if not res:
raise Exception, 'ActionNotFound'
type = res[0]['type']
self.action = rpc.session.rpc_exec_auth('/object', 'execute', type, 'read', [self.act_id], False, rpc.session.context)[0]
if 'view_mode' in attrs:
self.action['view_mode'] = attrs['view_mode']
self.action_view_ids = False
if self.action['type'] == 'ir.actions.act_window':
if not self.action.get('domain', False):
self.action['domain'] = '[]'
if attrs.get('domain',False):
self.action['domain'] = attrs.get('domain')
self.context = {'active_id': False, 'active_ids': []}
self.context.update(tools.expr_eval(self.action.get('context', '{}'), self.context.copy()))
self.domain = tools.expr_eval(self.action['domain'], self.context.copy())
view_id = []
if self.action['view_id']:
view_id = [self.action['view_id'][0]]
if self.action.get('views'):
self.action_view_ids = map(lambda y:y[0], filter(lambda x:x[1] == 'tree',self.action['views']))
if self.action['view_type']=='form':
mode = (self.action['view_mode'] or 'form,tree').split(',')
self.screen = Screen(self.action['res_model'], view_type=mode, context=self.context, view_ids = view_id, domain=self.domain)
self.ui = openerp_gtk_builder('openerp.ui', ['widget_paned'])
self.ui.connect_signals({
'on_switch_button_press_event': self._sig_switch,
'on_search_button_press_event': self._sig_search,
'on_open_button_press_event': self._sig_open,
})
label = self.ui.get_object('widget_paned_lab')
label.set_text(attrs.get('string', self.screen.current_view.title))
vbox = self.ui.get_object('widget_paned_vbox')
vbox.add(self.screen.widget)
self.widget = self.ui.get_object('widget_paned')
self.widget.set_size_request(int(attrs.get('width', -1)), int(attrs.get('height', -1)))
elif self.action['view_type']=='tree':
pass #TODO
def _sig_switch(self, *args):
self.screen.switch_view()
def _sig_search(self, *args):
win = win_search(self.action['res_model'], view_ids = self.action_view_ids, domain=self.domain, context=self.context)
res = win.go()
if res:
self.screen.clear()
self.screen.load(res)
def _sig_open(self, *args):
obj = service.LocalService('action.main')
obj.execute(self.act_id, datas={}, type=None, context={})
def set_value(self, mode, model_field):
self.screen.current_view.set_value()
return True
def display(self, model, model_field):
limit = self.screen.current_view.view_type != 'graph' and self.action.get('limit', 100) or False
res_id = rpc.session.rpc_exec_auth('/object', 'execute',
self.action['res_model'], 'search', self.domain, 0,
limit, False, self.context)
self.screen.clear()
self.screen.load(res_id)
return True
示例6: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
class one2many_list(interface.widget_interface):
def __init__(self, window, parent, model, attrs={}):
interface.widget_interface.__init__(self, window, parent, model, attrs)
self.context = {}
self._readonly = self.default_readonly
self.widget = gtk.VBox(homogeneous=False, spacing=5)
hb = gtk.HBox(homogeneous=False, spacing=5)
event_box = gtk.EventBox()
event_box.set_events(gtk.gdk.BUTTON_PRESS_MASK)
hb.pack_start(event_box, expand=True, fill=True)
# the context to pass to default_get can be optionally specified in
# the context of the one2many field. We also support a legacy
# 'default_get' attribute for the same effect (pending removal)
default_get_ctx = (attrs.get('default_get') or attrs.get('context'))
self.context = tools.expr_eval(attrs.get('context',"{}"), {"__builtins__":None, "parent": parent})
self.screen = Screen(attrs['relation'],
view_type=attrs.get('mode','tree,form').split(','),
parent=self.parent, views_preload=attrs.get('views', {}),
tree_saves=attrs.get('saves', False),
create_new=True,
context=self.context,
row_activate=self._on_activate,
default_get=default_get_ctx,
window=self._window, readonly=self._readonly, limit=pager.DEFAULT_LIMIT)
self.screen.type = 'one2many'
self.pager = pager(object=self, relation=attrs['relation'], screen=self.screen)
# Button New
self.eb_new = self.pager.create_event_box(_('Create a new entry'), self._sig_new, 'gtk-new')
hb.pack_start(self.eb_new, expand=False, fill=False)
# Button Edit
self.eb_open = self.pager.create_event_box(_('Edit this entry'), self._sig_edit, 'gtk-open')
hb.pack_start(self.eb_open, expand=False, fill=False)
# Button Delete
self.eb_del = self.pager.create_event_box(_('Remove this entry'), self._sig_remove, 'gtk-delete')
hb.pack_start(self.eb_del, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Button Previous Page
self.eb_prev_page = self.pager.create_event_box(_('Previous Page'), self._sig_prev_page, 'gtk-goto-first')
hb.pack_start(self.eb_prev_page, expand=False, fill=False)
# Button Previous Record
self.eb_pre = self.pager.create_event_box(_('Previous Record'), self._sig_previous, 'gtk-go-back')
hb.pack_start(self.eb_pre, expand=False, fill=False)
# Record display
self.label = gtk.Label('(0,0)')
hb.pack_start(self.label, expand=False, fill=False)
# Button Next
self.eb_next = self.pager.create_event_box(_('Next Record'), self._sig_next, 'gtk-go-forward')
hb.pack_start(self.eb_next, expand=False, fill=False)
# Button Next Page
self.eb_next_page = self.pager.create_event_box(_('Next Page'), self._sig_next_page, 'gtk-goto-last')
hb.pack_start(self.eb_next_page, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Button Switch
self.eb_switch = self.pager.create_event_box(_('Switch'), self.switch_view, 'gtk-justify-left')
hb.pack_start(self.eb_switch, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Limit Combo
self.cb = self.pager.create_combo_box(_('Choose Limit'), self.limit_changed)
hb.pack_start(self.cb, expand=False, fill=False)
self.widget.pack_start(hb, expand=False, fill=True)
self.screen.signal_connect(self, 'record-message', self._sig_label)
menu_title = gtk.Label('<b>'+self.screen.current_view.title.replace('&','&').replace('<','<').replace('>','>')+'</b>')
menu_title.set_use_markup(True)
menu_title.set_alignment(0, 0)
event_box.add(menu_title)
event_box.connect('button_press_event',self.load_menu)
self.screen.widget.set_property('height-request', 100)
self.widget.pack_start(self.screen.widget, expand=True, fill=True)
self.screen.widget.connect('key_press_event', self.on_keypress)
self.model = None
self.model_field = None
self.name = attrs['name']
def load_menu(self, widget, event):
if event.button != 3:
return
menu = gtk.Menu()
menuitem_set_to_default = gtk.MenuItem(_('Set to default value'), True)
menuitem_set_to_default.connect('activate', lambda *x:self._menu_sig_default_get())
#.........这里部分代码省略.........
示例7: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
class one2many_list(interface.widget_interface):
def __init__(self, window, parent, model, attrs={}):
interface.widget_interface.__init__(self, window, parent, model, attrs)
self._readonly = self.default_readonly
self.widget = gtk.VBox(homogeneous=False, spacing=5)
hb = gtk.HBox(homogeneous=False, spacing=5)
menubar = gtk.MenuBar()
if hasattr(menubar, 'set_pack_direction') and \
hasattr(menubar, 'set_child_pack_direction'):
menubar.set_pack_direction(gtk.PACK_DIRECTION_LTR)
menubar.set_child_pack_direction(gtk.PACK_DIRECTION_LTR)
menuitem_title = gtk.ImageMenuItem(stock_id='gtk-preferences')
menu_title = gtk.Menu()
menuitem_set_to_default = gtk.MenuItem(_('Set to default value'), True)
menuitem_set_to_default.connect('activate', lambda *x:self._menu_sig_default_get())
menu_title.add(menuitem_set_to_default)
menuitem_set_default = gtk.MenuItem(_('Set Default'), True)
menuitem_set_default.connect('activate', lambda *x: self._menu_sig_default_set())
menu_title.add(menuitem_set_default)
menuitem_title.set_submenu(menu_title)
menubar.add(menuitem_title)
hb.pack_start(menubar, expand=True, fill=True)
self.eb_new = gtk.EventBox()
self.eb_new.set_tooltip_text(_('Create a new entry'))
self.eb_new.set_events(gtk.gdk.BUTTON_PRESS)
self.eb_new.connect('button_press_event', self._sig_new)
img_new = gtk.Image()
img_new.set_from_stock('gtk-new', gtk.ICON_SIZE_MENU)
img_new.set_alignment(0.5, 0.5)
self.eb_new.add(img_new)
hb.pack_start(self.eb_new, expand=False, fill=False)
self.eb_open = gtk.EventBox()
self.eb_open.set_tooltip_text(_('Edit this entry'))
self.eb_open.set_events(gtk.gdk.BUTTON_PRESS)
self.eb_open.connect('button_press_event', self._sig_edit)
img_open = gtk.Image()
img_open.set_from_stock('gtk-open', gtk.ICON_SIZE_MENU)
img_open.set_alignment(0.5, 0.5)
self.eb_open.add(img_open)
hb.pack_start(self.eb_open, expand=False, fill=False)
self.eb_del = gtk.EventBox()
self.eb_del.set_tooltip_text(_('Remove this entry'))
self.eb_del.set_events(gtk.gdk.BUTTON_PRESS)
self.eb_del.connect('button_press_event', self._sig_remove)
img_del = gtk.Image()
img_del.set_from_stock('gtk-delete', gtk.ICON_SIZE_MENU)
img_del.set_alignment(0.5, 0.5)
self.eb_del.add(img_del)
hb.pack_start(self.eb_del, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
eb_pre = gtk.EventBox()
eb_pre.set_tooltip_text(_('Previous'))
eb_pre.set_events(gtk.gdk.BUTTON_PRESS)
eb_pre.connect('button_press_event', self._sig_previous)
img_pre = gtk.Image()
img_pre.set_from_stock('gtk-go-back', gtk.ICON_SIZE_MENU)
img_pre.set_alignment(0.5, 0.5)
eb_pre.add(img_pre)
hb.pack_start(eb_pre, expand=False, fill=False)
self.label = gtk.Label('(0,0)')
hb.pack_start(self.label, expand=False, fill=False)
eb_next = gtk.EventBox()
eb_next.set_tooltip_text(_('Next'))
eb_next.set_events(gtk.gdk.BUTTON_PRESS)
eb_next.connect('button_press_event', self._sig_next)
img_next = gtk.Image()
img_next.set_from_stock('gtk-go-forward', gtk.ICON_SIZE_MENU)
img_next.set_alignment(0.5, 0.5)
eb_next.add(img_next)
hb.pack_start(eb_next, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
eb_switch = gtk.EventBox()
eb_switch.set_tooltip_text(_('Switch'))
eb_switch.set_events(gtk.gdk.BUTTON_PRESS)
eb_switch.connect('button_press_event', self.switch_view)
img_switch = gtk.Image()
img_switch.set_from_stock('gtk-justify-left', gtk.ICON_SIZE_MENU)
img_switch.set_alignment(0.5, 0.5)
eb_switch.add(img_switch)
hb.pack_start(eb_switch, expand=False, fill=False)
self.widget.pack_start(hb, expand=False, fill=True)
self.screen = Screen(attrs['relation'], view_type=attrs.get('mode','tree,form').split(','), parent=self.parent, views_preload=attrs.get('views', {}), tree_saves=attrs.get('saves', False), create_new=True, row_activate=self._on_activate, default_get=attrs.get('default_get', {}), window=self._window, readonly=self._readonly)
self.screen.signal_connect(self, 'record-message', self._sig_label)
#.........这里部分代码省略.........
示例8: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import switch_view [as 别名]
class one2many_list(interface.widget_interface):
def __init__(self, window, parent, model, attrs={}, label=None):
interface.widget_interface.__init__(self, window, parent, model, attrs, label_ebox=label)
self.context = {}
self._readonly = self.default_readonly
self.widget = gtk.VBox(homogeneous=False, spacing=5)
hb = gtk.HBox(homogeneous=False, spacing=5)
menubar = gtk.MenuBar()
if hasattr(menubar, "set_pack_direction") and hasattr(menubar, "set_child_pack_direction"):
menubar.set_pack_direction(gtk.PACK_DIRECTION_LTR)
menubar.set_child_pack_direction(gtk.PACK_DIRECTION_LTR)
menuitem_title = gtk.ImageMenuItem(stock_id="gtk-preferences")
menu_title = gtk.Menu()
menuitem_set_to_default = gtk.MenuItem(_("Set to default value"), True)
menuitem_set_to_default.connect("activate", lambda *x: self._menu_sig_default_get())
menu_title.add(menuitem_set_to_default)
menuitem_set_default = gtk.MenuItem(_("Set Default"), True)
menuitem_set_default.connect("activate", lambda *x: self._menu_sig_default_set())
menu_title.add(menuitem_set_default)
menuitem_title.set_submenu(menu_title)
menubar.add(menuitem_title)
hb.pack_start(menubar, expand=True, fill=True)
# the context to pass to default_get can be optionally specified in
# the context of the one2many field. We also support a legacy
# 'default_get' attribute for the same effect (pending removal)
default_get_ctx = attrs.get("default_get") or attrs.get("context")
self.context = tools.expr_eval(attrs.get("context", "{}"), {"__builtins__": None})
self.screen = Screen(
attrs["relation"],
view_type=attrs.get("mode", "tree,form").split(","),
parent=self.parent,
views_preload=attrs.get("views", {}),
tree_saves=attrs.get("saves", False),
create_new=True,
row_activate=self._on_activate,
default_get=default_get_ctx,
context=self.context,
window=self._window,
readonly=self._readonly,
limit=pager.DEFAULT_LIMIT,
)
self.screen.type = "one2many"
self.pager = pager(object=self, relation=attrs["relation"], screen=self.screen)
# Button New
self.eb_new = self.pager.create_event_box(_("Create a new entry"), self._sig_new, "gtk-new")
hb.pack_start(self.eb_new, expand=False, fill=False)
# Button Edit
self.eb_open = self.pager.create_event_box(_("Edit this entry"), self._sig_edit, "gtk-open")
hb.pack_start(self.eb_open, expand=False, fill=False)
# Button Delete
self.eb_del = self.pager.create_event_box(_("Remove this entry"), self._sig_remove, "gtk-delete")
hb.pack_start(self.eb_del, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Button Previous Page
self.eb_prev_page = self.pager.create_event_box(_("Previous Page"), self._sig_prev_page, "gtk-goto-first")
hb.pack_start(self.eb_prev_page, expand=False, fill=False)
# Button Previous Record
self.eb_pre = self.pager.create_event_box(_("Previous Record"), self._sig_previous, "gtk-go-back")
hb.pack_start(self.eb_pre, expand=False, fill=False)
# Record display
self.label = gtk.Label("(0,0)")
hb.pack_start(self.label, expand=False, fill=False)
# Button Next
self.eb_next = self.pager.create_event_box(_("Next Record"), self._sig_next, "gtk-go-forward")
hb.pack_start(self.eb_next, expand=False, fill=False)
# Button Next Page
self.eb_next_page = self.pager.create_event_box(_("Next Page"), self._sig_next_page, "gtk-goto-last")
hb.pack_start(self.eb_next_page, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Button Switch
self.eb_switch = self.pager.create_event_box(_("Switch"), self.switch_view, "gtk-justify-left")
hb.pack_start(self.eb_switch, expand=False, fill=False)
hb.pack_start(gtk.VSeparator(), expand=False, fill=True)
# Limit Combo
self.cb = self.pager.create_combo_box(_("Choose Limit"), self.limit_changed)
hb.pack_start(self.cb, expand=False, fill=False)
self.widget.pack_start(hb, expand=False, fill=True)
self.screen.signal_connect(self, "record-message", self._sig_label)
menuitem_title.get_child().set_markup(
#.........这里部分代码省略.........