1# -*- coding: utf-8 -*-
2
3# Copyright (c) 2007 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4#
5
6"""
7Module implementing the About plugin.
8"""
9
10from PyQt5.QtCore import QObject
11from PyQt5.QtWidgets import QAction
12
13import UI.Info
14import UI.PixmapCache
15
16from E5Gui.E5Action import E5Action
17from E5Gui import E5MessageBox
18
19# Start-Of-Header
20name = "About Plugin"
21author = "Detlev Offenbach <detlev@die-offenbachs.de>"
22autoactivate = True
23deactivateable = True
24version = UI.Info.VersionOnly
25className = "AboutPlugin"
26packageName = "__core__"
27shortDescription = "Show the About dialogs."
28longDescription = """This plugin shows the About dialogs."""
29pyqtApi = 2
30# End-Of-Header
31
32error = ""
33
34
35class AboutPlugin(QObject):
36    """
37    Class implementing the About plugin.
38    """
39    def __init__(self, ui):
40        """
41        Constructor
42
43        @param ui reference to the user interface object (UI.UserInterface)
44        """
45        super().__init__(ui)
46        self.__ui = ui
47
48        self.__aboutDialog = None
49
50    def activate(self):
51        """
52        Public method to activate this plugin.
53
54        @return tuple of None and activation status (boolean)
55        """
56        self.__initActions()
57        self.__initMenu()
58
59        return None, True
60
61    def deactivate(self):
62        """
63        Public method to deactivate this plugin.
64        """
65        menu = self.__ui.getMenu("help")
66        if menu:
67            menu.removeAction(self.aboutAct)
68            menu.removeAction(self.aboutQtAct)
69        acts = [self.aboutAct, self.aboutQtAct]
70        self.__ui.removeE5Actions(acts, 'ui')
71
72    def __initActions(self):
73        """
74        Private method to initialize the actions.
75        """
76        acts = []
77
78        self.aboutAct = E5Action(
79            self.tr('About {0}').format(UI.Info.Program),
80            UI.PixmapCache.getIcon("helpAbout"),
81            self.tr('&About {0}').format(UI.Info.Program),
82            0, 0, self, 'about_eric')
83        self.aboutAct.setStatusTip(self.tr(
84            'Display information about this software'))
85        self.aboutAct.setWhatsThis(self.tr(
86            """<b>About {0}</b>"""
87            """<p>Display some information about this software.</p>"""
88        ).format(UI.Info.Program))
89        self.aboutAct.triggered.connect(self.__about)
90        self.aboutAct.setMenuRole(QAction.MenuRole.AboutRole)
91        acts.append(self.aboutAct)
92
93        self.aboutQtAct = E5Action(
94            self.tr('About Qt'),
95            UI.PixmapCache.getIcon("helpAboutQt"),
96            self.tr('About &Qt'), 0, 0, self, 'about_qt')
97        self.aboutQtAct.setStatusTip(
98            self.tr('Display information about the Qt toolkit'))
99        self.aboutQtAct.setWhatsThis(self.tr(
100            """<b>About Qt</b>"""
101            """<p>Display some information about the Qt toolkit.</p>"""
102        ))
103        self.aboutQtAct.triggered.connect(self.__aboutQt)
104        self.aboutQtAct.setMenuRole(QAction.MenuRole.AboutQtRole)
105        acts.append(self.aboutQtAct)
106
107        self.__ui.addE5Actions(acts, 'ui')
108
109    def __initMenu(self):
110        """
111        Private method to add the actions to the right menu.
112        """
113        menu = self.__ui.getMenu("help")
114        if menu:
115            act = self.__ui.getMenuAction("help", "show_versions")
116            if act:
117                menu.insertAction(act, self.aboutAct)
118                menu.insertAction(act, self.aboutQtAct)
119            else:
120                menu.addAction(self.aboutAct)
121                menu.addAction(self.aboutQtAct)
122
123    def __about(self):
124        """
125        Private slot to handle the About dialog.
126        """
127        from AboutPlugin.AboutDialog import AboutDialog
128        if self.__aboutDialog is None:
129            self.__aboutDialog = AboutDialog(self.__ui)
130        self.__aboutDialog.show()
131
132    def __aboutQt(self):
133        """
134        Private slot to handle the About Qt dialog.
135        """
136        E5MessageBox.aboutQt(self.__ui, UI.Info.Program)
137