we now use 32x32 in Tabbed Chat banner img for state; and can control the size between 32x32 and 16x16 in general [of course only for those iconsets that ship 32x32

This commit is contained in:
Nikos Kouremenos 2005-12-12 15:13:31 +00:00
parent 062e1c5b2f
commit f7ee0dffd9
3 changed files with 63 additions and 43 deletions

View File

@ -118,7 +118,7 @@ class RosterWindow:
if self.regroup:
show = helpers.get_global_show()
model.append(None, [self.jabber_state_images[show],
model.append(None, [self.jabber_state_images['16'][show],
_('Merged accounts'), 'account', '', 'all', False, None])
return
@ -132,7 +132,7 @@ class RosterWindow:
our_jid = gajim.get_jid_from_account(account)
model.append(None, [self.jabber_state_images[show],
model.append(None, [self.jabber_state_images['16'][show],
gtkgui_helpers.escape_for_pango_markup(account),
'account', our_jid, account, False, tls_pixbuf])
@ -177,7 +177,8 @@ class RosterWindow:
iterG = self.get_group_iter(g, account)
if not iterG:
IterAcct = self.get_account_iter(account)
iterG = model.append(IterAcct, [self.jabber_state_images['closed'],
iterG = model.append(IterAcct, [
self.jabber_state_images['16']['closed'],
gtkgui_helpers.escape_for_pango_markup(g), 'group', g, account,
False, None])
if not gajim.groups[account].has_key(g): #It can probably never append
@ -233,12 +234,13 @@ class RosterWindow:
if gajim.groups[account].has_key(group):
del gajim.groups[account][group]
def get_appropriate_state_images(self, jid):
'''check jid and return the appropriate state images dict'''
def get_appropriate_state_images(self, jid, size = '16'):
'''check jid and return the appropriate state images dict for
the demanded size'''
transport = gajim.get_transport_name_from_jid(jid)
if transport:
return self.transports_state_images[transport]
return self.jabber_state_images
return self.transports_state_images[size][transport]
return self.jabber_state_images[size]
def draw_contact(self, jid, account, selected = False, focus = False):
'''draw the correct state image, name BUT not avatar'''
@ -283,8 +285,10 @@ class RosterWindow:
name += '\n<span size="small" style="italic" foreground="%s">%s</span>'\
% (colorstring, gtkgui_helpers.escape_for_pango_markup(status))
state_images = self.get_appropriate_state_images(jid)
icon_name = helpers.get_icon_name_to_show(contact, account)
state_images = self.get_appropriate_state_images(jid, size = '16')
img = state_images[icon_name]
for iter in iters:
@ -1116,7 +1120,7 @@ class RosterWindow:
iconset = gajim.config.get('iconset')
if not iconset:
iconset = 'sun'
path = os.path.join(gajim.DATA_DIR, 'iconsets/' + iconset + '/16x16/')
path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16')
state_images = self.load_iconset(path)
xml = gtk.glade.XML(GTKGUI_GLADE, 'account_context_menu', APP)
@ -1198,7 +1202,7 @@ class RosterWindow:
iconset = gajim.config.get('iconset')
if not iconset:
iconset = 'sun'
path = os.path.join(gajim.DATA_DIR, 'iconsets/' + iconset + '/16x16/')
path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16')
for account in gajim.connections:
state_images = self.load_iconset(path)
item = gtk.ImageMenuItem(account)
@ -1429,7 +1433,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
model = self.tree.get_model()
accountIter = self.get_account_iter(account)
if accountIter:
model[accountIter][0] = self.jabber_state_images['connecting']
model[accountIter][0] = self.jabber_state_images['16']['connecting']
if gajim.interface.systray_enabled:
gajim.interface.systray.change_status('connecting')
@ -1450,7 +1454,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
passphrase, save = w.run()
if passphrase == -1:
if accountIter:
model[accountIter][0] = self.jabber_state_images['offline']
model[accountIter][0] = self.jabber_state_images['16']['offline']
if gajim.interface.systray_enabled:
gajim.interface.systray.change_status('offline')
self.update_status_combobox()
@ -1626,7 +1630,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
model = self.tree.get_model()
accountIter = self.get_account_iter(account)
if accountIter:
model[accountIter][0] = self.jabber_state_images[status]
model[accountIter][0] = self.jabber_state_images['16'][status]
if status == 'offline':
if accountIter:
model[accountIter][6] = None
@ -2023,7 +2027,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
accounts = [model[iter][C_ACCOUNT].decode('utf-8')]
type = model[iter][C_TYPE]
if type == 'group':
model.set_value(iter, 0, self.jabber_state_images['opened'])
model.set_value(iter, 0, self.jabber_state_images['16']['opened'])
jid = model[iter][C_JID].decode('utf-8')
for account in accounts:
if gajim.groups[account].has_key(jid): # This account has this group
@ -2050,7 +2054,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
accounts = [model[iter][C_ACCOUNT].decode('utf-8')]
type = model[iter][C_TYPE]
if type == 'group':
model.set_value(iter, 0, self.jabber_state_images['closed'])
model.set_value(iter, 0, self.jabber_state_images['16']['closed'])
jid = model[iter][C_JID].decode('utf-8')
for account in accounts:
if gajim.groups[account].has_key(jid): # This account has this group
@ -2139,12 +2143,13 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
else:
try:
# Object will add itself to the window dict
disco.ServiceDiscoveryWindow(account, address_entry=True)
disco.ServiceDiscoveryWindow(account, address_entry = True)
except RuntimeError:
pass
def load_iconset(self, path):
imgs = {}
path += '/'
for state in ('connecting', 'online', 'chat', 'away', 'xa',
'dnd', 'invisible', 'offline', 'error', 'requested',
'message', 'opened', 'closed', 'not in the roster',
@ -2169,8 +2174,12 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
iconset = gajim.config.get('iconset')
if not iconset:
iconset = 'sun'
path = os.path.join(gajim.DATA_DIR, 'iconsets/' + iconset + '/16x16/')
self.jabber_state_images = self.load_iconset(path)
path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '32x32')
if os.path.exists(path):
self.jabber_state_images['32'] = self.load_iconset(path)
path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16')
self.jabber_state_images['16'] = self.load_iconset(path)
def reload_jabber_state_images(self):
self.make_jabber_state_images()
@ -2183,7 +2192,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
if model[iter][2] != '':
# If it's not change status message iter
# eg. if it has show parameter not ''
model[iter][1] = self.jabber_state_images[model[iter][2]]
model[iter][1] = self.jabber_state_images['16'][model[iter][2]]
iter = model.iter_next(iter)
# Update the systray
if gajim.interface.systray_enabled:
@ -2545,7 +2554,10 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
self._on_treeview_selection_changed)
self._last_selected_contact = None # None or holds jid, account tupple
self.nb_unread = 0
self.jabber_state_images = {'16': {}, '32': {}}
self.transports_state_images = {'16': {}, '32': {}}
self.nb_unread = 0 # number of unread messages
self.last_save_dir = None
self.editing_path = None # path of row with cell in edit mode
self.add_new_contact_handler_id = False
@ -2575,21 +2587,16 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
self.tree.set_model(model)
self.make_jabber_state_images()
#FIXME: why do we init this dict of dicts here?
#for loop below does it. maybe so we're sure we always have the keys?
#eventhough childs can be empty? I don't get it
self.transports_state_images = { 'aim': {}, 'gadugadu': {}, 'irc': {},
'icq': {}, 'msn': {}, 'sms': {}, 'tlen': {}, 'weather': {},
'yahoo': {} }
path = os.path.join(gajim.DATA_DIR, 'iconsets', 'transports')
folders = os.listdir(path)
for transport in folders:
if transport == '.svn':
continue
folder = os.path.join(path, transport)
self.transports_state_images[transport] = self.load_iconset(
folder + '/16x16/')
folder = os.path.join(path, transport, '32x32')
if os.path.exists(folder):
self.transports_state_images['32'][transport] = self.load_iconset( folder)
folder = os.path.join(path, transport, '16x16')
self.transports_state_images['16'][transport] = self.load_iconset( folder)
# uf_show, img, show, sensitive
liststore = gtk.ListStore(str, gtk.Image, str, bool)
@ -2617,7 +2624,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'):
uf_show = helpers.get_uf_show(show)
liststore.append([uf_show, self.jabber_state_images[show], show, True])
liststore.append([uf_show, self.jabber_state_images['16'][show], show, True])
# Add a Separator (self.iter_is_separator() checks on string SEPARATOR)
liststore.append(['SEPARATOR', None, '', True])
@ -2631,7 +2638,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid)
liststore.append(['SEPARATOR', None, '', True])
uf_show = helpers.get_uf_show('offline')
liststore.append([uf_show, self.jabber_state_images['offline'],
liststore.append([uf_show, self.jabber_state_images['16']['offline'],
'offline', True])
status_combobox_items = ['online', 'chat', 'away', 'xa', 'dnd', 'invisible',

View File

@ -74,7 +74,7 @@ class Systray:
state = 'message'
else:
state = self.status
image = gajim.interface.roster.jabber_state_images[state]
image = gajim.interface.roster.jabber_state_images['16'][state]
if image.get_storage_type() == gtk.IMAGE_ANIMATION:
self.img_tray.set_from_animation(image.get_animation())
elif image.get_storage_type() == gtk.IMAGE_PIXBUF:
@ -134,8 +134,8 @@ class Systray:
# We need our own set of status icons, let's make 'em!
iconset = gajim.config.get('iconset')
if not iconset:
iconset = 'sun'
path = os.path.join(gajim.DATA_DIR, 'iconsets/' + iconset + '/16x16/')
iconset = 'dcraven'
path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16')
state_images = gajim.interface.roster.load_iconset(path)
for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'):
@ -235,7 +235,7 @@ class Systray:
iconset = gajim.config.get('iconset')
if not iconset:
iconset = 'sun'
path = os.path.join(gajim.DATA_DIR, 'iconsets/' + iconset + '/16x16/')
path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16')
state_images = gajim.interface.roster.load_iconset(path)
groups_menu = gtk.Menu()

View File

@ -354,23 +354,36 @@ class TabbedChatWindow(chat.Chat):
child = self.childs[jid]
hb = self.notebook.get_tab_label(child).get_children()[0]
status_image = hb.get_children()[0]
state_images = gajim.interface.roster.get_appropriate_state_images(jid)
state_images_32 = gajim.interface.roster.get_appropriate_state_images(jid,
size = '32')
state_images_16 = gajim.interface.roster.get_appropriate_state_images(jid)
# Set banner image
banner_image = state_images[show]
if state_images_32[show].get_pixbuf():
# we have 32x32! use it!
banner_image = state_images_32[show]
use_size_32 = True
else:
banner_image = state_images_16[show]
use_size_32 = False
banner_status_image = self.xmls[jid].get_widget('banner_status_image')
if banner_image.get_storage_type() == gtk.IMAGE_ANIMATION:
banner_status_image.set_from_animation(banner_image.get_animation())
else:
pix = banner_image.get_pixbuf()
scaled_pix = pix.scale_simple(32, 32, gtk.gdk.INTERP_BILINEAR)
banner_status_image.set_from_pixbuf(scaled_pix)
if use_size_32:
banner_status_image.set_from_pixbuf(pix)
else: # we need to scale 16x16 to 32x32
scaled_pix = pix.scale_simple(32, 32, gtk.gdk.INTERP_BILINEAR)
banner_status_image.set_from_pixbuf(scaled_pix)
# Set tab image; unread messages show the 'message' image
# Set tab image (always 16x16); unread messages show the 'message' image
if self.nb_unread[jid] and gajim.config.get('show_unread_tab_icon'):
tab_image = state_images['message']
tab_image = state_images_16['message']
else:
tab_image = banner_image
tab_image = state_images_16[show]
if tab_image.get_storage_type() == gtk.IMAGE_ANIMATION:
status_image.set_from_animation(tab_image.get_animation())
else: