Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjs <js-gajim@webkeks.org>2008-07-25 04:43:01 +0400
committerjs <js-gajim@webkeks.org>2008-07-25 04:43:01 +0400
commit0d6394b0ca609f1ed0c945662993cb743a3b3421 (patch)
treeefd6edbdc7837a9bbf22818f1a75e0c46e6afbb9
parentaec24f6e2128092d0f82ebf41484ab1e4fc09420 (diff)
* 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.
-rw-r--r--data/glade/preferences_window.glade19
-rw-r--r--po/de.po4
-rw-r--r--src/common/pep.py2
-rw-r--r--src/config.py16
-rw-r--r--src/roster_window.py91
5 files changed, 104 insertions, 28 deletions
diff --git a/data/glade/preferences_window.glade b/data/glade/preferences_window.glade
index 3236740f7..b534b798f 100644
--- a/data/glade/preferences_window.glade
+++ b/data/glade/preferences_window.glade
@@ -73,6 +73,23 @@
</packing>
</child>
<child>
+ <widget class="GtkCheckButton" id="show_mood_in_roster_checkbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">If checked, Gajim will display status messages of contacts under the contact name in roster window and in group chats</property>
+ <property name="label" translatable="yes">Display m_ood of contacts in roster</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_show_mood_in_roster_checkbutton_toggled"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
<widget class="GtkCheckButton" id="sort_by_show_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -86,7 +103,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</widget>
diff --git a/po/de.po b/po/de.po
index 861e69b93..1fd072bd0 100644
--- a/po/de.po
+++ b/po/de.po
@@ -4713,11 +4713,11 @@ msgstr "Mitglied"
#: ../src/common/helpers.py:350
msgid "afraid"
-msgstr "Fürchtend"
+msgstr "Verängstigt"
#: ../src/common/helpers.py:350
msgid "amazed"
-msgstr "Überrascht"
+msgstr "Verblüfft"
#: ../src/common/helpers.py:350
msgid "angry"
diff --git a/src/common/pep.py b/src/common/pep.py
index 12ef63609..b1281ca13 100644
--- a/src/common/pep.py
+++ b/src/common/pep.py
@@ -62,7 +62,7 @@ def user_mood(items, name, jid):
if contact.mood.has_key('text'):
del contact.mood['text']
- gajim.interface.roster.draw_contact(user, name)
+ gajim.interface.roster.draw_mood(user, name)
ctrl = gajim.interface.msg_win_mgr.get_control(user, name)
if ctrl:
ctrl.update_mood()
diff --git a/src/config.py b/src/config.py
index 52b42e894..123bda414 100644
--- a/src/config.py
+++ b/src/config.py
@@ -92,12 +92,18 @@ class PreferencesWindow:
### General tab ###
# Display avatars in roster
st = gajim.config.get('show_avatars_in_roster')
- self.xml.get_widget('show_avatars_in_roster_checkbutton').set_active(st)
+ self.xml.get_widget('show_avatars_in_roster_checkbutton'). \
+ set_active(st)
# Display status msg under contact name in roster
st = gajim.config.get('show_status_msgs_in_roster')
- self.xml.get_widget('show_status_msgs_in_roster_checkbutton').set_active(
- st)
+ self.xml.get_widget('show_status_msgs_in_roster_checkbutton'). \
+ set_active( st)
+
+ # Display mood in roster
+ st = gajim.config.get('show_mood_in_roster')
+ self.xml.get_widget('show_mood_in_roster_checkbutton'). \
+ set_active(st)
# Sort contacts by show
st = gajim.config.get('sort_by_show')
@@ -527,6 +533,10 @@ class PreferencesWindow:
if ctl.type_id == message_control.TYPE_GC:
ctl.update_ui()
+ def on_show_mood_in_roster_checkbutton_toggled(self, widget):
+ self.on_checkbutton_toggled(widget, 'show_mood_in_roster')
+ gajim.interface.roster.setup_and_draw_roster()
+
def on_sort_by_show_checkbutton_toggled(self, widget):
self.on_checkbutton_toggled(widget, 'sort_by_show')
gajim.interface.roster.setup_and_draw_roster()
diff --git a/src/roster_window.py b/src/roster_window.py
index 4c91fc7e3..24d50596e 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -76,7 +76,7 @@ C_NAME, # cellrenderer text that holds contact nickame
C_TYPE, # account, group or contact?
C_JID, # the jid of the row
C_ACCOUNT, # cellrenderer text that holds account name
-C_MOOD,
+C_MOOD_PIXBUF,
C_AVATAR_PIXBUF, # avatar_pixbuf
C_PADLOCK_PIXBUF, # use for account row only
) = range(8)
@@ -608,6 +608,7 @@ class RosterWindow:
for c, acc in brothers:
self.draw_contact(c.jid, acc)
+ self.draw_mood(c.jid, acc)
self.draw_avatar(c.jid, acc)
@@ -652,6 +653,7 @@ class RosterWindow:
'self_contact', jid, account, None, None, None))
self.draw_contact(jid, account)
+ self.draw_mood(jid, account)
self.draw_avatar(jid, account)
self.draw_account(account)
@@ -709,6 +711,7 @@ class RosterWindow:
if not self.starting:
for c, acc in contacts:
self.draw_contact(c.jid, acc)
+ self.draw_mood(c.jid, acc)
self.draw_avatar(c.jid, acc)
for group in contact.get_shown_groups():
self.draw_group(group, account)
@@ -765,6 +768,7 @@ class RosterWindow:
brothers = self._add_metacontact_family(family, account)
for c, acc in brothers:
self.draw_contact(c.jid, acc)
+ self.draw_mood(c.jid, acc)
self.draw_avatar(c.jid, acc)
# Draw all groups of the contact
@@ -1174,18 +1178,6 @@ class RosterWindow:
for child_iter in child_iters:
self.model[child_iter][C_IMG] = img
self.model[child_iter][C_NAME] = name
-
- if contact.mood.has_key('mood') \
- and contact.mood['mood'] in MOODS:
- self.model[child_iter][C_MOOD] = \
- gtkgui_helpers.load_mood_icon(
- contact.mood['mood'])
- elif contact.mood.has_key('mood'):
- self.model[child_iter][C_MOOD] = \
- gtkgui_helpers.load_mood_icon(
- 'unknown')
- else:
- self.model[child_iter][C_MOOD] = None
# We are a little brother
if family and not is_big_brother and not self.starting:
@@ -1204,6 +1196,27 @@ class RosterWindow:
return False
+ def draw_mood(self, jid, account):
+ iters = self._get_contact_iter(jid, account, model = self.model)
+ if not iters or not gajim.config.get('show_mood_in_roster'):
+ return
+ jid = self.model[iters[0]][C_JID]
+ jid = jid.decode('utf-8')
+ contact = gajim.contacts.get_contact(account, jid)
+ if contact.mood.has_key('mood') \
+ and contact.mood['mood'] in MOODS:
+ pixbuf = gtkgui_helpers.load_mood_icon(
+ contact.mood['mood']).get_pixbuf()
+ elif contact.mood.has_key('mood'):
+ pixbuf = gtkgui_helpers.load_mood_image(
+ 'unknown').get_pixbuf()
+ else:
+ pixbuf = None
+ for child_iter in iters:
+ self.model[child_iter][C_MOOD_PIXBUF] = pixbuf
+ return False
+
+
def draw_avatar(self, jid, account):
iters = self._get_contact_iter(jid, account, model = self.model)
if not iters or not gajim.config.get('show_avatars_in_roster'):
@@ -1250,6 +1263,7 @@ class RosterWindow:
def _draw_all_contacts(jids, account):
for jid in jids:
self.draw_contact(jid, account)
+ self.draw_mood(jid, account)
self.draw_avatar(jid, account)
yield True
yield False
@@ -1263,7 +1277,7 @@ class RosterWindow:
# (icon, name, type, jid, account, editable, mood_pixbuf,
# avatar_pixbuf, padlock_pixbuf)
self.model = gtk.TreeStore(gtk.Image, str, str, str, str,
- gtk.Image, gtk.gdk.Pixbuf, gtk.gdk.Pixbuf)
+ gtk.gdk.Pixbuf, gtk.gdk.Pixbuf, gtk.gdk.Pixbuf)
self.model.set_sort_func(1, self._compareIters)
self.model.set_sort_column_id(1, gtk.SORT_ASCENDING)
@@ -3665,6 +3679,7 @@ class RosterWindow:
for c, acc in brothers:
self.draw_contact(c.jid, acc)
+ self.draw_mood(c.jid, acc)
self.draw_avatar(c.jid, acc)
old_groups.extend(c_dest.groups)
@@ -4171,6 +4186,42 @@ class RosterWindow:
else:
renderer.set_property('xpad', 8)
+
+ def _fill_mood_pixbuf_rederer(self, column, renderer, model, titer,
+ data = None):
+ '''When a row is added, set properties for avatar renderer'''
+ theme = gajim.config.get('roster_theme')
+ type_ = model[titer][C_TYPE]
+ if type_ in ('group', 'account'):
+ renderer.set_property('visible', False)
+ return
+
+ # allocate space for the icon only if needed
+ if model[titer][C_MOOD_PIXBUF]:
+ renderer.set_property('visible', True)
+ else:
+ renderer.set_property('visible', False)
+ if type_: # prevent type_ = None, see http://trac.gajim.org/ticket/2534
+ if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
+ # This can append at the moment we add the row
+ return
+ jid = model[titer][C_JID].decode('utf-8')
+ account = model[titer][C_ACCOUNT].decode('utf-8')
+ if jid in gajim.newly_added[account]:
+ renderer.set_property('cell-background', gajim.config.get(
+ 'just_connected_bg_color'))
+ elif jid in gajim.to_be_removed[account]:
+ renderer.set_property('cell-background', gajim.config.get(
+ 'just_disconnected_bg_color'))
+ else:
+ color = gajim.config.get_per('themes', theme, 'contactbgcolor')
+ if color:
+ renderer.set_property('cell-background', color)
+ else:
+ renderer.set_property('cell-background', None)
+ renderer.set_property('xalign', 1) # align pixbuf to the right
+
+
def _fill_avatar_pixbuf_rederer(self, column, renderer, model, titer,
data = None):
'''When a row is added, set properties for avatar renderer'''
@@ -5975,13 +6026,11 @@ class RosterWindow:
col.add_attribute(render_text, 'markup', C_NAME) # where we hold the name
col.set_cell_data_func(render_text, self._nameCellDataFunc, None)
- if gajim.config.get('show_mood_in_roster'):
- render_image = cell_renderer_image.CellRendererImage(
- 0, 0)
- col.pack_start(render_image, expand = False)
- col.add_attribute(render_image, 'image', C_MOOD)
- col.set_cell_data_func(render_image,
- self._iconCellDataFunc, None)
+ render_pixbuf = gtk.CellRendererPixbuf()
+ col.pack_start(render_pixbuf, expand = False)
+ col.add_attribute(render_pixbuf, 'pixbuf', C_MOOD_PIXBUF)
+ col.set_cell_data_func(render_pixbuf,
+ self._fill_mood_pixbuf_rederer, None)
if gajim.config.get('avatar_position_in_roster') == 'right':
add_avatar_renderer()