def __init__(self, parent=None): self.glade = glade.XML(common.terp_path("openerp.glade"), 'win_preference', gettext.textdomain()) self.win = self.glade.get_widget('win_preference') self.win.set_icon(common.OPENERP_ICON) if not parent: parent = service.LocalService('gui.main').window self.win.set_transient_for(parent) self.parent = parent action_id = rpc.session.rpc_exec_auth('/object', 'execute', 'res.users', 'action_get', {}) action = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.actions.act_window', 'read', [action_id], False, rpc.session.context)[0] view_ids = [] 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]] self.screen = Screen('res.users', view_type=[], window=parent) self.screen.add_view_id(view_ids[0], 'form', display=True) self.screen.load([rpc.session.uid]) self.screen.display(rpc.session.uid) vbox = self.glade.get_widget('preference_vbox') vbox.pack_start(self.screen.widget) self.win.set_title(_('Preferences')) self.win.show_all()
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'] 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['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 __init__(self, model, sel_multi=True, ids=[], context={}, domain=[], parent=None): self.model = model self.sel_multi = sel_multi self.ids = ids self.ctx = context self.glade = glade.XML(common.terp_path("openerp.glade"), 'win_search', gettext.textdomain()) self.win = self.glade.get_widget('win_search') self.win.set_icon(common.OPENERP_ICON) if not parent: parent = service.LocalService('gui.main').window self.parent = parent self.win.set_transient_for(parent) self.screen = Screen(model, view_type=['tree'], show_search=True, domain=domain, context=context, parent=self.win, win_search=True) self.view = self.screen.current_view if self.screen.filter_widget.focusable: self.screen.filter_widget.focusable.grab_focus() self.title = _('OpenERP Search: %s') % self.screen.name self.title_results = _('OpenERP Search: %s (%%d result(s))') % ( self.screen.name, ) self.win.set_title(self.title) self.view.unset_editable() sel = self.view.widget_tree.get_selection() if not sel_multi: sel.set_mode('single') else: sel.set_mode(gtk.SELECTION_MULTIPLE) self.view.widget_tree.connect('row_activated', self.sig_activate) self.view.widget_tree.connect('button_press_event', self.sig_button) self.screen.win_search_callback = self.update_title 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.wid = self.glade.get_widget('win_search_vbox') self.wid.pack_start(self.sw) self.wid.show_all()
def _click_and_relate(self, action, value, model): data={} context={} act=action.copy() if not(value): common.message(_('You must select a record to use the relation !')) return False from widget.screen import Screen screen = Screen(model) screen.load([value]) act['domain'] = screen.current_model.expr_eval(act['domain'], check_load=False) act['context'] = str(screen.current_model.expr_eval(act['context'], check_load=False)) obj = service.LocalService('action.main') value = obj._exec_action(act, data, context) return value
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 click_and_relate(self, action): data = {} context = {} act = action.copy() id = self._view.modelfield.get(self._view.model) if not (id): common.message(_('You must select a record to use the relation !')) return False screen = Screen(self.attrs['relation']) screen.load([id]) act['domain'] = screen.current_model.expr_eval(act['domain'], check_load=False) act['context'] = str( screen.current_model.expr_eval(act['context'], check_load=False)) obj = service.LocalService('action.main') value = obj._exec_action(act, data, context) return value
def __init__(self, window, parent, model, attrs={}): interface.widget_interface.__init__(self, window, parent, model, attrs) self.widget = gtk.VBox(homogeneous=False, spacing=1) hb = gtk.HBox(homogeneous=False, spacing=3) self.wid_text = gtk.Entry() self.wid_text.set_property('width_chars', 13) self.wid_text.connect('activate', self._sig_activate) self.wid_text.connect('button_press_event', self._menu_open) hb.pack_start(self.wid_text, expand=True, fill=True) hb.pack_start(gtk.VSeparator(), padding=2, expand=False, fill=False) self.wid_but_add = gtk.Button(stock='gtk-add') self.wid_but_add.set_relief(gtk.RELIEF_HALF) self.wid_but_add.set_focus_on_click(True) self.wid_but_add.connect('clicked', self._sig_add) hb.pack_start(self.wid_but_add, padding=3, expand=False, fill=False) self.wid_but_remove = gtk.Button(stock='gtk-remove') self.wid_but_remove.set_relief(gtk.RELIEF_HALF) self.wid_but_remove.set_focus_on_click(True) self.wid_but_remove.connect('clicked', self._sig_remove) hb.pack_start(self.wid_but_remove, expand=False, fill=False) self.widget.pack_start(hb, expand=False, fill=False) self.widget.pack_start(gtk.HSeparator(), expand=False, fill=True) 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.screen = Screen(attrs['relation'], view_type=['tree'], views_preload=attrs.get('views', {})) scroll.add_with_viewport(self.screen.widget) self.widget.pack_start(scroll, expand=True, fill=True) # self.old = None self.avail_ids = set()
def __init__(self, window, parent, model, attrs={}): interface.widget_interface.__init__(self, window, parent, model, attrs) self.widget = gtk.VBox(homogeneous=False, spacing=1) hb = gtk.HBox(homogeneous=False, spacing=3) self.wid_text = gtk.Entry() self.wid_text.set_property('width_chars', 13) self.wid_text.connect('activate', self._sig_activate) self.wid_text.connect('populate-popup', self._menu_open) hb.pack_start(self.wid_text, expand=True, fill=True) hb.pack_start(gtk.VSeparator(), padding=2, expand=False, fill=False) self.wid_but_add = gtk.Button(stock='gtk-add') self.wid_but_add.set_relief(gtk.RELIEF_HALF) self.wid_but_add.set_focus_on_click(True) self.wid_but_add.connect('clicked', self._sig_add) hb.pack_start(self.wid_but_add, padding=3, expand=False, fill=False) self.wid_but_remove = gtk.Button(stock='gtk-remove') self.wid_but_remove.set_relief(gtk.RELIEF_HALF) self.wid_but_remove.set_focus_on_click(True) self.wid_but_remove.connect('clicked', self._sig_remove) hb.pack_start(self.wid_but_remove, expand=False, fill=False) hb.pack_start(gtk.VSeparator(), expand=False, fill=True) self.context = tools.expr_eval(attrs.get('context',"{}")) self.screen = Screen(attrs['relation'], view_type=['tree'], views_preload=attrs.get('views', {}), row_activate=self.row_activate, limit=pager.DEFAULT_LIMIT, context=self.context) self.screen.signal_connect(self, 'record-message', self._sig_label) self.screen.type = 'many2many' self.model = None self.model_field = None self.name = attrs['name'] self.pager = pager(object=self, relation=attrs['relation'], screen=self.screen) # 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) # 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=False) self.widget.pack_start(gtk.HSeparator(), expand=False, fill=True) scroll = gtk.ScrolledWindow() scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scroll.set_property('height-request', 200) scroll.set_placement(gtk.CORNER_TOP_LEFT) scroll.set_shadow_type(gtk.SHADOW_NONE) scroll.add_with_viewport(self.screen.widget) self.widget.pack_start(scroll, expand=True, fill=True)
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.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, 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 __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 __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 __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 __init__(self, model, sel_multi=True, ids=[], context={}, domain=[], parent=None): self.model = model self.first = True self.domain = domain self.context = context self.context.update(rpc.session.context) self.sel_multi = sel_multi self.glade = glade.XML(common.terp_path("openerp.glade"), 'win_search', gettext.textdomain()) self.win = self.glade.get_widget('win_search') self.win.set_icon(common.OPENERP_ICON) if not parent: parent = service.LocalService('gui.main').window self.parent = parent self.win.set_transient_for(parent) self.screen = Screen(model, view_type=['tree'], context=self.context, parent=self.win) self.view = self.screen.current_view self.view.unset_editable() sel = self.view.widget_tree.get_selection() if not sel_multi: sel.set_mode('single') else: sel.set_mode(gtk.SELECTION_MULTIPLE) vp = gtk.Viewport() vp.set_shadow_type(gtk.SHADOW_NONE) vp.add(self.screen.widget) sw = self.glade.get_widget('search_sw') sw.add(vp) sw.show_all() self.view.widget_tree.connect('row_activated', self.sig_activate) self.view.widget_tree.connect('button_press_event', self.sig_button) self.model_name = model view_form = rpc.session.rpc_exec_auth('/object', 'execute', self.model_name, 'fields_view_get', False, 'form', self.context) self.form = widget_search.form(view_form['arch'], view_form['fields'], model, parent=self.win) self.title = _('OpenERP Search: %s') % self.form.name self.title_results = _( 'OpenERP Search: %s (%%d result(s))') % self.form.name self.win.set_title(self.title) x, y = self.form.widget.size_request() hbox = self.glade.get_widget('search_hbox') hbox.pack_start(self.form.widget) self.ids = ids if self.ids: self.reload() self.old_search = None self.old_offset = self.old_limit = None if self.ids: self.old_search = [] self.old_limit = self.form.get_limit() self.old_offset = self.form.get_offset() self.view.widget.show_all() if self.form.focusable: self.form.focusable.grab_focus()
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 __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 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( '<b>' + self.screen.current_view.title.replace('&', '&').replace( '<', '<').replace('>', '>') + '</b>') 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 __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) menuitem_title.get_child().set_markup('<b>'+self.screen.current_view.title.replace('&','&').replace('<','<').replace('>','>')+'</b>') self.widget.pack_start(self.screen.widget, expand=True, fill=True) self.screen.widget.connect('key_press_event', self.on_keypress)