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()
Exemple #2
0
    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
Exemple #3
0
 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()
Exemple #4
0
 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
Exemple #5
0
    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
Exemple #7
0
    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()
Exemple #8
0
    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)
Exemple #9
0
    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('&','&amp;').replace('<','&lt;').replace('>','&gt;')+'</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()
Exemple #13
0
    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('&', '&amp;').replace(
                '<', '&lt;').replace('>', '&gt;') + '</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']
Exemple #16
0
    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('&','&amp;').replace('<','&lt;').replace('>','&gt;')+'</b>')

        self.widget.pack_start(self.screen.widget, expand=True, fill=True)

        self.screen.widget.connect('key_press_event', self.on_keypress)