From 798ce197f9ba5ca0d0e23855e8d6eda548d29c0d Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Sun, 31 Jul 2016 19:21:04 +0200
Subject: [PATCH] Add toolbar to main window

---
 src/sakia/gui/agent/controller.py       | 13 ++++-
 src/sakia/gui/main_window/controller.py | 16 +++++--
 src/sakia/gui/main_window/mainwindow.ui |  2 +-
 src/sakia/gui/toolbar/controller.py     | 64 ++++++-------------------
 src/sakia/gui/toolbar/view.py           | 35 +++++++++++++-
 5 files changed, 71 insertions(+), 59 deletions(-)

diff --git a/src/sakia/gui/agent/controller.py b/src/sakia/gui/agent/controller.py
index 645bda03..334ad3b7 100644
--- a/src/sakia/gui/agent/controller.py
+++ b/src/sakia/gui/agent/controller.py
@@ -18,5 +18,14 @@ class AgentController(QObject):
         self.model = model
 
     def attach(self, controller):
-        controller.setParent(self)
-        return controller
+        """
+        Attach an agent controller to this controller
+        :param AgentController controller: the attached controller
+        :return: the attached controller
+        :rtype: AgentController
+        """
+        if controller:
+            controller.setParent(self)
+            return controller
+        else:
+            return None
diff --git a/src/sakia/gui/main_window/controller.py b/src/sakia/gui/main_window/controller.py
index b80d1713..a09634f3 100644
--- a/src/sakia/gui/main_window/controller.py
+++ b/src/sakia/gui/main_window/controller.py
@@ -18,6 +18,8 @@ from ..agent.controller import AgentController
 from .view import MainWindowView
 from .model import MainWindowModel
 from ..status_bar.controller import StatusBarController
+from ..toolbar.controller import ToolbarController
+from ..navigation.controller import NavigationController
 
 
 class MainWindowController(AgentController):
@@ -25,12 +27,13 @@ class MainWindowController(AgentController):
     classdocs
     """
 
-    def __init__(self, view, model, password_asker, status_bar):
+    def __init__(self, view, model, password_asker, status_bar, toolbar):
         """
         Init
         :param MainWindowView view: the ui of the mainwindow agent
         :param sakia.gui.main_window.model.MainWindowModel: the model of the mainwindow agent
         :param sakia.gui.status_bar.controller.StatusBarController: the controller of the status bar agent
+        :param sakia.gui.toolbar.controller.ToolbarController: the controller of the toolbar agent
 
         :param PasswordAsker password_asker: the password asker of the application
         :type: sakia.core.app.Application
@@ -39,8 +42,8 @@ class MainWindowController(AgentController):
         super().__init__(None, view, model)
         self.initialized = False
         self.password_asker = password_asker
-        if status_bar:
-            self.status_bar = self.attach(status_bar)
+        self.status_bar = self.attach(status_bar)
+        self.toolbar = self.attach(toolbar)
 
         QApplication.setWindowIcon(QIcon(":/icons/sakia_logo"))
 
@@ -48,9 +51,12 @@ class MainWindowController(AgentController):
     def startup(cls, app):
         view = MainWindowView(None)
         model = MainWindowModel(None, app)
-        main_window = cls(view, model,PasswordAskerDialog(None), None)
+        password_asker = PasswordAskerDialog(None)
+        main_window = cls(view, model, password_asker, None, None)
         main_window.status_bar = main_window.attach(StatusBarController.create(main_window, app))
-        main_window.view.setStatusBar(main_window.status_bar.view)
+        view.setStatusBar(main_window.status_bar.view)
+        main_window.toolbar = main_window.attach(ToolbarController.create(main_window, password_asker))
+        main_window.toolbar.view.setParent(view.centralwidget)
         #app.version_requested.connect(main_window.latest_version_requested)
         #app.account_imported.connect(main_window.import_account_accepted)
         #app.account_changed.connect(main_window.change_account)
diff --git a/src/sakia/gui/main_window/mainwindow.ui b/src/sakia/gui/main_window/mainwindow.ui
index b689d2b8..5c334c90 100644
--- a/src/sakia/gui/main_window/mainwindow.ui
+++ b/src/sakia/gui/main_window/mainwindow.ui
@@ -138,7 +138,7 @@
   </action>
  </widget>
  <resources>
