From c255b8d515520f58b681e8a9e5a110b523f27b59 Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Tue, 26 Mar 2019 00:21:27 +0100
Subject: [PATCH] Split up containers

---
 src/briar/gtk/container.py          | 29 +++-------------
 src/briar/gtk/containers/main.py    | 18 ++++++++++
 src/briar/gtk/containers/startup.py | 51 +++++++++++++++++++++++++++++
 src/briar/gtk/window.py             | 43 ++++++++++++++++--------
 4 files changed, 103 insertions(+), 38 deletions(-)
 create mode 100644 src/briar/gtk/containers/main.py
 create mode 100644 src/briar/gtk/containers/startup.py

diff --git a/src/briar/gtk/container.py b/src/briar/gtk/container.py
index 0b1a1ae..a54554c 100644
--- a/src/briar/gtk/container.py
+++ b/src/briar/gtk/container.py
@@ -2,9 +2,6 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 # License-Filename: LICENSE.md
 
-from briar.gtk.define import App
-from briar.gtk.logger import Logger
-
 import gi
 gi.require_version('Gtk', '3.0')
 from gi.repository import Gtk
@@ -14,28 +11,12 @@ class Container(Gtk.Overlay):
 
     def __init__(self):
         Gtk.Overlay.__init__(self)
+        self.builder = Gtk.Builder()
         self.__setup_view()
+        self.__register_signals()
 
     def __setup_view(self):
-        Logger.debug("Api has account: %s", App().api.has_account())
-        self.builder = Gtk.Builder()
-        if not App().api.has_account():
-            self.builder.add_from_resource("/app/briar/gtk/ui/setup.ui")
-            self.add(self.builder.get_object("setup"))
-        else:
-            self.builder.add_from_resource("/app/briar/gtk/ui/login.ui")
-            self.add(self.builder.get_object("login"))
-        self.builder.connect_signals(self)
-
-    def on_username_button_clicked(self, button):
-        self.builder.get_object("username_grid").set_visible(False)
-        self.builder.get_object("password_grid").set_visible(True)
-        self.username = self.builder.get_object("username_entry").get_text()
-
-    def on_password_button_clicked(self, button):
-        password = self.builder.get_object("password_entry").get_text()
-        App().api.register((self.username, password))  # TODO: callback
+        pass
 
-    def on_login_pressed(self, button):
-        password = self.builder.get_object("password_entry").get_text()
-        App().api.login(password)  # TODO: callback
+    def __register_signals(self):
+        pass
diff --git a/src/briar/gtk/containers/main.py b/src/briar/gtk/containers/main.py
new file mode 100644
index 0000000..de6b33b
--- /dev/null
+++ b/src/briar/gtk/containers/main.py
@@ -0,0 +1,18 @@
+# Copyright (c) 2019 Nico Alt
+# SPDX-License-Identifier: AGPL-3.0-only
+# License-Filename: LICENSE.md
+
+from briar.gtk.container import Container
+
+
+class MainContainer(Container):
+
+    def __init__(self):
+        super().__init__()
+        self.__setup_view()
+        self.__register_signals()
+
+    def __setup_view(self):
+        self.builder.add_from_resource("/app/briar/gtk/ui/main.ui")
+        self.add(self.builder.get_object("main"))
+        self.builder.connect_signals(self)
diff --git a/src/briar/gtk/containers/startup.py b/src/briar/gtk/containers/startup.py
new file mode 100644
index 0000000..2667a6e
--- /dev/null
+++ b/src/briar/gtk/containers/startup.py
@@ -0,0 +1,51 @@
+# Copyright (c) 2019 Nico Alt
+# SPDX-License-Identifier: AGPL-3.0-only
+# License-Filename: LICENSE.md
+
+from briar.gtk.container import Container
+from briar.gtk.define import App
+
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import GObject, Gtk
+
+
+class StartupContainer(Container):
+
+    def __init__(self):
+        super().__init__()
+        self.__setup_view()
+        self.__register_signals()
+
+    def on_username_button_clicked(self, button):
+        self.builder.get_object("username_grid").set_visible(False)
+        self.builder.get_object("password_grid").set_visible(True)
+        self.username = self.builder.get_object("username_entry").get_text()
+
+    def on_password_button_clicked(self, button):
+        password = self.builder.get_object("password_entry").get_text()
+        App().api.register((self.username, password),
+                           self.__startup_completed)
+
+    def on_login_pressed(self, button):
+        password = self.builder.get_object("password_entry").get_text()
+        App().api.login(password, self.__startup_completed)
+
+    def __setup_view(self):
+        self.set_hexpand(True)
+        self.set_vexpand(True)
+        if not App().api.has_account():
+            self.builder.add_from_resource("/app/briar/gtk/ui/setup.ui")
+            self.add(self.builder.get_object("setup"))
+        else:
+            self.builder.add_from_resource("/app/briar/gtk/ui/login.ui")
+            self.add(self.builder.get_object("login"))
+        self.builder.connect_signals(self)
+
+    def __register_signals(self):
+        GObject.signal_new("briar_startup_completed", Gtk.Overlay,
+                           GObject.SignalFlags.RUN_LAST, GObject.TYPE_BOOLEAN,
+                           (GObject.TYPE_STRING,))
+
+    def __startup_completed(self, succeded=True):
+        self.emit("briar_startup_completed", ("succeded",))
diff --git a/src/briar/gtk/window.py b/src/briar/gtk/window.py
index 2f7d7a4..f44cc8b 100644
--- a/src/briar/gtk/window.py
+++ b/src/briar/gtk/window.py
@@ -2,7 +2,8 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 # License-Filename: LICENSE.md
 
-from briar.gtk.container import Container
+from briar.gtk.containers.main import MainContainer
+from briar.gtk.containers.startup import StartupContainer
 from briar.gtk.define import App
 
 import gi
@@ -13,9 +14,7 @@ from gi.repository import Gtk, Gdk, GLib
 class Window(Gtk.ApplicationWindow):
 
     def __init__(self):
-        Gtk.ApplicationWindow.__init__(self,
-                                       application=App(),
-                                       title="Briar",
+        Gtk.ApplicationWindow.__init__(self, application=App(), title="Briar",
                                        icon_name="app.briar.gtk")
         self.__setup_content()
 
@@ -24,16 +23,9 @@ class Window(Gtk.ApplicationWindow):
         return self.__container
 
     def __setup_content(self):
-        self.__container = Container()
-        self.__container.show()
-        self.__container.set_hexpand(True)
-        self.__container.set_vexpand(True)
-        self.__vgrid = Gtk.Grid()
-        self.__vgrid.set_orientation(Gtk.Orientation.VERTICAL)
-        self.__vgrid.show()
-        self.__vgrid.add(self.__container)
-        self.add(self.__vgrid)
-        self.__setup_size((800, 600))
+        self.__setup_size((800, 600))  # TODO: do properly (constants, save)
+        self.__setup_grid()
+        self.__setup_startup_container()
 
     def __setup_size(self, size):
         if len(size) == 2 and\
@@ -41,3 +33,26 @@ class Window(Gtk.ApplicationWindow):
            isinstance(size[1], int):
             self.resize(size[0], size[1])
 
+    def __setup_grid(self):
+        self.__grid = Gtk.Grid()
+        self.__grid.set_orientation(Gtk.Orientation.HORIZONTAL)
+        self.__grid.show()
+        self.add(self.__grid)
+
+    def __setup_startup_container(self):
+        self.__container = StartupContainer()
+        self.__container.show()
+
+        self.__container.connect("briar_startup_completed",
+                                 self.__on_startup_completed)
+        self.__grid.add(self.__container)
+
+    def __on_startup_completed(self):
+        self.__grid.remove_all()
+        self.__setup_main_container(self)
+
+    def __setup_main_container(self):
+        self.__container = MainContainer()
+        self.__container.show()
+        self.__grid.add(self.__container)
+
-- 
GitLab