Philipp Hörist pushed to branch mainwindow at gajim / gajim
Commits: 26ad5efb by lovetox at 2021-01-18T23:10:15+01:00 Add Workspace Side Bar
- - - - -
6 changed files:
- gajim/common/const.py - gajim/data/gui/main.ui - gajim/gtk/account_side_bar.py - gajim/gtk/avatar.py - gajim/gtk/main.py - + gajim/gtk/workspace_side_bar.py
Changes:
===================================== gajim/common/const.py ===================================== @@ -18,6 +18,7 @@ class AvatarSize(IntEnum): TAB = 16 ROSTER = 32 ACCOUNT_SIDE_BAR = 32 + WORKSPACE = 32 CHAT = 48 NOTIFICATION = 48 GROUP_INFO = 100
===================================== gajim/data/gui/main.ui ===================================== @@ -103,7 +103,7 @@ <object class="GtkGrid" id="left_grid"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="valign">end</property> + <property name="vexpand">True</property> <property name="orientation">vertical</property> <child> <placeholder/>
===================================== gajim/gtk/account_side_bar.py ===================================== @@ -8,6 +8,7 @@ class AccountSideBar(Gtk.ListBox): def __init__(self): Gtk.ListBox.__init__(self) self.set_vexpand(True) + self.set_valign(Gtk.Align.END)
self._accounts = list(app.connections.keys()) for account in self._accounts:
===================================== gajim/gtk/avatar.py ===================================== @@ -79,6 +79,15 @@ def generate_avatar(letters, color, size, scale): return context.get_target()
+@lru_cache(maxsize=2048) +def generate_default_avatar(letter, color_string, size, scale): + color = text_to_color(color_string) + surface = generate_avatar(letter, color, size, scale) + surface = clip_circle(surface) + surface.set_device_scale(scale, scale) + return surface + + def add_status_to_avatar(surface, show): width = surface.get_width() height = surface.get_height() @@ -227,7 +236,7 @@ def get_surface(self, contact, size, scale, show=None, default=False): color_string = contact.jid
letter = self._generate_letter(name) - surface = self._generate_default_avatar( + surface = generate_default_avatar( letter, color_string, size, scale) if show is not None: surface = add_status_to_avatar(surface, show) @@ -252,7 +261,7 @@ def get_muc_surface(self, account, jid, size, scale, default=False): con = app.connections[account] name = get_groupchat_name(con, jid) letter = self._generate_letter(name) - surface = self._generate_default_avatar(letter, jid, size, scale) + surface = generate_default_avatar(letter, jid, size, scale) self._cache[jid][(size, scale)] = surface return surface
@@ -353,12 +362,3 @@ def _generate_letter(name): if letter.isalpha(): return letter.capitalize() return name[0].capitalize() - - @staticmethod - @lru_cache(maxsize=2048) - def _generate_default_avatar(letter, color_string, size, scale): - color = text_to_color(color_string) - surface = generate_avatar(letter, color, size, scale) - surface = clip_circle(surface) - surface.set_device_scale(scale, scale) - return surface
===================================== gajim/gtk/main.py ===================================== @@ -6,6 +6,7 @@ from gajim.gui.chat_list_stack import ChatListStack from gajim.gui.chat_stack import ChatStack from gajim.gui.account_side_bar import AccountSideBar +from gajim.gui.workspace_side_bar import WorkspaceSideBar
class MainWindow(Gtk.ApplicationWindow): @@ -30,6 +31,8 @@ def __init__(self): self._chat_stack = ChatStack() self._chat_list_stack = ChatListStack(self._ui, self._chat_stack) self._account_side_bar = AccountSideBar() + self._workspace_side_bar = WorkspaceSideBar() + self._ui.left_grid.add(self._workspace_side_bar) self._ui.left_grid.add(self._account_side_bar) self._ui.middle_grid.add(self._chat_list_stack) self._ui.right_grid.add(self._chat_stack) @@ -80,6 +83,7 @@ def get_control(self, account, jid):
def _load_chats(self): for workspace_id in app.settings.get_workspaces(): + self._workspace_side_bar.add_workspace(workspace_id) open_chats = app.settings.get_workspace_setting(workspace_id, 'open_chats') for account, jid in open_chats:
===================================== gajim/gtk/workspace_side_bar.py ===================================== @@ -0,0 +1,35 @@ + +from gi.repository import Gtk +from gajim.common.const import AvatarSize +from gajim.common import app + +from gajim.gui.avatar import generate_default_avatar + + +class WorkspaceSideBar(Gtk.ListBox): + def __init__(self): + Gtk.ListBox.__init__(self) + self.set_vexpand(True) + self.set_valign(Gtk.Align.START) + + def add_workspace(self, workspace_id): + self.add(Workspace(workspace_id)) + + def remove_workspace(self, workspace_id): + pass + + +class Workspace(Gtk.ListBoxRow): + def __init__(self, workspace_id): + Gtk.ListBoxRow.__init__(self) + + self._workspace_id = workspace_id + name = app.settings.get_workspace_setting(workspace_id, 'name') + letter = name[:2] + + scale = self.get_scale_factor() + surface = generate_default_avatar( + letter, name, AvatarSize.WORKSPACE, scale) + self._image = Gtk.Image.new_from_surface(surface) + self.add(self._image) + self.show_all()
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/26ad5efb4801028f7e7f52bce58a75f78...