-  <include location="../icons/icons.qrc"/>
+  <include location="../../../../res/icons/icons.qrc"/>
  </resources>
  <connections/>
  <slots>
diff --git a/src/sakia/gui/toolbar/controller.py b/src/sakia/gui/toolbar/controller.py
index 78b4ab0b..6b538c7d 100644
--- a/src/sakia/gui/toolbar/controller.py
+++ b/src/sakia/gui/toolbar/controller.py
@@ -1,72 +1,36 @@
-from PyQt5.QtWidgets import QFrame, QAction, QMenu, QDialog, QMessageBox
-from PyQt5.QtGui import QIcon
-from PyQt5.QtCore import QObject, QT_TRANSLATE_NOOP, Qt
+from PyQt5.QtWidgets import QDialog, QMessageBox
+from PyQt5.QtCore import QT_TRANSLATE_NOOP, Qt
+from ..agent.controller import AgentController
 from .model import ToolbarModel
 from .view import ToolbarView
-from .toolbar_uic import Ui_SakiaToolbar
 from ...tools.decorators import asyncify, once_at_a_time, cancel_once_task
 from ..widgets.dialogs import QAsyncMessageBox, QAsyncFileDialog, dialog_async_exec
 from ..widgets import toast
 import logging
 
 
-class ToolbarController(QObject):
+class ToolbarController(AgentController):
     """
     The navigation panel
     """
-    _action_showinfo_text = QT_TRANSLATE_NOOP("CommunityWidget", "Show informations")
-    _action_explore_text = QT_TRANSLATE_NOOP("CommunityWidget", "Explore the Web of Trust")
-    _action_publish_uid_text = QT_TRANSLATE_NOOP("CommunityWidget", "Publish UID")
-    _action_revoke_uid_text = QT_TRANSLATE_NOOP("CommunityWidget", "Revoke UID")
 
-    def __init__(self, view, model, account, community, password_asker):
+    def __init__(self, parent, view, model, password_asker):
         """
-
+        :param sakia.gui.agent.controller.AgentController parent: the parent
         :param sakia.gui.toolbar.view.ToolbarView view:
         :param sakia.gui.toolbar.model.ToolbarModel model:
         """
-        self.view = view
-        self.model = model
-        self.account = account
-        self.community = community
+        super().__init__(parent, view, model)
         self.password_asker = password_asker
 
-        tool_menu = QMenu(self.tr("Tools"), self.toolbutton_menu)
-        self.toolbutton_menu.setMenu(tool_menu)
-
-        self.action_publish_uid = QAction(self.tr(ToolbarController._action_publish_uid_text), self)
-        self.action_revoke_uid = QAction(self.tr(ToolbarController._action_revoke_uid_text), self)
-        self.action_showinfo = QAction(self.tr(ToolbarController._action_showinfo_text), self)
-        self.action_explorer = QAction(self.tr(ToolbarController._action_explore_text), self)
-
-        action_showinfo = QAction(self.tr("Show informations"), self.toolbutton_menu)
-        action_showinfo.triggered.connect(lambda: self.show_closable_tab(self.tab_informations,
-                                                                         QIcon(":/icons/informations_icon"),
-                                                                         self.tr("Informations")))
-        tool_menu.addAction(action_showinfo)
-
-        action_showexplorer = QAction(self.tr("Show explorer"), self.toolbutton_menu)
-        action_showexplorer.triggered.connect(lambda: self.show_closable_tab(self.tab_explorer.widget,
-                                                                             QIcon(":/icons/explorer_icon"),
-                                                                             self.tr("Explorer")))
-        tool_menu.addAction(action_showexplorer)
-
-        menu_advanced = QMenu(self.tr("Advanced"), self.toolbutton_menu)
-        action_gen_revokation = QAction(self.tr("Save revokation document"), menu_advanced)
-        action_gen_revokation.triggered.connect(self.action_save_revokation)
-        menu_advanced.addAction(action_gen_revokation)
-        tool_menu.addMenu(menu_advanced)
-
-        self.action_publish_uid.triggered.connect(self.publish_uid)
-        tool_menu.addAction(self.action_publish_uid)
-
-        self.button_membership.clicked.connect(self.send_membership_demand)
-
-        self.community_view.button_certification.clicked.connect(self.open_certification_dialog)
-        self.community_view.button_send_money.clicked.connect(self.open_transfer_money_dialog)
+        self.view.button_certification.clicked.connect(self.open_certification_dialog)
+        self.view.button_send_money.clicked.connect(self.open_transfer_money_dialog)
+        self.view.action_gen_revokation.triggered.connect(self.action_save_revokation)
+        self.view.action_publish_uid.triggered.connect(self.publish_uid)
+        self.view.button_membership.clicked.connect(self.send_membership_demand)
 
     @classmethod
