From e43dcd2f4bb2ff967a22399a77f179ea6355579c Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Thu, 17 Dec 2020 12:47:53 +0100
Subject: [PATCH] Start separating logic of MainViewContainer

I decided to go with the MVC (Model-View-Controller) pattern. This is
the first step by making MainWindowContainer a MainWindowView.
---
 briar-gtk/briar_gtk/actions/window.py               |  4 ++--
 briar-gtk/briar_gtk/views/__init__.py               |  6 ++++++
 .../briar_gtk/{containers => views}/main_window.py  | 13 ++++++++++---
 briar-gtk/briar_gtk/window.py                       |  4 ++--
 4 files changed, 20 insertions(+), 7 deletions(-)
 create mode 100644 briar-gtk/briar_gtk/views/__init__.py
 rename briar-gtk/briar_gtk/{containers => views}/main_window.py (97%)

diff --git a/briar-gtk/briar_gtk/actions/window.py b/briar-gtk/briar_gtk/actions/window.py
index 4d79ee0..40cb3a4 100644
--- a/briar-gtk/briar_gtk/actions/window.py
+++ b/briar-gtk/briar_gtk/actions/window.py
@@ -10,7 +10,7 @@ from gi.repository import GLib
 
 from briar_gtk.actions.actions import Actions
 from briar_gtk.actions.prefixes import WINDOW_PREFIX
-from briar_gtk.containers.main_window import MainWindowContainer
+from briar_gtk.views.main_window import MainWindowView
 from briar_gtk.define import APP
 
 
@@ -64,7 +64,7 @@ class WindowActions(Actions):
 
     # pylint: disable=unused-argument
     def _back_to_sidebar(self, action, parameter):
-        if isinstance(self.widget.current_container, MainWindowContainer):
+        if isinstance(self.widget.current_container, MainWindowView):
             self.widget.current_container.show_sidebar()
 
     # pylint: disable=unused-argument
diff --git a/briar-gtk/briar_gtk/views/__init__.py b/briar-gtk/briar_gtk/views/__init__.py
new file mode 100644
index 0000000..687b248
--- /dev/null
+++ b/briar-gtk/briar_gtk/views/__init__.py
@@ -0,0 +1,6 @@
+# Copyright (c) 2020 Nico Alt
+# SPDX-License-Identifier: AGPL-3.0-only
+# License-Filename: LICENSE.md
+"""
+Views displaying data in Briar GTK
+"""
diff --git a/briar-gtk/briar_gtk/containers/main_window.py b/briar-gtk/briar_gtk/views/main_window.py
similarity index 97%
rename from briar-gtk/briar_gtk/containers/main_window.py
rename to briar-gtk/briar_gtk/views/main_window.py
index d311c1a..b35831b 100644
--- a/briar-gtk/briar_gtk/containers/main_window.py
+++ b/briar-gtk/briar_gtk/views/main_window.py
@@ -5,22 +5,23 @@
 # Initial version based on GNOME Fractal
 # https://gitlab.gnome.org/GNOME/fractal/-/tags/4.2.2
 
+import os
+
 from gettext import gettext as _
 from gi.repository import Gio, GLib, Gtk
 
 from briar_wrapper.models.contacts import Contacts
 from briar_wrapper.models.private_chat import PrivateChat
 
-from briar_gtk.container import Container
 from briar_gtk.containers.private_chat import PrivateChatContainer
-from briar_gtk.define import APP, NOTIFICATION_CONTACT_ADDED
+from briar_gtk.define import APP, NOTIFICATION_CONTACT_ADDED, RESOURCES_DIR
 from briar_gtk.define import NOTIFICATION_PRIVATE_MESSAGE
 from briar_gtk.widgets.about_dialog import AboutDialogWidget
 from briar_gtk.widgets.contact_row import ContactRowWidget
 from briar_gtk.widgets.edit_dialog import EditDialog
 
 
-class MainWindowContainer(Container):
+class MainWindowView(Gtk.Overlay):
 
     CONTAINER_UI = "main_window.ui"
     MAIN_MENU_UI = "main_menu.ui"
@@ -31,10 +32,16 @@ class MainWindowContainer(Container):
 
     def __init__(self):
         super().__init__()
+        self.builder = Gtk.Builder()
         self._signals = list()
         self._setup_view()
         self._load_content()
 
+    def _add_from_resource(self, ui_filename):
+        self.builder.add_from_resource(
+            os.path.join(RESOURCES_DIR, ui_filename)
+        )
+
     @property
     def main_window_leaflet(self):
         return self.builder.get_object("main_window_leaflet")
diff --git a/briar-gtk/briar_gtk/window.py b/briar-gtk/briar_gtk/window.py
index 5c17bcb..54c868d 100644
--- a/briar-gtk/briar_gtk/window.py
+++ b/briar-gtk/briar_gtk/window.py
@@ -7,7 +7,7 @@ from gi.repository import Gio, Gtk
 
 from briar_gtk.actions.window import WindowActions
 from briar_gtk.containers.add_contact import AddContactContainer
-from briar_gtk.containers.main_window import MainWindowContainer
+from briar_gtk.views.main_window import MainWindowView
 from briar_gtk.containers.startup import StartupContainer
 from briar_gtk.define import APP, APPLICATION_ID, APPLICATION_NAME
 from briar_gtk.define import NOTIFICATION_CONTACT_ADDED
@@ -99,7 +99,7 @@ class Window(Gtk.ApplicationWindow):
         self._setup_container(StartupContainer(self))
 
     def _setup_main_container(self):
-        self._setup_container(MainWindowContainer())
+        self._setup_container(MainWindowView())
 
     def _setup_add_contact_container(self):
         self._setup_container(AddContactContainer())
-- 
GitLab