本文整理汇总了Python中widget.screen.Screen.new方法的典型用法代码示例。如果您正苦于以下问题:Python Screen.new方法的具体用法?Python Screen.new怎么用?Python Screen.new使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类widget.screen.Screen
的用法示例。
在下文中一共展示了Screen.new方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: dialog
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [as 别名]
class dialog(object):
def __init__(self, arch, fields, state, name, parent=None):
buttons = []
self.states=[]
default=-1
if not parent:
parent = service.LocalService('gui.main').window
self.dia = gtk.Dialog('OpenERP', parent,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT)
for x in state:
but = gtk.Button(x[1])
but.show()
if len(x) >= 3:
icon = gtk.Image()
icon.set_from_stock(x[2], gtk.ICON_SIZE_BUTTON)
but.set_image(icon)
self.dia.add_action_widget(but, len(self.states))
if len(x) >= 4 and x[3]:
but.set_flags(gtk.CAN_DEFAULT)
default = len(self.states)
self.states.append(x[0])
if default >= 0:
self.dia.set_default_response(default)
val = {}
for f in fields:
if 'value' in fields[f]:
val[f] = fields[f]['value']
self.screen = Screen('wizard.'+name, view_type=[], window=self.dia, is_wizard=True)
self.screen.new(default=False)
self.screen.add_view_custom(arch, fields, display=True)
self.screen.current_model.set(val)
x,y = self.screen.screen_container.size_get()
width, height = parent.get_size()
self.screen.widget.set_size_request(min(width - 20, x + 20),
min(height - 60, y + 25))
self.screen.widget.show()
self.dia.vbox.pack_start(self.screen.widget)
self.dia.set_title(self.screen.current_view.title)
self.dia.show()
def run(self, datas={}):
while True:
res = self.dia.run()
self.screen.current_view.set_value()
if self.screen.current_model.validate() or (res<0) or (self.states[res]=='end'):
break
self.screen.display()
if res<len(self.states) and res>=0:
datas.update(self.screen.get())
self.dia.destroy()
return (self.states[res], datas)
else:
self.dia.destroy()
self.screen.destroy()
return False
示例2: dialog
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [as 别名]
class dialog(object):
def __init__(self, model_name, parent, model=None, attrs=None, model_ctx=None,
window=None, context=None, readonly=False):
if attrs is None:
attrs = {}
if model_ctx is None:
model_ctx = {}
if context is None:
context = {}
if not window:
window = service.LocalService('gui.main').window
self.dia = gtk.Dialog(_('OpenERP'), window,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT)
self.window = window
if ('string' in attrs) and attrs['string']:
self.dia.set_title(self.dia.get_title() + ' - ' + attrs['string'])
self.dia.set_property('default-width', 760)
self.dia.set_property('default-height', 500)
self.dia.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
self.dia.set_icon(common.OPENERP_ICON)
self.accel_group = gtk.AccelGroup()
self.dia.add_accel_group(self.accel_group)
self.but_cancel = self.dia.add_button(_('Cancel'), gtk.RESPONSE_CANCEL)
icon = gtk.Image()
icon.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON)
self.but_cancel.set_image(icon)
self.but_cancel.add_accelerator('clicked', self.accel_group, gtk.keysyms.Escape, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
self.but_save_close = self.dia.add_button(_('Save & Close'), gtk.RESPONSE_APPLY)
icon = gtk.Image()
icon.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
self.but_save_close.set_image(icon)
self.but_save_new = self.dia.add_button(_('Save & New'), gtk.RESPONSE_OK)
icon = gtk.Image()
icon.set_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_BUTTON)
self.but_save_new.set_image(icon)
self.but_save_new.add_accelerator('clicked', self.accel_group, gtk.keysyms.Return, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
self.context = context
scroll = gtk.ScrolledWindow()
scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scroll.set_placement(gtk.CORNER_TOP_LEFT)
scroll.set_shadow_type(gtk.SHADOW_NONE)
self.dia.vbox.pack_start(scroll, expand=True, fill=True)
vp = gtk.Viewport()
vp.set_shadow_type(gtk.SHADOW_NONE)
scroll.add(vp)
self.screen = Screen(model_name, view_type=[], parent=parent,
window=self.dia, readonly=readonly,
context=context)
self.screen.models._context.update(model_ctx)
if not model:
model = self.screen.new(context=context)
else:
self.screen.models.model_add(model)
self.screen.current_model = model
if ('views' in attrs) and ('form' in attrs['views']):
arch = attrs['views']['form']['arch']
fields = attrs['views']['form']['fields']
self.screen.add_view(arch, fields, display=True, context=context)
else:
self.screen.add_view_id(False, 'form', display=True,
context=context)
if not model or model.id is None:
self.screen.make_buttons_readonly()
vp.add(self.screen.widget)
x,y = self.screen.screen_container.size_get()
vp.set_size_request(x,y+30)
self.dia.show_all()
self.screen.readonly = readonly
self.screen.display()
def new(self):
model = self.screen.new(context=self.context)
self.screen.models.model_add(model)
self.screen.current_model = model
self.screen.make_buttons_readonly()
return True
def run(self, datas={}):
end = False
while not end:
res = self.dia.run()
if res in(gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT):
self.screen.current_model.cancel()
end = (res not in (gtk.RESPONSE_OK, gtk.RESPONSE_APPLY)) or self.screen.current_model.validate()
if not end:
self.screen.display()
self.screen.current_view.set_cursor()
if res in (gtk.RESPONSE_OK, gtk.RESPONSE_APPLY) :
self.screen.current_view.set_value()
model = self.screen.current_model
#.........这里部分代码省略.........
示例3: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [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
#.........这里部分代码省略.........
示例4: dialog
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [as 别名]
class dialog(object):
def __init__(self, model, domain=None, context=None, window=None, target=False):
if domain is None:
domain = []
if context is None:
context = {}
if not window:
window = service.LocalService('gui.main').window
self.dia = gtk.Dialog(_('OpenERP - Link'), window,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT)
self.window = window
if not target:
self.dia.set_property('default-width', 760)
self.dia.set_property('default-height', 500)
self.dia.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
self.dia.set_icon(common.OPENERP_ICON)
self.accel_group = gtk.AccelGroup()
self.dia.add_accel_group(self.accel_group)
self.but_cancel = self.dia.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
self.but_cancel.add_accelerator('clicked', self.accel_group, gtk.keysyms.Escape, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
self.but_ok = self.dia.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
self.but_ok.add_accelerator('clicked', self.accel_group, gtk.keysyms.Return, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
scroll = gtk.ScrolledWindow()
scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scroll.set_placement(gtk.CORNER_TOP_LEFT)
scroll.set_shadow_type(gtk.SHADOW_NONE)
self.dia.vbox.pack_start(scroll, expand=True, fill=True)
vp = gtk.Viewport()
vp.set_shadow_type(gtk.SHADOW_NONE)
scroll.add(vp)
self.screen = Screen(model, view_ids=None, domain=domain, context=context, window=self.dia, view_type=['form'])
self.screen.new()
vp.add(self.screen.widget)
x,y = self.screen.screen_container.size_get()
width, height = window.get_size()
vp.set_size_request(min(width - 20, x + 20),min(height - 60, y + 25))
self.dia.show_all()
self.screen.display()
def run(self, datas={}):
while True:
try:
res = self.dia.run()
if res == gtk.RESPONSE_OK:
if self.screen.current_model.validate() and self.screen.save_current():
return self.screen.current_model.id
else:
self.screen.display()
self.screen.current_view.set_cursor()
else:
break
except Exception:
# Passing all exceptions, most preferably the one of sql_constraint
pass
return False
def destroy(self):
self.window.present()
self.dia.destroy()
self.screen.destroy()
示例5: form
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [as 别名]
class form(object):
def __init__(self, model, res_id=False, domain=None, view_type=None,
view_ids=None, window=None, context=None, name=False, help={}, limit=100,
auto_refresh=False, auto_search=True, search_view=None):
if not view_type:
view_type = ['form','tree']
if domain is None:
domain = []
if view_ids is None:
view_ids = []
if context is None:
context = {}
fields = {}
self.model = model
self.window = window
self.previous_action = None
self.ui = openerp_gtk_builder('openerp.ui', ['win_form_container'])
self.widget = self.ui.get_object('win_form_container')
self.widget.show_all()
self.fields = fields
self.domain = domain
self.context = context
self.page_label = None
self.screen = Screen(self.model, view_type=view_type,
context=self.context, view_ids=view_ids, domain=domain,help=help,
hastoolbar=options.options['form.toolbar'], hassubmenu=options.options['form.submenu'],
show_search=True, window=self.window, limit=limit, readonly=bool(auto_refresh), auto_search=auto_search, search_view=search_view)
self.screen.signal_connect(self, 'record-message', self._record_message)
self.screen.widget.show()
oregistry.add_receiver('misc-message', self._misc_message)
if not name:
self.name = self.screen.current_view.title
else:
self.name = name
vp = gtk.Viewport()
vp.set_shadow_type(gtk.SHADOW_NONE)
vp.add(self.screen.widget)
vp.show()
self.sw = gtk.ScrolledWindow()
self.sw.set_shadow_type(gtk.SHADOW_NONE)
self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.sw.add(vp)
self.sw.show()
self.has_backup = False
self.backup = {}
self.widget.pack_start(self.sw)
self.handlers = {
'but_new': self.sig_new,
'but_copy': self.sig_copy,
'but_save': self.sig_save,
'but_save_as': self.sig_save_as,
'but_import': self.sig_import,
'but_print_repeat': self.sig_print_repeat,
'but_remove': self.sig_remove,
'but_search': self.sig_search,
'but_previous': self.sig_previous,
'but_next': self.sig_next,
'but_goto_id': self.sig_goto,
'but_log': self.sig_logs,
'but_print': self.sig_print,
'but_reload': self.sig_reload,
'but_print_html': self.sig_print_html,
'but_action': self.sig_action,
'but_switch': self.sig_switch,
'but_attach': self.sig_attach,
'but_close': self.sig_close,
}
if 'tree' in view_type:
self.handlers['radio_tree'] = self.sig_switch_tree
if 'form' in view_type:
self.handlers['radio_form'] = self.sig_switch_form
if 'graph' in view_type:
self.handlers['radio_graph'] = self.sig_switch_graph
if 'calendar' in view_type:
self.handlers['radio_calendar'] = self.sig_switch_calendar
if 'diagram' in view_type:
self.handlers['radio_diagram'] = self.sig_switch_diagram
if res_id:
if isinstance(res_id, (int, long,)):
res_id = [res_id]
self.screen.load(res_id)
else:
if self.screen.current_view.view_type == 'form':
self.sig_new(autosave=False)
if self.screen.current_view.view_type in ('tree', 'graph', 'calendar'):
self.screen.search_filter()
if auto_refresh and int(auto_refresh):
gobject.timeout_add(int(auto_refresh) * 1000, self.sig_reload)
def set_tooltips(fn):
def _decorate(self, *args, **kws):
result = fn(self, *args, **kws)
if self.screen.current_view.view_type == 'form':
tips= unicode(self.screen.current_model and self.screen.current_model.value.get('name') or self.name)
tooltips = tips == self.name and self.name or self.name + ': ' + tips[:64]
lable = tips == self.name and self.name or self.name + ': ' + tips[:6]
#.........这里部分代码省略.........
示例6: dialog
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [as 别名]
class dialog(object):
def __init__(self, model, id=None, attrs=None ,domain=None, context=None, window=None, view_ids=None, target=False,view_type=['form'], help={}):
if attrs is None:
attrs = {}
if domain is None:
domain = []
if context is None:
context = {}
if not window:
window = service.LocalService('gui.main').window
self.dia = gtk.Dialog('OpenERP', window,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT)
self.window = window
if not target:
self.dia.set_property('default-width', 760)
self.dia.set_property('default-height', 500)
self.dia.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
self.dia.set_icon(common.OPENERP_ICON)
self.accel_group = gtk.AccelGroup()
self.dia.add_accel_group(self.accel_group)
self.but_cancel = self.dia.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
self.but_cancel.add_accelerator('clicked', self.accel_group, gtk.keysyms.Escape, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
self.but_ok = self.dia.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
self.but_ok.add_accelerator('clicked', self.accel_group, gtk.keysyms.Return, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
scroll = gtk.ScrolledWindow()
scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scroll.set_placement(gtk.CORNER_TOP_LEFT)
scroll.set_shadow_type(gtk.SHADOW_NONE)
self.dia.vbox.pack_start(scroll, expand=True, fill=True)
vp = gtk.Viewport()
vp.set_shadow_type(gtk.SHADOW_NONE)
scroll.add(vp)
self.screen = Screen(model, view_ids=view_ids, domain=domain, context=context, window=self.dia, view_type=view_type, help=help)
if id:
self.screen.load([id])
else:
self.screen.new()
if ('string' in attrs) and attrs['string']:
self.dia.set_title(self.dia.get_title() + ' - ' + attrs['string'])
elif self.screen.current_view:
self.dia.set_title(self.dia.get_title() + ' - ' + self.screen.current_view.title)
vp.add(self.screen.widget)
width, height = self.screen.screen_container.size_get()
window_width, window_height = window.get_size()
dia_width, dia_height = self.dia.get_size()
widget_width = min(window_width - 20, max(dia_width, width + 30))
if target:
widget_height = min(window_height - 60, height + 10)
else:
widget_height = min(window_height - 60, height + 20)
vp.set_size_request(widget_width, widget_height)
self.dia.show_all()
self.screen.display()
def run(self, datas={}):
while True:
try:
res = self.dia.run()
if res == gtk.RESPONSE_OK:
if self.screen.current_model.validate() and self.screen.save_current():
return (True, self.screen.current_model.name_get())
else:
self.screen.display()
self.screen.current_view.set_cursor()
else:
break
except Exception,e:
# Passing all exceptions, most preferably the one of sql_constraint
pass
return (False, False)
示例7: form
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [as 别名]
class form(object):
def __init__(self, model, res_id=False, domain=None, view_type=None,
view_ids=None, window=None, context=None, name=False, limit=80,
auto_refresh=False):
if not view_type:
view_type = ['form','tree']
if domain is None:
domain = []
if view_ids is None:
view_ids = []
if context is None:
context = {}
fields = {}
self.model = model
self.window = window
self.previous_action = None
self.glade = glade.XML(common.terp_path("openerp.glade"),'win_form_container',gettext.textdomain())
self.widget = self.glade.get_widget('win_form_container')
self.widget.show_all()
self.fields = fields
self.domain = domain
self.context = context
self.screen = Screen(self.model, view_type=view_type,
context=self.context, view_ids=view_ids, domain=domain,
hastoolbar=options.options['form.toolbar'], show_search=True,
window=self.window, limit=limit, readonly=bool(auto_refresh))
self.screen.signal_connect(self, 'record-message', self._record_message)
self.screen.widget.show()
oregistry.add_receiver('misc-message', self._misc_message)
if not name:
self.name = self.screen.current_view.title
else:
self.name = name
vp = gtk.Viewport()
vp.set_shadow_type(gtk.SHADOW_NONE)
vp.add(self.screen.widget)
vp.show()
self.sw = gtk.ScrolledWindow()
self.sw.set_shadow_type(gtk.SHADOW_NONE)
self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.sw.add(vp)
self.sw.show()
self.has_backup = False
self.backup = {}
self.widget.pack_start(self.sw)
self.handlers = {
'but_new': self.sig_new,
'but_copy': self.sig_copy,
'but_save': self.sig_save,
'but_save_as': self.sig_save_as,
'but_import': self.sig_import,
'but_print_repeat': self.sig_print_repeat,
'but_remove': self.sig_remove,
'but_search': self.sig_search,
'but_previous': self.sig_previous,
'but_next': self.sig_next,
'but_goto_id': self.sig_goto,
'but_log': self.sig_logs,
'but_print': self.sig_print,
'but_reload': self.sig_reload,
'but_print_html': self.sig_print_html,
'but_action': self.sig_action,
'but_switch': self.sig_switch,
'but_attach': self.sig_attach,
'but_close': self.sig_close,
}
if 'tree' in view_type:
self.handlers['radio_tree'] = self.sig_switch_tree
if 'form' in view_type:
self.handlers['radio_form'] = self.sig_switch_form
if 'graph' in view_type:
self.handlers['radio_graph'] = self.sig_switch_graph
if 'calendar' in view_type:
self.handlers['radio_calendar'] = self.sig_switch_calendar
if res_id:
if isinstance(res_id, (int, long,)):
res_id = [res_id]
self.screen.load(res_id)
else:
if self.screen.current_view.view_type == 'form':
self.sig_new(autosave=False)
if self.screen.current_view.view_type in ('tree', 'graph', 'calendar'):
self.screen.search_filter()
if auto_refresh and int(auto_refresh):
gobject.timeout_add(int(auto_refresh) * 1000, self.sig_reload)
def sig_switch_form(self, widget=None):
return self.sig_switch(widget, 'form')
def sig_switch_tree(self, widget=None):
return self.sig_switch(widget, 'tree')
def sig_switch_calendar(self, widget=None):
return self.sig_switch(widget, 'calendar')
#.........这里部分代码省略.........
示例8: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [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())
#.........这里部分代码省略.........
示例9: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [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)
#.........这里部分代码省略.........
示例10: one2many_list
# 需要导入模块: from widget.screen import Screen [as 别名]
# 或者: from widget.screen.Screen import new [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(
#.........这里部分代码省略.........