-    def create(cls, parent):
+    def create(cls, parent, password_asker):
         """
         Instanciate a navigation agent
         :param sakia.gui.agent.controller.AgentController parent:
@@ -75,7 +39,7 @@ class ToolbarController(QObject):
         """
         view = ToolbarView(parent.view)
         model = ToolbarModel(None)
-        toolbar = cls(view, model)
+        toolbar = cls(parent, view, model, password_asker)
         model.setParent(toolbar)
         return toolbar
 
diff --git a/src/sakia/gui/toolbar/view.py b/src/sakia/gui/toolbar/view.py
index 99787a63..976559ec 100644
--- a/src/sakia/gui/toolbar/view.py
+++ b/src/sakia/gui/toolbar/view.py
@@ -1,4 +1,6 @@
-from PyQt5.QtWidgets import QFrame
+from PyQt5.QtWidgets import QFrame, QAction, QMenu, QDialog, QMessageBox
+from PyQt5.QtGui import QIcon
+from PyQt5.QtCore import QObject, QT_TRANSLATE_NOOP, Qt
 from .toolbar_uic import Ui_SakiaToolbar
 
 
@@ -6,7 +8,38 @@ class ToolbarView(QFrame, Ui_SakiaToolbar):
     """
     The model of Navigation agent
     """
+    _action_showinfo_text = QT_TRANSLATE_NOOP("ToolbarView", "Show informations")
+    _action_explore_text = QT_TRANSLATE_NOOP("ToolbarView", "Explore the Web of Trust")
+    _action_publish_uid_text = QT_TRANSLATE_NOOP("ToolbarView", "Publish UID")
+    _action_revoke_uid_text = QT_TRANSLATE_NOOP("ToolbarView", "Revoke UID")
 
     def __init__(self, parent):
         super().__init__(parent)
         self.setupUi(self)
+
+        tool_menu = QMenu(self.tr("Tools"), self.toolbutton_menu)
+        self.toolbutton_menu.setMenu(tool_menu)
+
+        self.action_publish_uid = QAction(self.tr(ToolbarView._action_publish_uid_text), self)
+        self.action_revoke_uid = QAction(self.tr(ToolbarView._action_revoke_uid_text), self)
+        self.action_showinfo = QAction(self.tr(ToolbarView._action_showinfo_text), self)
+        self.action_explorer = QAction(self.tr(ToolbarView._action_explore_text), self)
+
+        action_showinfo = QAction(self.tr("Show informations"), self.toolbutton_menu)
+        action_showinfo.triggered.connect(lambda: self.show_closable_tab(self.tab_informations,
+                                                                         QIcon(":/icons/informations_icon"),
+                                                                         self.tr("Informations")))
+        tool_menu.addAction(action_showinfo)
+
+        action_showexplorer = QAction(self.tr("Show explorer"), self.toolbutton_menu)
+        action_showexplorer.triggered.connect(lambda: self.show_closable_tab(self.tab_explorer.widget,
+                                                                             QIcon(":/icons/explorer_icon"),
+                                                                             self.tr("Explorer")))
+        tool_menu.addAction(action_showexplorer)
+
+        menu_advanced = QMenu(self.tr("Advanced"), self.toolbutton_menu)
+        self.action_gen_revokation = QAction(self.tr("Save revokation document"), menu_advanced)
+        menu_advanced.addAction(self.action_gen_revokation)
+        tool_menu.addMenu(menu_advanced)
+        tool_menu.addAction(self.action_publish_uid)
+
-- 
GitLab