From 8b0d5907e1f03a370a22ec8c0849ccf3da01ac9b Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Fri, 27 Mar 2020 12:00:00 +0000
Subject: [PATCH] Move about dialog into own widget class

---
 briar-gtk/briar_gtk/containers/main_window.py | 39 ++----------
 briar-gtk/briar_gtk/widgets/about_dialog.py   | 59 +++++++++++++++++++
 2 files changed, 64 insertions(+), 34 deletions(-)
 create mode 100644 briar-gtk/briar_gtk/widgets/about_dialog.py

diff --git a/briar-gtk/briar_gtk/containers/main_window.py b/briar-gtk/briar_gtk/containers/main_window.py
index 150a03c..e49c422 100644
--- a/briar-gtk/briar_gtk/containers/main_window.py
+++ b/briar-gtk/briar_gtk/containers/main_window.py
@@ -5,23 +5,21 @@
 # Initial version based on GNOME Fractal
 # https://gitlab.gnome.org/GNOME/fractal/-/tags/4.2.2
 
-from gettext import gettext as _
-
 from gi.repository import GLib
 
 from briar_wrapper.models.contacts import Contacts
 
 from briar_gtk.container import Container
-from briar_gtk.widgets.contact_row import ContactRowWidget
 from briar_gtk.containers.private_chat import PrivateChatContainer
 from briar_gtk.define import APP
+from briar_gtk.widgets.about_dialog import AboutDialogWidget
+from briar_gtk.widgets.contact_row import ContactRowWidget
 
 
 class MainWindowContainer(Container):
 
     CONTAINER_UI = "main_window.ui"
     MENU_UI = "main_menu.ui"
-    ABOUT_UI = "about_dialog.ui"
 
     def __init__(self):
         super().__init__()
@@ -64,37 +62,10 @@ class MainWindowContainer(Container):
     def chat_entry(self):
         return self.builder.get_object("chat_entry")
 
-    # pylint: disable=line-too-long
-    def open_about_page(self):
-        self._add_from_resource(self.ABOUT_UI)
-        about_dialog = self.builder.get_object("about_dialog")
-        about_dialog.set_transient_for(APP().window)
-
-        code_use_title = _("Using code by")
-        code_use_list = [
-            "GNOME Fractal https://wiki.gnome.org/Apps/Fractal",
-            "GNOME Lollypop https://wiki.gnome.org/Apps/Lollypop",
-        ]
-        about_dialog.add_credit_section(
-            code_use_title, code_use_list
-        )
-
-        briar_functionality_title = _("Briar functionality by")
-        briar_functionality_list = [
-            "Briar REST API https://code.briarproject.org/briar/briar/tree/master/briar-headless",  # noqa
-            "Briar Python Wrapper https://code.briarproject.org/briar/python-briar-wrapper",  # noqa
-        ]
-        about_dialog.add_credit_section(
-            briar_functionality_title, briar_functionality_list
-        )
-
-        about_dialog.connect("response", self._on_about_response)
-        about_dialog.show()
-
     @staticmethod
-    # pylint: disable=unused-argument
-    def _on_about_response(dialog, response_id):
-        dialog.destroy()
+    def open_about_page():
+        about_dialog = AboutDialogWidget()
+        about_dialog.show()
 
     def open_private_chat(self, contact_id):
         contact_name = self._get_contact_name(contact_id)
diff --git a/briar-gtk/briar_gtk/widgets/about_dialog.py b/briar-gtk/briar_gtk/widgets/about_dialog.py
new file mode 100644
index 0000000..e51daac
--- /dev/null
+++ b/briar-gtk/briar_gtk/widgets/about_dialog.py
@@ -0,0 +1,59 @@
+# Copyright (c) 2020 Nico Alt
+# SPDX-License-Identifier: AGPL-3.0-only
+# License-Filename: LICENSE.md
+
+from gettext import gettext as _
+
+from gi.repository import Gtk
+
+from briar_gtk.define import APP, RESOURCES_DIR
+
+
+# pylint: disable=too-few-public-methods
+class AboutDialogWidget():
+
+    ABOUT_UI = "about_dialog.ui"
+
+    def __init__(self):
+        self._about_dialog = self._load_from_builder()
+        self._extend_about_dialog()
+
+    def show(self):
+        self._about_dialog.show()
+
+    def _load_from_builder(self):
+        builder = Gtk.Builder()
+        builder.add_from_resource(RESOURCES_DIR + self.ABOUT_UI)
+        return builder.get_object("about_dialog")
+
+    def _extend_about_dialog(self):
+        self._about_dialog.set_transient_for(APP().window)
+        self._add_code_section()
+        self._add_briar_section()
+        self._about_dialog.connect("response", self._on_about_response)
+
+    def _add_code_section(self):
+        code_use_title = _("Using code by")
+        code_use_list = [
+            "GNOME Fractal https://wiki.gnome.org/Apps/Fractal",
+            "GNOME Lollypop https://wiki.gnome.org/Apps/Lollypop",
+        ]
+        self._about_dialog.add_credit_section(
+            code_use_title, code_use_list
+        )
+
+    # pylint: disable=line-too-long
+    def _add_briar_section(self):
+        briar_functionality_title = _("Briar functionality by")
+        briar_functionality_list = [
+            "Briar REST API https://code.briarproject.org/briar/briar/tree/master/briar-headless",  # noqa
+            "Briar Python Wrapper https://code.briarproject.org/briar/python-briar-wrapper",  # noqa
+        ]
+        self._about_dialog.add_credit_section(
+            briar_functionality_title, briar_functionality_list
+        )
+
+    @staticmethod
+    # pylint: disable=unused-argument
+    def _on_about_response(dialog, response_id):
+        dialog.destroy()
-- 
GitLab