Example #1
0
class Affix(Cell):

    def __init__(self, view, attrs, protocol=None):
        super(Affix, self).__init__()
        self.attrs = attrs
        self.protocol = protocol
        self.icon = attrs.get('icon')
        if protocol:
            self.renderer = CellRendererClickablePixbuf()
            self.renderer.connect('clicked', self.clicked)
            if not self.icon:
                self.icon = 'tryton-web-browser'
        elif self.icon:
            self.renderer = gtk.CellRendererPixbuf()
        else:
            self.renderer = gtk.CellRendererText()
        self.view = view

    @realized
    @CellCache.cache
    def setter(self, column, cell, store, iter_):
        record = store.get_value(iter_, 0)
        field = record[self.attrs['name']]
        field.state_set(record, states=('invisible',))
        invisible = field.get_state_attrs(record).get('invisible', False)
        cell.set_property('visible', not invisible)
        if self.icon:
            if self.icon in record.group.fields:
                value = record[self.icon].get_client(record) or ''
            else:
                value = self.icon
            common.ICONFACTORY.register_icon(value)
            pixbuf = self.view.treeview.render_icon(stock_id=value,
                size=gtk.ICON_SIZE_BUTTON, detail=None)
            cell.set_property('pixbuf', pixbuf)
        else:
            text = self.attrs.get('string', '')
            if not text:
                text = field.get_client(record) or ''
            cell.set_property('text', text)
            fg_color = self.get_color(record)
            cell.set_property('foreground', fg_color)
            if fg_color == 'black':
                cell.set_property('foreground-set', False)
            else:
                cell.set_property('foreground-set', True)

    def clicked(self, renderer, path):
        store = self.view.treeview.get_model()
        record = store.get_value(store.get_iter(path), 0)
        value = record[self.attrs['name']].get(record)
        if value:
            if self.protocol == 'email':
                value = 'mailto:%s' % value
            elif self.protocol == 'callto':
                value = 'callto:%s' % value
            elif self.protocol == 'sip':
                value = 'sip:%s' % value
            webbrowser.open(value, new=2)
Example #2
0
 def __init__(self, view, attrs, protocol=None):
     super(Affix, self).__init__()
     self.attrs = attrs
     self.protocol = protocol
     self.icon = attrs.get('icon')
     if protocol:
         self.renderer = CellRendererClickablePixbuf()
         self.renderer.connect('clicked', self.clicked)
         if not self.icon:
             self.icon = 'tryton-public'
     elif self.icon:
         self.renderer = gtk.CellRendererPixbuf()
     else:
         self.renderer = gtk.CellRendererText()
     self.view = view
Example #3
0
class _BinaryIcon(Cell):
    expand = False

    def __init__(self, binary):
        super().__init__()
        self.binary = binary
        self.renderer = CellRendererClickablePixbuf()
        self.renderer.connect('clicked', self.clicked)

    @property
    def attrs(self):
        return self.binary.attrs

    @property
    def view(self):
        return self.binary.view
Example #4
0
 def __init__(self, field_name, treeview, attrs, protocol=None):
     super(Affix, self).__init__()
     self.field_name = attrs.get('name', field_name)
     self.attrs = attrs
     self.protocol = protocol
     self.icon = attrs.get('icon')
     if protocol:
         self.renderer = CellRendererClickablePixbuf()
         self.renderer.connect('clicked', self.clicked)
         if not self.icon:
             self.icon = 'tryton-web-browser'
     elif self.icon:
         self.renderer = gtk.CellRendererPixbuf()
     else:
         self.renderer = gtk.CellRendererText()
     self.treeview = treeview
Example #5
0
 def __init__(self, view, attrs, protocol=None):
     super(Affix, self).__init__()
     self.attrs = attrs
     self.protocol = protocol
     self.icon = attrs.get('icon')
     if protocol:
         self.renderer = CellRendererClickablePixbuf()
         self.renderer.connect('clicked', self.clicked)
         if not self.icon:
             self.icon = 'tryton-web-browser'
     elif self.icon:
         self.renderer = gtk.CellRendererPixbuf()
     else:
         self.renderer = gtk.CellRendererText()
     self.view = view
Example #6
0
 def __init__(self, binary):
     super().__init__()
     self.binary = binary
     self.renderer = CellRendererClickablePixbuf()
     self.renderer.connect('clicked', self.clicked)
Example #7
0
    def sig_win_menu(self, prefs=None):
        from tryton.gui.window.view_form.screen import Screen

        if not prefs:
            try:
                prefs = RPCExecute('model', 'res.user', 'get_preferences',
                                   False)
            except RPCException:
                return False

        if self.menu_screen:
            self.menu_screen.save_tree_state()
        for child in self.menu.get_children():
            self.menu.remove(child)

        action = PYSONDecoder().decode(prefs['pyson_menu'])
        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]]
        ctx = rpc.CONTEXT.copy()
        decoder = PYSONDecoder(ctx)
        action_ctx = decoder.decode(action.get('pyson_context') or '{}')
        domain = decoder.decode(action['pyson_domain'])
        screen = Screen(action['res_model'],
                        mode=['tree'],
                        view_ids=view_ids,
                        domain=domain,
                        context=action_ctx,
                        readonly=True,
                        limit=None,
                        row_activate=self.menu_row_activate)
        # Use alternate view to not show search box
        screen.screen_container.alternate_view = True
        screen.switch_view(view_type=screen.current_view.view_type)

        self.menu.pack_start(screen.screen_container.alternate_viewport, True,
                             True)
        treeview = screen.current_view.treeview
        treeview.set_headers_visible(False)

        # Favorite column
        column = gtk.TreeViewColumn()
        column.name = None
        column._type = None
        favorite_renderer = CellRendererClickablePixbuf()
        column.pack_start(favorite_renderer, expand=False)

        def favorite_setter(column, cell, store, iter_):
            menu = store.get_value(iter_, 0)
            favorite = menu.value.get('favorite')
            if favorite:
                stock_id = 'tryton-star'
            elif favorite is False:
                stock_id = 'tryton-unstar'
            else:
                stock_id = ''
            pixbuf = treeview.render_icon(stock_id=stock_id,
                                          size=gtk.ICON_SIZE_MENU,
                                          detail=None)
            cell.set_property('pixbuf', pixbuf)

        column.set_cell_data_func(favorite_renderer, favorite_setter)

        def toggle_favorite(renderer, path, treeview):
            if treeview.props.window:
                self.toggle_favorite(renderer, path, treeview)

        favorite_renderer.connect(
            'clicked', lambda *a: gobject.idle_add(toggle_favorite, *a),
            treeview)
        # Unset fixed height mode to add column
        treeview.set_fixed_height_mode(False)
        treeview.set_property('enable-grid-lines',
                              gtk.TREE_VIEW_GRID_LINES_NONE)
        treeview.append_column(column)

        screen.search_filter()
        screen.display(set_cursor=True)
        self.menu_screen = screen