Philipp Hörist pushed to branch mainwindow at gajim / gajim

Commits:

6 changed files:

Changes:

  • gajim/common/const.py
    ... ... @@ -18,6 +18,7 @@ class AvatarSize(IntEnum):
    18 18
         TAB = 16
    
    19 19
         ROSTER = 32
    
    20 20
         ACCOUNT_SIDE_BAR = 32
    
    21
    +    WORKSPACE = 32
    
    21 22
         CHAT = 48
    
    22 23
         NOTIFICATION = 48
    
    23 24
         GROUP_INFO = 100
    

  • gajim/data/gui/main.ui
    ... ... @@ -103,7 +103,7 @@
    103 103
           <object class="GtkGrid" id="left_grid">
    
    104 104
             <property name="visible">True</property>
    
    105 105
             <property name="can_focus">False</property>
    
    106
    -        <property name="valign">end</property>
    
    106
    +        <property name="vexpand">True</property>
    
    107 107
             <property name="orientation">vertical</property>
    
    108 108
             <child>
    
    109 109
               <placeholder/>
    

  • gajim/gtk/account_side_bar.py
    ... ... @@ -8,6 +8,7 @@ class AccountSideBar(Gtk.ListBox):
    8 8
         def __init__(self):
    
    9 9
             Gtk.ListBox.__init__(self)
    
    10 10
             self.set_vexpand(True)
    
    11
    +        self.set_valign(Gtk.Align.END)
    
    11 12
     
    
    12 13
             self._accounts = list(app.connections.keys())
    
    13 14
             for account in self._accounts:
    

  • gajim/gtk/avatar.py
    ... ... @@ -79,6 +79,15 @@ def generate_avatar(letters, color, size, scale):
    79 79
         return context.get_target()
    
    80 80
     
    
    81 81
     
    
    82
    +@lru_cache(maxsize=2048)
    
    83
    +def generate_default_avatar(letter, color_string, size, scale):
    
    84
    +    color = text_to_color(color_string)
    
    85
    +    surface = generate_avatar(letter, color, size, scale)
    
    86
    +    surface = clip_circle(surface)
    
    87
    +    surface.set_device_scale(scale, scale)
    
    88
    +    return surface
    
    89
    +
    
    90
    +
    
    82 91
     def add_status_to_avatar(surface, show):
    
    83 92
         width = surface.get_width()
    
    84 93
         height = surface.get_height()
    
    ... ... @@ -227,7 +236,7 @@ def get_surface(self, contact, size, scale, show=None, default=False):
    227 236
                 color_string = contact.jid
    
    228 237
     
    
    229 238
             letter = self._generate_letter(name)
    
    230
    -        surface = self._generate_default_avatar(
    
    239
    +        surface = generate_default_avatar(
    
    231 240
                 letter, color_string, size, scale)
    
    232 241
             if show is not None:
    
    233 242
                 surface = add_status_to_avatar(surface, show)
    
    ... ... @@ -252,7 +261,7 @@ def get_muc_surface(self, account, jid, size, scale, default=False):
    252 261
             con = app.connections[account]
    
    253 262
             name = get_groupchat_name(con, jid)
    
    254 263
             letter = self._generate_letter(name)
    
    255
    -        surface = self._generate_default_avatar(letter, jid, size, scale)
    
    264
    +        surface = generate_default_avatar(letter, jid, size, scale)
    
    256 265
             self._cache[jid][(size, scale)] = surface
    
    257 266
             return surface
    
    258 267
     
    
    ... ... @@ -353,12 +362,3 @@ def _generate_letter(name):
    353 362
                 if letter.isalpha():
    
    354 363
                     return letter.capitalize()
    
    355 364
             return name[0].capitalize()
    356
    -
    
    357
    -    @staticmethod
    
    358
    -    @lru_cache(maxsize=2048)
    
    359
    -    def _generate_default_avatar(letter, color_string, size, scale):
    
    360
    -        color = text_to_color(color_string)
    
    361
    -        surface = generate_avatar(letter, color, size, scale)
    
    362
    -        surface = clip_circle(surface)
    
    363
    -        surface.set_device_scale(scale, scale)
    
    364
    -        return surface

  • gajim/gtk/main.py
    ... ... @@ -6,6 +6,7 @@
    6 6
     from gajim.gui.chat_list_stack import ChatListStack
    
    7 7
     from gajim.gui.chat_stack import ChatStack
    
    8 8
     from gajim.gui.account_side_bar import AccountSideBar
    
    9
    +from gajim.gui.workspace_side_bar import WorkspaceSideBar
    
    9 10
     
    
    10 11
     
    
    11 12
     class MainWindow(Gtk.ApplicationWindow):
    
    ... ... @@ -30,6 +31,8 @@ def __init__(self):
    30 31
             self._chat_stack = ChatStack()
    
    31 32
             self._chat_list_stack = ChatListStack(self._ui, self._chat_stack)
    
    32 33
             self._account_side_bar = AccountSideBar()
    
    34
    +        self._workspace_side_bar = WorkspaceSideBar()
    
    35
    +        self._ui.left_grid.add(self._workspace_side_bar)
    
    33 36
             self._ui.left_grid.add(self._account_side_bar)
    
    34 37
             self._ui.middle_grid.add(self._chat_list_stack)
    
    35 38
             self._ui.right_grid.add(self._chat_stack)
    
    ... ... @@ -80,6 +83,7 @@ def get_control(self, account, jid):
    80 83
     
    
    81 84
         def _load_chats(self):
    
    82 85
             for workspace_id in app.settings.get_workspaces():
    
    86
    +            self._workspace_side_bar.add_workspace(workspace_id)
    
    83 87
                 open_chats = app.settings.get_workspace_setting(workspace_id,
    
    84 88
                                                                 'open_chats')
    
    85 89
                 for account, jid in open_chats:
    

  • gajim/gtk/workspace_side_bar.py
    1
    +
    
    2
    +from gi.repository import Gtk
    
    3
    +from gajim.common.const import AvatarSize
    
    4
    +from gajim.common import app
    
    5
    +
    
    6
    +from gajim.gui.avatar import generate_default_avatar
    
    7
    +
    
    8
    +
    
    9
    +class WorkspaceSideBar(Gtk.ListBox):
    
    10
    +    def __init__(self):
    
    11
    +        Gtk.ListBox.__init__(self)
    
    12
    +        self.set_vexpand(True)
    
    13
    +        self.set_valign(Gtk.Align.START)
    
    14
    +
    
    15
    +    def add_workspace(self, workspace_id):
    
    16
    +        self.add(Workspace(workspace_id))
    
    17
    +
    
    18
    +    def remove_workspace(self, workspace_id):
    
    19
    +        pass
    
    20
    +
    
    21
    +
    
    22
    +class Workspace(Gtk.ListBoxRow):
    
    23
    +    def __init__(self, workspace_id):
    
    24
    +        Gtk.ListBoxRow.__init__(self)
    
    25
    +
    
    26
    +        self._workspace_id = workspace_id
    
    27
    +        name = app.settings.get_workspace_setting(workspace_id, 'name')
    
    28
    +        letter = name[:2]
    
    29
    +
    
    30
    +        scale = self.get_scale_factor()
    
    31
    +        surface = generate_default_avatar(
    
    32
    +            letter, name, AvatarSize.WORKSPACE, scale)
    
    33
    +        self._image = Gtk.Image.new_from_surface(surface)
    
    34
    +        self.add(self._image)
    
    35
    +        self.show_all()