Show
Ignore:
Timestamp:
07/25/08 02:43:01 (4 months ago)
Author:
js
Message:

* Better rendering of mood in roster.

(Only takes space if needed now)

* Possibility to disable display of mood in roster from preferences.

(Also works on the fly with the new rendering method)

* Minor improvements in the translation of the moods to German.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/roster_window.py

    r10022 r10023  
    7777C_JID, # the jid of the row 
    7878C_ACCOUNT, # cellrenderer text that holds account name 
    79 C_MOOD, 
     79C_MOOD_PIXBUF, 
    8080C_AVATAR_PIXBUF, # avatar_pixbuf 
    8181C_PADLOCK_PIXBUF, # use for account row only 
     
    609609                        for c, acc in brothers: 
    610610                                self.draw_contact(c.jid, acc) 
     611                                self.draw_mood(c.jid, acc) 
    611612                                self.draw_avatar(c.jid, acc) 
    612613 
     
    653654 
    654655                self.draw_contact(jid, account) 
     656                self.draw_mood(jid, account) 
    655657                self.draw_avatar(jid, account) 
    656658                self.draw_account(account) 
     
    710712                        for c, acc in contacts: 
    711713                                self.draw_contact(c.jid, acc) 
     714                                self.draw_mood(c.jid, acc) 
    712715                                self.draw_avatar(c.jid, acc) 
    713716                        for group in contact.get_shown_groups(): 
     
    766769                                        for c, acc in brothers: 
    767770                                                self.draw_contact(c.jid, acc) 
     771                                                self.draw_mood(c.jid, acc) 
    768772                                                self.draw_avatar(c.jid, acc) 
    769773 
     
    11751179                                self.model[child_iter][C_IMG] = img 
    11761180                                self.model[child_iter][C_NAME] = name 
    1177                                  
    1178                                 if contact.mood.has_key('mood') \ 
    1179                                 and contact.mood['mood'] in MOODS: 
    1180                                         self.model[child_iter][C_MOOD] = \ 
    1181                                                 gtkgui_helpers.load_mood_icon( 
    1182                                                 contact.mood['mood']) 
    1183                                 elif contact.mood.has_key('mood'): 
    1184                                         self.model[child_iter][C_MOOD] = \ 
    1185                                                 gtkgui_helpers.load_mood_icon( 
    1186                                                 'unknown') 
    1187                                 else: 
    1188                                         self.model[child_iter][C_MOOD] = None 
    11891181 
    11901182                        # We are a little brother 
     
    12051197 
    12061198 
     1199        def draw_mood(self, jid, account): 
     1200                iters = self._get_contact_iter(jid, account, model = self.model) 
     1201                if not iters or not gajim.config.get('show_mood_in_roster'): 
     1202                        return 
     1203                jid = self.model[iters[0]][C_JID] 
     1204                jid = jid.decode('utf-8') 
     1205                contact = gajim.contacts.get_contact(account, jid) 
     1206                if contact.mood.has_key('mood') \ 
     1207                and contact.mood['mood'] in MOODS: 
     1208                        pixbuf = gtkgui_helpers.load_mood_icon( 
     1209                                contact.mood['mood']).get_pixbuf() 
     1210                elif contact.mood.has_key('mood'): 
     1211                        pixbuf = gtkgui_helpers.load_mood_image( 
     1212                                'unknown').get_pixbuf() 
     1213                else: 
     1214                        pixbuf = None 
     1215                for child_iter in iters: 
     1216                        self.model[child_iter][C_MOOD_PIXBUF] = pixbuf 
     1217                return False 
     1218 
     1219 
    12071220        def draw_avatar(self, jid, account): 
    12081221                iters = self._get_contact_iter(jid, account, model = self.model) 
     
    12511264                        for jid in jids: 
    12521265                                self.draw_contact(jid, account) 
     1266                                self.draw_mood(jid, account) 
    12531267                                self.draw_avatar(jid, account) 
    12541268                                yield True 
     
    12641278                # avatar_pixbuf, padlock_pixbuf) 
    12651279                self.model = gtk.TreeStore(gtk.Image, str, str, str, str, 
    1266                         gtk.Image, gtk.gdk.Pixbuf, gtk.gdk.Pixbuf) 
     1280                        gtk.gdk.Pixbuf, gtk.gdk.Pixbuf, gtk.gdk.Pixbuf) 
    12671281 
    12681282                self.model.set_sort_func(1, self._compareIters) 
     
    36663680                        for c, acc in brothers: 
    36673681                                self.draw_contact(c.jid, acc) 
     3682                                self.draw_mood(c.jid, acc) 
    36683683                                self.draw_avatar(c.jid, acc) 
    36693684 
     
    41724187                                renderer.set_property('xpad', 8) 
    41734188 
     4189 
     4190        def _fill_mood_pixbuf_rederer(self, column, renderer, model, titer, 
     4191        data = None): 
     4192                '''When a row is added, set properties for avatar renderer''' 
     4193                theme = gajim.config.get('roster_theme') 
     4194                type_ = model[titer][C_TYPE] 
     4195                if type_ in ('group', 'account'): 
     4196                        renderer.set_property('visible', False) 
     4197                        return 
     4198 
     4199                # allocate space for the icon only if needed 
     4200                if model[titer][C_MOOD_PIXBUF]: 
     4201                        renderer.set_property('visible', True) 
     4202                else: 
     4203                        renderer.set_property('visible', False) 
     4204                if type_: # prevent type_ = None, see http://trac.gajim.org/ticket/2534 
     4205                        if not model[titer][C_JID] or not model[titer][C_ACCOUNT]: 
     4206                                # This can append at the moment we add the row 
     4207                                return 
     4208                        jid = model[titer][C_JID].decode('utf-8') 
     4209                        account = model[titer][C_ACCOUNT].decode('utf-8') 
     4210                        if jid in gajim.newly_added[account]: 
     4211                                renderer.set_property('cell-background', gajim.config.get( 
     4212                                        'just_connected_bg_color')) 
     4213                        elif jid in gajim.to_be_removed[account]: 
     4214                                renderer.set_property('cell-background', gajim.config.get( 
     4215                                        'just_disconnected_bg_color')) 
     4216                        else: 
     4217                                color = gajim.config.get_per('themes', theme, 'contactbgcolor') 
     4218                                if color: 
     4219                                        renderer.set_property('cell-background', color) 
     4220                                else: 
     4221                                        renderer.set_property('cell-background', None) 
     4222                renderer.set_property('xalign', 1) # align pixbuf to the right 
     4223 
     4224 
    41744225        def _fill_avatar_pixbuf_rederer(self, column, renderer, model, titer, 
    41754226        data = None): 
     
    59766027                col.set_cell_data_func(render_text, self._nameCellDataFunc, None) 
    59776028 
    5978                 if gajim.config.get('show_mood_in_roster'): 
    5979                         render_image = cell_renderer_image.CellRendererImage( 
    5980                                 0, 0) 
    5981                         col.pack_start(render_image, expand = False) 
    5982                         col.add_attribute(render_image, 'image', C_MOOD) 
    5983                         col.set_cell_data_func(render_image, 
    5984                                 self._iconCellDataFunc, None) 
     6029                render_pixbuf = gtk.CellRendererPixbuf() 
     6030                col.pack_start(render_pixbuf, expand = False) 
     6031                col.add_attribute(render_pixbuf, 'pixbuf', C_MOOD_PIXBUF) 
     6032                col.set_cell_data_func(render_pixbuf, 
     6033                        self._fill_mood_pixbuf_rederer, None) 
    59856034 
    59866035                if gajim.config.get('avatar_position_in_roster') == 'right':