From 368c2923656afcc1a2ce34eff9acf79f4ed1fff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Br=C3=B6tzmann?= <mailtrash@posteo.de> Date: Thu, 14 May 2020 11:21:34 +0200 Subject: [PATCH] Start Chat: Introduce account badges --- gajim/data/style/gajim.css | 12 ++++++++++++ gajim/gtk/css_config.py | 2 +- gajim/gtk/start_chat.py | 40 +++++++++++++++++++------------------- gajim/gtk/util.py | 13 +++++++++++++ 4 files changed, 46 insertions(+), 21 deletions(-) diff --git a/gajim/data/style/gajim.css b/gajim/data/style/gajim.css index 1386ae8a79..b87ee7c0ab 100644 --- a/gajim/data/style/gajim.css +++ b/gajim/data/style/gajim.css @@ -260,6 +260,18 @@ .data-form-widget textview { padding: 5px; } /*Image Preview*/ .preview-image { box-shadow: 0px 0px 3px 0px alpha(@theme_text_color, 0.2); } +/* Badge */ +.badge { + color: rgb(242, 242, 242); + padding-left: 6px; + padding-right: 6px; + padding-top: 2px; + padding-bottom: 2px; + border-radius: 4px; + font-size: 80%; + font-weight: bold; +} + /* Treeview */ .adhoc-treeview { padding: 5px; } .adhoc-scrolled { border: 1px solid; border-color:@unfocused_borders; } diff --git a/gajim/gtk/css_config.py b/gajim/gtk/css_config.py index 6bb905a061..22884cabe6 100644 --- a/gajim/gtk/css_config.py +++ b/gajim/gtk/css_config.py @@ -538,7 +538,7 @@ def refresh(self): for index, account in enumerate(accounts): color = app.config.get_per('accounts', account, 'account_color') css_class = 'gajim_class_%s' % index - css += '.%s { color: %s }\n' % (css_class, color) + css += '.%s { background-color: %s }\n' % (css_class, color) self._dynamic_dict[account] = css_class self._dynamic_provider.load_from_data(css.encode()) diff --git a/gajim/gtk/start_chat.py b/gajim/gtk/start_chat.py index 1a1352d38c..87ff004bd4 100644 --- a/gajim/gtk/start_chat.py +++ b/gajim/gtk/start_chat.py @@ -37,6 +37,7 @@ from gajim.gtk.util import get_builder from gajim.gtk.util import ensure_not_destroyed from gajim.gtk.util import get_icon_name +from gajim.gtk.util import generate_account_badge class Search(IntEnum): @@ -136,8 +137,8 @@ def _add_groupchats(self, rows): for bookmark in bookmarks: jid = str(bookmark.jid) name = get_groupchat_name(con, jid) - rows.append(ContactRow(account, None, jid, - name, show_account, True)) + rows.append(ContactRow(account, None, jid, name, show_account, + groupchat=True)) def _load_contacts(self, rows): generator = self._incremental_add(rows) @@ -401,7 +402,8 @@ def _add_new_jid_row(self): show_account = len(self._accounts) > 1 row = ContactRow(account, None, '', None, show_account) self.new_contact_rows[account] = row - group_row = ContactRow(account, None, '', None, show_account, True) + group_row = ContactRow(account, None, '', None, show_account, + groupchat=True) self.new_groupchat_rows[account] = group_row self._ui.listbox.add(row) self._ui.listbox.add(group_row) @@ -609,8 +611,8 @@ def __init__(self, account, contact, jid, name, show_account, image.set_size_request(AvatarSize.CHAT, AvatarSize.CHAT) grid.add(image) - middle_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) - middle_box.set_hexpand(True) + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) + box.set_hexpand(True) if self.name is None: if self.groupchat: @@ -624,7 +626,17 @@ def __init__(self, account, contact, jid, name, show_account, self.name_label.set_width_chars(20) self.name_label.set_halign(Gtk.Align.START) self.name_label.get_style_context().add_class('bold16') - middle_box.add(self.name_label) + name_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) + name_box.add(self.name_label) + if show_account: + account_badge = generate_account_badge(account) + account_badge.set_tooltip_text( + _('Account: %s' % self.account_label)) + account_badge.set_halign(Gtk.Align.END) + account_badge.set_valign(Gtk.Align.START) + account_badge.set_hexpand(True) + name_box.add(account_badge) + box.add(name_box) self.jid_label = Gtk.Label(label=jid) self.jid_label.set_tooltip_text(jid) @@ -633,21 +645,9 @@ def __init__(self, account, contact, jid, name, show_account, self.jid_label.set_width_chars(22) self.jid_label.set_halign(Gtk.Align.START) self.jid_label.get_style_context().add_class('dim-label') - middle_box.add(self.jid_label) - - grid.add(middle_box) + box.add(self.jid_label) - if show_account: - account_icon = Gtk.Image.new_from_icon_name( - 'org.gajim.Gajim-symbolic', Gtk.IconSize.MENU) - account_icon.set_tooltip_text( - _('Account: %s' % self.account_label)) - account_class = app.css_config.get_dynamic_class(account) - account_icon.get_style_context().add_class(account_class) - right_box = Gtk.Box() - right_box.set_vexpand(True) - right_box.add(account_icon) - grid.add(right_box) + grid.add(box) self.add(grid) self.show_all() diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py index a2d06af5e4..7ac54b32bc 100644 --- a/gajim/gtk/util.py +++ b/gajim/gtk/util.py @@ -660,6 +660,19 @@ def get_color_for_account(account: str) -> str: return rgba.to_string() +def generate_account_badge(account): + account_label = app.get_account_label(account) + badge = Gtk.Label(label=account_label) + badge.set_ellipsize(Pango.EllipsizeMode.END) + badge.set_max_width_chars(12) + badge.set_size_request(50, -1) + account_class = app.css_config.get_dynamic_class(account) + badge_context = badge.get_style_context() + badge_context.add_class(account_class) + badge_context.add_class('badge') + return badge + + @lru_cache(maxsize=16) def get_css_show_class(show): if show in ('online', 'chat'): -- GitLab