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/26ad5efb4801028f7e7f52bce58a75f783d349a4

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/26ad5efb4801028f7e7f52bce58a75f783d349a4
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to