use Gtk.Grid instead of deprecated Gtk.Table in tooltips

This commit is contained in:
Yann Leboulanger 2013-07-29 18:22:19 +02:00
parent b70d08a513
commit 0ee35f0395
1 changed files with 63 additions and 68 deletions

View File

@ -222,7 +222,10 @@ class StatusTable:
self.spacer_label = ' ' self.spacer_label = ' '
def create_table(self): def create_table(self):
self.table = Gtk.Table(4, 1) self.table = Gtk.Grid()
self.table.insert_row(0)
self.table.insert_row(0)
self.table.insert_column(0)
self.table.set_property('column-spacing', 2) self.table.set_property('column-spacing', 2)
def add_text_row(self, text, col_inc = 0): def add_text_row(self, text, col_inc = 0):
@ -232,8 +235,8 @@ class StatusTable:
self.text_label.set_alignment(0, 0) self.text_label.set_alignment(0, 0)
self.text_label.set_selectable(False) self.text_label.set_selectable(False)
self.text_label.set_markup(text) self.text_label.set_markup(text)
self.table.attach(self.text_label, 1 + col_inc, 4, self.current_row, self.table.attach(self.text_label, 1 + col_inc, self.current_row,
self.current_row + 1) 3 - col_inc, 1)
def get_status_info(self, resource, priority, show, status): def get_status_info(self, resource, priority, show, status):
str_status = resource + ' (' + str(priority) + ')' str_status = resource + ' (' + str(priority) + ')'
@ -248,10 +251,12 @@ class StatusTable:
return str_status return str_status
def add_status_row(self, file_path, show, str_status, status_time=None, def add_status_row(self, file_path, show, str_status, status_time=None,
show_lock=False, indent=True): show_lock=False, indent=True):
""" """
Append a new row with status icon to the table Append a new row with status icon to the table
""" """
self.table.insert_row(0)
self.table.insert_row(0)
self.current_row += 1 self.current_row += 1
state_file = show.replace(' ', '_') state_file = show.replace(' ', '_')
files = [] files = []
@ -266,22 +271,18 @@ class StatusTable:
spacer = Gtk.Label(label=self.spacer_label) spacer = Gtk.Label(label=self.spacer_label)
image.set_alignment(1, 0.5) image.set_alignment(1, 0.5)
if indent: if indent:
self.table.attach(spacer, 1, 2, self.current_row, self.table.attach(spacer, 1, self.current_row, 1, 1)
self.current_row + 1, 0, 0, 0, 0) self.table.attach(image, 2, self.current_row, 1, 1)
self.table.attach(image, 2, 3, self.current_row,
self.current_row + 1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL, 2, 0)
status_label = Gtk.Label() status_label = Gtk.Label()
status_label.set_markup(str_status) status_label.set_markup(str_status)
status_label.set_alignment(0, 0) status_label.set_alignment(0, 0)
status_label.set_line_wrap(True) status_label.set_line_wrap(True)
self.table.attach(status_label, 3, 4, self.current_row, self.table.attach(status_label, 3, self.current_row, 1, 1)
self.current_row + 1, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, 0, 0, 0)
if show_lock: if show_lock:
lock_image = Gtk.Image() lock_image = Gtk.Image()
lock_image.set_from_stock(Gtk.STOCK_DIALOG_AUTHENTICATION, lock_image.set_from_stock(Gtk.STOCK_DIALOG_AUTHENTICATION,
Gtk.IconSize.MENU) Gtk.IconSize.MENU)
self.table.attach(lock_image, 4, 5, self.current_row, self.table.attach(lock_image, 4, self.current_row, 1, 1)
self.current_row + 1, 0, 0, 0, 0)
class NotificationAreaTooltip(BaseTooltip, StatusTable): class NotificationAreaTooltip(BaseTooltip, StatusTable):
""" """
@ -322,7 +323,6 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
self.create_table() self.create_table()
accounts = helpers.get_notification_icon_tooltip_dict() accounts = helpers.get_notification_icon_tooltip_dict()
self.table.resize(2, 1)
self.fill_table_with_accounts(accounts) self.fill_table_with_accounts(accounts)
self.hbox = Gtk.HBox() self.hbox = Gtk.HBox()
self.table.set_property('column-spacing', 1) self.table.set_property('column-spacing', 1)
@ -349,9 +349,12 @@ class GCTooltip(BaseTooltip):
if not contact: if not contact:
return return
self.create_window() self.create_window()
vcard_table = Gtk.Table(3, 1) vcard_table = Gtk.Grid()
vcard_table.insert_row(0)
vcard_table.insert_row(0)
vcard_table.insert_row(0)
vcard_table.insert_column(0)
vcard_table.set_property('column-spacing', 2) vcard_table.set_property('column-spacing', 2)
vcard_table.set_homogeneous(False)
vcard_current_row = 1 vcard_current_row = 1
properties = [] properties = []
@ -380,17 +383,17 @@ class GCTooltip(BaseTooltip):
if contact.affiliation != 'none': if contact.affiliation != 'none':
uf_affiliation = helpers.get_uf_affiliation(contact.affiliation) uf_affiliation = helpers.get_uf_affiliation(contact.affiliation)
uf_affiliation =\ uf_affiliation = \
_('%(owner_or_admin_or_member)s of this group chat') %\ _('%(owner_or_admin_or_member)s of this group chat') % \
{'owner_or_admin_or_member': uf_affiliation} {'owner_or_admin_or_member': uf_affiliation}
uf_affiliation = self.colorize_affiliation(uf_affiliation) uf_affiliation = self.colorize_affiliation(uf_affiliation)
properties.append((uf_affiliation, None)) properties.append((uf_affiliation, None))
# Add avatar # Add avatar
puny_name = helpers.sanitize_filename(contact.name) puny_name = helpers.sanitize_filename(contact.name)
puny_room = helpers.sanitize_filename(contact.room_jid) puny_room = helpers.sanitize_filename(contact.room_jid)
file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH, puny_room, file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH,
puny_name)) puny_room, puny_name))
if file_: if file_:
self.avatar_image.set_from_file(file_) self.avatar_image.set_from_file(file_)
pix = self.avatar_image.get_pixbuf() pix = self.avatar_image.get_pixbuf()
@ -401,31 +404,27 @@ class GCTooltip(BaseTooltip):
while properties: while properties:
property_ = properties.pop(0) property_ = properties.pop(0)
vcard_current_row += 1 vcard_current_row += 1
vertical_fill = Gtk.AttachOptions.FILL
if not properties:
vertical_fill |= Gtk.AttachOptions.EXPAND
label = Gtk.Label() label = Gtk.Label()
if not properties:
label.set_vexpand(True)
label.set_alignment(0, 0) label.set_alignment(0, 0)
if property_[1]: if property_[1]:
label.set_markup(property_[0]) label.set_markup(property_[0])
vcard_table.attach(label, 1, 2, vcard_current_row, vcard_table.attach(label, 1, vcard_current_row, 1, 1)
vcard_current_row + 1, Gtk.AttachOptions.FILL, vertical_fill, 0, 0)
label = Gtk.Label() label = Gtk.Label()
if not properties:
label.set_vexpand(True)
label.set_alignment(0, 0) label.set_alignment(0, 0)
label.set_markup(property_[1]) label.set_markup(property_[1])
label.set_line_wrap(True) label.set_line_wrap(True)
vcard_table.attach(label, 2, 3, vcard_current_row, vcard_table.attach(label, 2, vcard_current_row, 1, 1)
vcard_current_row + 1, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL,
vertical_fill, 0, 0)
else: else:
label.set_markup(property_[0]) label.set_markup(property_[0])
label.set_line_wrap(True) label.set_line_wrap(True)
vcard_table.attach(label, 1, 3, vcard_current_row, vcard_table.attach(label, 1, vcard_current_row, 2, 1)
vcard_current_row + 1, Gtk.AttachOptions.FILL, vertical_fill, 0)
self.avatar_image.set_alignment(0, 0) self.avatar_image.set_alignment(0, 0)
vcard_table.attach(self.avatar_image, 3, 4, 2, vcard_current_row + 1, vcard_table.attach(self.avatar_image, 3, 2, 1, vcard_current_row - 1)
Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, 3, 3)
gajim.plugin_manager.gui_extension_point('gc_tooltip_populate', gajim.plugin_manager.gui_extension_point('gc_tooltip_populate',
self, contact, vcard_table) self, contact, vcard_table)
self.win.add(vcard_table) self.win.add(vcard_table)
@ -451,7 +450,6 @@ class RosterTooltip(NotificationAreaTooltip):
if not contacts or len(contacts) == 0: if not contacts or len(contacts) == 0:
# Tooltip for merged accounts row # Tooltip for merged accounts row
accounts = helpers.get_notification_icon_tooltip_dict() accounts = helpers.get_notification_icon_tooltip_dict()
self.table.resize(2, 1)
self.spacer_label = '' self.spacer_label = ''
self.fill_table_with_accounts(accounts) self.fill_table_with_accounts(accounts)
self.win.add(self.table) self.win.add(self.table)
@ -459,12 +457,13 @@ class RosterTooltip(NotificationAreaTooltip):
# primary contact # primary contact
prim_contact = gajim.contacts.get_highest_prio_contact_from_contacts( prim_contact = gajim.contacts.get_highest_prio_contact_from_contacts(
contacts) contacts)
puny_jid = helpers.sanitize_filename(prim_contact.jid) puny_jid = helpers.sanitize_filename(prim_contact.jid)
table_size = 3 table_size = 3
file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH, puny_jid)) file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH,
puny_jid))
if file_: if file_:
self.avatar_image.set_from_file(file_) self.avatar_image.set_from_file(file_)
pix = self.avatar_image.get_pixbuf() pix = self.avatar_image.get_pixbuf()
@ -473,9 +472,11 @@ class RosterTooltip(NotificationAreaTooltip):
table_size = 4 table_size = 4
else: else:
self.avatar_image.set_from_pixbuf(None) self.avatar_image.set_from_pixbuf(None)
vcard_table = Gtk.Table(1,table_size) vcard_table = Gtk.Grid()
vcard_table.insert_row(0)
for i in range(0, table_size):
vcard_table.insert_column(0)
vcard_table.set_property('column-spacing', 2) vcard_table.set_property('column-spacing', 2)
vcard_table.set_homogeneous(False)
vcard_current_row = 1 vcard_current_row = 1
properties = [] properties = []
@ -508,11 +509,10 @@ class RosterTooltip(NotificationAreaTooltip):
if num_resources > 1: if num_resources > 1:
properties.append((_('Status: '), ' ')) properties.append((_('Status: '), ' '))
transport = gajim.get_transport_name_from_jid( transport = gajim.get_transport_name_from_jid(prim_contact.jid)
prim_contact.jid)
if transport: if transport:
file_path = os.path.join(helpers.get_transport_path(transport), file_path = os.path.join(helpers.get_transport_path(transport),
'16x16') '16x16')
else: else:
iconset = gajim.config.get('iconset') iconset = gajim.config.get('iconset')
if not iconset: if not iconset:
@ -525,11 +525,11 @@ class RosterTooltip(NotificationAreaTooltip):
for priority in contact_keys: for priority in contact_keys:
for acontact in contacts_dict[priority]: for acontact in contacts_dict[priority]:
status_line = self.get_status_info(acontact.resource, status_line = self.get_status_info(acontact.resource,
acontact.priority, acontact.show, acontact.status) acontact.priority, acontact.show, acontact.status)
icon_name = self._get_icon_name_for_tooltip(acontact) icon_name = self._get_icon_name_for_tooltip(acontact)
self.add_status_row(file_path, icon_name, status_line, self.add_status_row(file_path, icon_name, status_line,
acontact.last_status_time) acontact.last_status_time)
properties.append((self.table, None)) properties.append((self.table, None))
else: # only one resource else: # only one resource
@ -538,13 +538,14 @@ class RosterTooltip(NotificationAreaTooltip):
if not self.check_last_time and self.account: if not self.check_last_time and self.account:
if contact.show == 'offline': if contact.show == 'offline':
if not contact.last_status_time: if not contact.last_status_time:
gajim.connections[self.account].request_last_status_time( gajim.connections[self.account].\
contact.jid, '') request_last_status_time(contact.jid, '')
else: else:
self.check_last_time = contact.last_status_time self.check_last_time = contact.last_status_time
elif contact.resource: elif contact.resource:
gajim.connections[self.account].request_last_status_time( gajim.connections[self.account].\
contact.jid, contact.resource) request_last_status_time(
contact.jid, contact.resource)
if contact.last_activity_time: if contact.last_activity_time:
self.check_last_time = contact.last_activity_time self.check_last_time = contact.last_activity_time
else: else:
@ -556,15 +557,15 @@ class RosterTooltip(NotificationAreaTooltip):
else: else:
text = _(' since %s') text = _(' since %s')
if time.strftime('%j', time.localtime())== \ if time.strftime('%j', time.localtime()) == \
time.strftime('%j', contact.last_status_time): time.strftime('%j', contact.last_status_time):
# it's today, show only the locale hour representation # it's today, show only the locale hour representation
local_time = time.strftime('%X', local_time = time.strftime('%X',
contact.last_status_time) contact.last_status_time)
else: else:
# time.strftime returns locale encoded string # time.strftime returns locale encoded string
local_time = time.strftime('%c', local_time = time.strftime('%c',
contact.last_status_time) contact.last_status_time)
text = text % local_time text = text % local_time
show += text show += text
@ -580,7 +581,8 @@ class RosterTooltip(NotificationAreaTooltip):
status = contact.status.strip() status = contact.status.strip()
if status: if status:
# reduce long status # reduce long status
# (no more than 300 chars on line and no more than 5 lines) # (no more than 300 chars on line and no more than
# 5 lines)
# status is wrapped # status is wrapped
status = helpers.reduce_chars_newlines(status, 300, 5) status = helpers.reduce_chars_newlines(status, 300, 5)
# escape markup entities. # escape markup entities.
@ -641,37 +643,30 @@ class RosterTooltip(NotificationAreaTooltip):
while properties: while properties:
property_ = properties.pop(0) property_ = properties.pop(0)
vcard_current_row += 1 vcard_current_row += 1
vertical_fill = Gtk.AttachOptions.FILL
if not properties and table_size == 4:
vertical_fill |= Gtk.AttachOptions.EXPAND
label = Gtk.Label() label = Gtk.Label()
if not properties and table_size == 4:
label.set_vexpand(True)
label.set_alignment(0, 0) label.set_alignment(0, 0)
if property_[1]: if property_[1]:
label.set_markup(property_[0]) label.set_markup(property_[0])
vcard_table.attach(label, 1, 2, vcard_current_row, vcard_table.attach(label, 1, vcard_current_row, 1, 1)
vcard_current_row + 1, Gtk.AttachOptions.FILL,
vertical_fill, 0, 0)
label = Gtk.Label() label = Gtk.Label()
if not properties and table_size == 4:
label.set_vexpand(True)
label.set_alignment(0, 0) label.set_alignment(0, 0)
label.set_markup(property_[1]) label.set_markup(property_[1])
label.set_line_wrap(True) label.set_line_wrap(True)
vcard_table.attach(label, 2, 3, vcard_current_row, vcard_table.attach(label, 2, vcard_current_row, 1, 1)
vcard_current_row + 1, Gtk.AttachOptions.EXPAND | \
Gtk.AttachOptions.FILL, vertical_fill, 0, 0)
else: else:
if isinstance(property_[0], str): if isinstance(property_[0], str):
label.set_markup(property_[0]) label.set_markup(property_[0])
label.set_line_wrap(True) label.set_line_wrap(True)
else: else:
label = property_[0] label = property_[0]
vcard_table.attach(label, 1, 3, vcard_current_row, vcard_table.attach(label, 1, vcard_current_row, 2, 1)
vcard_current_row + 1, Gtk.AttachOptions.FILL,
vertical_fill, 0)
self.avatar_image.set_alignment(0, 0) self.avatar_image.set_alignment(0, 0)
if table_size == 4: if table_size == 4:
vcard_table.attach(self.avatar_image, 3, 4, 2, vcard_table.attach(self.avatar_image, 3, 2, 1, vcard_current_row - 1)
vcard_current_row + 1, Gtk.AttachOptions.FILL,
Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, 3, 3)
gajim.plugin_manager.gui_extension_point('roster_tooltip_populate', gajim.plugin_manager.gui_extension_point('roster_tooltip_populate',
self, contacts, vcard_table) self, contacts, vcard_table)