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