UI/UserInterface.py

changeset 2182
fc3210851b07
parent 2155
b2aba7aeab3a
child 2184
ef10859837c1
diff -r 8f6393810fee -r fc3210851b07 UI/UserInterface.py
--- a/UI/UserInterface.py	Fri Nov 02 13:16:19 2012 +0100
+++ b/UI/UserInterface.py	Sat Nov 03 15:55:07 2012 +0100
@@ -267,6 +267,8 @@
         # Create the main window now so that we can connect QActions to it.
         logging.debug("Creating Layout...")
         self.__createLayout(debugServer)
+        self.__currentRightWidget = None
+        self.__currentBottomWidget = None
         
         # Generate the debugger part of the ui
         logging.debug("Creating Debugger UI...")
@@ -383,7 +385,7 @@
         
         self.debuggerUI.resetUI.connect(self.viewmanager.handleResetUI)
         self.debuggerUI.resetUI.connect(self.debugViewer.handleResetUI)
-        self.debuggerUI.resetUI.connect(self.__setEditProfile)
+        self.debuggerUI.resetUI.connect(self.__debuggingDone)
         self.debuggerUI.debuggingStarted.connect(self.browser.handleProgramChange)
         self.debuggerUI.debuggingStarted.connect(
             self.debugViewer.exceptionLogger.debuggingStarted)
@@ -619,11 +621,11 @@
         
         @param debugServer reference to the debug server object
         """
-        # Create the vertical toolbox
-        self.vToolboxDock = self.__createDockWindow("vToolboxDock")
-        self.vToolbox = E5VerticalToolBox(self.vToolboxDock)
-        self.__setupDockWindow(self.vToolboxDock, Qt.LeftDockWidgetArea,
-                               self.vToolbox, self.trUtf8("Vertical Toolbox"))
+        # Create the left toolbox
+        self.lToolboxDock = self.__createDockWindow("lToolboxDock")
+        self.lToolbox = E5VerticalToolBox(self.lToolboxDock)
+        self.__setupDockWindow(self.lToolboxDock, Qt.LeftDockWidgetArea,
+                               self.lToolbox, self.trUtf8("Left Toolbox"))
         
         # Create the horizontal toolbox
         self.hToolboxDock = self.__createDockWindow("hToolboxDock")
@@ -631,40 +633,46 @@
         self.__setupDockWindow(self.hToolboxDock, Qt.BottomDockWidgetArea,
                                self.hToolbox, self.trUtf8("Horizontal Toolbox"))
         
+        # Create the right toolbox
+        self.rToolboxDock = self.__createDockWindow("rToolboxDock")
+        self.rToolbox = E5VerticalToolBox(self.rToolboxDock)
+        self.__setupDockWindow(self.rToolboxDock, Qt.RightDockWidgetArea,
+                               self.rToolbox, self.trUtf8("Right Toolbox"))
+        
         # Create the project browser
         self.projectBrowser = ProjectBrowser(self.project, None,
             embeddedBrowser=(self.embeddedFileBrowser == 2))
-        self.vToolbox.addItem(self.projectBrowser,
+        self.lToolbox.addItem(self.projectBrowser,
                               UI.PixmapCache.getIcon("projectViewer.png"),
                               self.trUtf8("Project-Viewer"))
 
         # Create the multi project browser
         self.multiProjectBrowser = MultiProjectBrowser(self.multiProject)
-        self.vToolbox.addItem(self.multiProjectBrowser,
+        self.lToolbox.addItem(self.multiProjectBrowser,
                               UI.PixmapCache.getIcon("multiProjectViewer.png"),
                               self.trUtf8("Multiproject-Viewer"))
 
         # Create the template viewer part of the user interface
         self.templateViewer = TemplateViewer(None,
                                              self.viewmanager)
-        self.vToolbox.addItem(self.templateViewer,
+        self.lToolbox.addItem(self.templateViewer,
                               UI.PixmapCache.getIcon("templateViewer.png"),
                               self.trUtf8("Template-Viewer"))
 
         # Create the debug viewer maybe without the embedded shell
-        self.debugViewerDock = self.__createDockWindow("DebugViewerDock")
         self.debugViewer = DebugViewer(debugServer, True, self.viewmanager,
-            self.debugViewerDock,
+            None,
             embeddedShell=self.embeddedShell,
             embeddedBrowser=(self.embeddedFileBrowser == 1))
-        self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
-                             self.debugViewer, self.trUtf8("Debug-Viewer"))
+        self.rToolbox.addItem(self.debugViewer,
+                              UI.PixmapCache.getIcon("debugViewer.png"),
+                              self.trUtf8("Debug-Viewer"))
 
         # Create the chat part of the user interface
-        self.cooperationDock = self.__createDockWindow("CooperationDock")
-        self.cooperation = ChatWidget(parent=self.cooperationDock)
-        self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
-                             self.cooperation, self.trUtf8("Cooperation"))
+        self.cooperation = ChatWidget()
+        self.rToolbox.addItem(self.cooperation,
+                              UI.PixmapCache.getIcon("cooperation.png"),
+                              self.trUtf8("Cooperation"))
         
         # Create the terminal part of the user interface
         self.terminalAssembly = TerminalAssembly(self.viewmanager)
@@ -685,9 +693,6 @@
                               UI.PixmapCache.getIcon("logViewer.png"),
                               self.trUtf8("Log-Viewer"))
 
-        self.windows = [None, None, self.debugViewerDock, None, None,
-                        None, None, None, None, self.cooperationDock]
-
         if self.embeddedShell:
             self.shell = self.debugViewer.shell
         else:
@@ -701,7 +706,7 @@
         if self.embeddedFileBrowser == 0:   # separate window
             # Create the file browser
             self.browser = Browser()
-            self.vToolbox.addItem(self.browser,
+            self.lToolbox.addItem(self.browser,
                                   UI.PixmapCache.getIcon("browser.png"),
                                   self.trUtf8("File-Browser"))
         elif self.embeddedFileBrowser == 1:  # embedded in debug browser
@@ -711,7 +716,7 @@
         
         # Create the symbols viewer
         self.symbolsViewer = SymbolsWidget()
-        self.vToolbox.addItem(self.symbolsViewer,
+        self.lToolbox.addItem(self.symbolsViewer,
                               UI.PixmapCache.getIcon("symbols.png"),
                               self.trUtf8("Symbols"))
         
@@ -735,6 +740,9 @@
         # Create the bottom sidebar
         self.bottomSidebar = E5SideBar(E5SideBar.South)
         
+        # Create the right sidebar
+        self.rightSidebar = E5SideBar(E5SideBar.East)
+        
         # Create the project browser
         logging.debug("Creating Project Browser...")
         self.projectBrowser = ProjectBrowser(self.project, None,
@@ -760,19 +768,18 @@
 
         # Create the debug viewer maybe without the embedded shell
         logging.debug("Creating Debug Viewer...")
-        self.debugViewerDock = self.__createDockWindow("DebugViewerDock")
         self.debugViewer = DebugViewer(debugServer, True, self.viewmanager,
-            self.debugViewerDock,
+            None,
             embeddedShell=self.embeddedShell,
             embeddedBrowser=(self.embeddedFileBrowser == 1))
-        self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
-                             self.debugViewer, self.trUtf8("Debug-Viewer"))
+        self.rightSidebar.addTab(self.debugViewer,
+            UI.PixmapCache.getIcon("debugViewer.png"), self.trUtf8("Debug-Viewer"))
 
         # Create the chat part of the user interface
-        self.cooperationDock = self.__createDockWindow("CooperationDock")
-        self.cooperation = ChatWidget(parent=self.cooperationDock)
-        self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
-                             self.cooperation, self.trUtf8("Cooperation"))
+        logging.debug("Creating Chat Widget...")
+        self.cooperation = ChatWidget()
+        self.rightSidebar.addTab(self.cooperation,
+            UI.PixmapCache.getIcon("cooperation.png"), self.trUtf8("Cooperation"))
         
         # Create the terminal part of the user interface
         logging.debug("Creating Terminal...")
@@ -796,9 +803,6 @@
                               UI.PixmapCache.getIcon("logViewer.png"),
                               self.trUtf8("Log-Viewer"))
 
-        self.windows = [None, None, self.debugViewerDock, None, None,
-                        None, None, None, None, self.cooperationDock]
-
         if self.embeddedShell:
             self.shell = self.debugViewer.shell
         else:
@@ -839,15 +843,19 @@
         # create the central widget
         logging.debug("Creating central widget...")
         cw = self.centralWidget()   # save the current central widget
-        self.horizontalSplitter = QSplitter(Qt.Horizontal)
+        self.leftSplitter = QSplitter(Qt.Horizontal)
+        self.rightSplitter = QSplitter(Qt.Horizontal)
         self.verticalSplitter = QSplitter(Qt.Vertical)
         self.verticalSplitter.addWidget(cw)
         self.verticalSplitter.addWidget(self.bottomSidebar)
-        self.horizontalSplitter.addWidget(self.leftSidebar)
-        self.horizontalSplitter.addWidget(self.verticalSplitter)
-        self.setCentralWidget(self.horizontalSplitter)
-        
-        self.leftSidebar.setSplitter(self.horizontalSplitter)
+        self.rightSplitter.addWidget(self.verticalSplitter)
+        self.rightSplitter.addWidget(self.rightSidebar)
+        self.leftSplitter.addWidget(self.leftSidebar)
+        self.leftSplitter.addWidget(self.rightSplitter)
+        self.setCentralWidget(self.leftSplitter)
+        
+        self.leftSidebar.setSplitter(self.leftSplitter)
+        self.rightSidebar.setSplitter(self.rightSplitter)
         self.bottomSidebar.setSplitter(self.verticalSplitter)
         
     def __configureDockareaCornerUsage(self):
@@ -885,14 +893,18 @@
         
         if self.layout == "Toolboxes":
             if side == UserInterface.LeftSide:
-                self.vToolbox.addItem(widget, icon, label)
+                self.lToolbox.addItem(widget, icon, label)
             elif side == UserInterface.BottomSide:
                 self.hToolbox.addItem(widget, icon, label)
+            elif side == UserInterface.RightSide:
+                self.rToolbox.addItem(widget, icon, label)
         elif self.layout == "Sidebars":
             if side == UserInterface.LeftSide:
                 self.leftSidebar.addTab(widget, icon, label)
             elif side == UserInterface.BottomSide:
                 self.bottomSidebar.addTab(widget, icon, label)
+            elif side == UserInterface.RightSide:
+                self.rightSidebar.addTab(widget, icon, label)
         
     def removeSideWidget(self, widget):
         """
@@ -901,12 +913,12 @@
         @param widget reference to the widget to remove (QWidget)
         """
         if self.layout == "Toolboxes":
-            for container in [self.vToolbox, self.hToolbox]:
+            for container in [self.lToolbox, self.hToolbox, self.rToolbox]:
                 index = container.indexOf(widget)
                 if index != -1:
                     container.removeItem(index)
         elif self.layout == "Sidebars":
-            for container in [self.leftSidebar, self.bottomSidebar]:
+            for container in [self.leftSidebar, self.bottomSidebar, self.rightSidebar]:
                 index = container.indexOf(widget)
                 if index != -1:
                     container.removeTab(index)
@@ -1179,200 +1191,163 @@
         self.setDebugProfileAct.triggered[()].connect(self.setDebugProfile)
         self.actions.append(self.setDebugProfileAct)
         
-        self.pbAct = E5Action(self.trUtf8('Project-Viewer'),
-                self.trUtf8('&Project-Viewer'), 0, 0, self, 'project_viewer', True)
-        self.pbAct.setStatusTip(self.trUtf8('Toggle the Project-Viewer window'))
-        self.pbAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Project-Viewer window</b>"""
-            """<p>If the Project-Viewer window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.pbAct.triggered[()].connect(self.__toggleProjectBrowser)
-        self.actions.append(self.pbAct)
-        
-        self.pbActivateAct = E5Action(self.trUtf8('Activate Project-Viewer'),
-                self.trUtf8('Activate Project-Viewer'),
+        self.pbActivateAct = E5Action(self.trUtf8('Project-Viewer'),
+                self.trUtf8('&Project-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+P")),
                 0, self,
-                'project_viewer_activate', True)
+                'project_viewer_activate')
+        self.pbActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Project-Viewer window."))
+        self.pbActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Project-Viewer</b>"""
+            """<p>This switches the input focus to the Project-Viewer window.</p>"""
+        ))
         self.pbActivateAct.triggered[()].connect(self.__activateProjectBrowser)
         self.actions.append(self.pbActivateAct)
         self.addAction(self.pbActivateAct)
 
-        self.mpbAct = E5Action(self.trUtf8('Multiproject-Viewer'),
-                self.trUtf8('&Multiproject-Viewer'), 0, 0, self,
-                'multi_project_viewer', True)
-        self.mpbAct.setStatusTip(self.trUtf8('Toggle the Multiproject-Viewer window'))
-        self.mpbAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Multiproject-Viewer window</b>"""
-            """<p>If the Multiproject-Viewer window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.mpbAct.triggered[()].connect(self.__toggleMultiProjectBrowser)
-        self.actions.append(self.mpbAct)
-        
-        self.mpbActivateAct = E5Action(self.trUtf8('Activate Multiproject-Viewer'),
-                self.trUtf8('Activate Multiproject-Viewer'),
+        self.mpbActivateAct = E5Action(self.trUtf8('Multiproject-Viewer'),
+                self.trUtf8('&Multiproject-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+M")),
                 0, self,
-                'multi_project_viewer_activate', True)
+                'multi_project_viewer_activate')
+        self.mpbActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Multiproject-Viewer window."))
+        self.mpbActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Multiproject-Viewer</b>"""
+            """<p>This switches the input focus to the Multiproject-Viewer window.</p>"""
+        ))
         self.mpbActivateAct.triggered[()].connect(self.__activateMultiProjectBrowser)
         self.actions.append(self.mpbActivateAct)
         self.addAction(self.mpbActivateAct)
 
-        self.debugViewerAct = E5Action(self.trUtf8('Debug-Viewer'),
-                self.trUtf8('&Debug-Viewer'), 0, 0, self, 'debug_viewer', True)
-        self.debugViewerAct.setStatusTip(self.trUtf8('Toggle the Debug-Viewer window'))
-        self.debugViewerAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Debug-Viewer window</b>"""
-            """<p>If the Debug-Viewer window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.debugViewerAct.triggered[()].connect(self.__toggleDebugViewer)
-        self.actions.append(self.debugViewerAct)
-        
-        self.debugViewerActivateAct = E5Action(self.trUtf8('Activate Debug-Viewer'),
-                self.trUtf8('Activate Debug-Viewer'),
+        self.debugViewerActivateAct = E5Action(self.trUtf8('Debug-Viewer'),
+                self.trUtf8('&Debug-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+D")),
                 0, self,
-                'debug_viewer_activate', True)
+                'debug_viewer_activate')
+        self.debugViewerActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Debug-Viewer window."))
+        self.debugViewerActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Debug-Viewer</b>"""
+            """<p>This switches the input focus to the Debug-Viewer window.</p>"""
+        ))
         self.debugViewerActivateAct.triggered[()].connect(self.__activateDebugViewer)
         self.actions.append(self.debugViewerActivateAct)
         self.addAction(self.debugViewerActivateAct)
 
-        self.shellAct = E5Action(self.trUtf8('Shell'),
-                self.trUtf8('&Shell'), 0, 0, self, 'interpreter_shell', True)
-        self.shellAct.setStatusTip(self.trUtf8('Toggle the Shell window'))
-        self.shellAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Shell window</b>"""
-            """<p>If the Shell window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        if not self.embeddedShell:
-            self.shellAct.triggered[()].connect(self.__toggleShell)
-        self.actions.append(self.shellAct)
-
-        self.shellActivateAct = E5Action(self.trUtf8('Activate Shell'),
-                self.trUtf8('Activate Shell'),
+        self.shellActivateAct = E5Action(self.trUtf8('Shell'),
+                self.trUtf8('&Shell'),
                 QKeySequence(self.trUtf8("Alt+Shift+S")),
                 0, self,
-                'interprter_shell_activate', True)
+                'interprter_shell_activate')
+        self.shellActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Shell window."))
+        self.shellActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Shell</b>"""
+            """<p>This switches the input focus to the Shell window.</p>"""
+        ))
         self.shellActivateAct.triggered[()].connect(self.__activateShell)
         self.actions.append(self.shellActivateAct)
         self.addAction(self.shellActivateAct)
 
-        self.terminalAct = E5Action(self.trUtf8('Terminal'),
-                self.trUtf8('Te&rminal'), 0, 0, self, 'terminal', True)
-        self.terminalAct.setStatusTip(self.trUtf8('Toggle the Terminal window'))
-        self.terminalAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Terminal window</b>"""
-            """<p>If the Terminal window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.terminalAct.triggered[()].connect(self.__toggleTerminal)
-        self.actions.append(self.terminalAct)
-
-        self.terminalActivateAct = E5Action(self.trUtf8('Activate Terminal'),
-                self.trUtf8('Activate Terminal'),
+        self.terminalActivateAct = E5Action(self.trUtf8('Terminal'),
+                self.trUtf8('Te&rminal'),
                 QKeySequence(self.trUtf8("Alt+Shift+R")),
                 0, self,
-                'terminal_activate', True)
+                'terminal_activate')
+        self.terminalActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Terminal window."))
+        self.terminalActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Terminal</b>"""
+            """<p>This switches the input focus to the Terminal window.</p>"""
+        ))
         self.terminalActivateAct.triggered[()].connect(self.__activateTerminal)
         self.actions.append(self.terminalActivateAct)
         self.addAction(self.terminalActivateAct)
 
-        self.browserAct = E5Action(self.trUtf8('File-Browser'),
-                self.trUtf8('File-&Browser'), 0, 0, self, 'file_browser', True)
-        self.browserAct.setStatusTip(self.trUtf8('Toggle the File-Browser window'))
-        self.browserAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the File-Browser window</b>"""
-            """<p>If the File-Browser window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        if not self.embeddedFileBrowser:
-            self.browserAct.triggered[()].connect(self.__toggleBrowser)
-        self.actions.append(self.browserAct)
-
-        self.browserActivateAct = E5Action(self.trUtf8('Activate File-Browser'),
-                self.trUtf8('Activate File-Browser'),
+        self.browserActivateAct = E5Action(self.trUtf8('File-Browser'),
+                self.trUtf8('&File-Browser'),
                 QKeySequence(self.trUtf8("Alt+Shift+F")),
                 0, self,
-                'file_browser_activate', True)
+                'file_browser_activate')
+        self.browserActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the File-Browser window."))
+        self.browserActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate File-Browser</b>"""
+            """<p>This switches the input focus to the File-Browser window.</p>"""
+        ))
         self.browserActivateAct.triggered[()].connect(self.__activateBrowser)
         self.actions.append(self.browserActivateAct)
         self.addAction(self.browserActivateAct)
 
-        self.logViewerAct = E5Action(self.trUtf8('Log-Viewer'),
-                self.trUtf8('&Log-Viewer'), 0, 0, self, 'log_viewer', True)
-        self.logViewerAct.setStatusTip(self.trUtf8('Toggle the Log-Viewer window'))
-        self.logViewerAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Log-Viewer window</b>"""
-            """<p>If the Log-Viewer window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.logViewerAct.triggered[()].connect(self.__toggleLogViewer)
-        self.actions.append(self.logViewerAct)
-
-        self.logViewerActivateAct = E5Action(self.trUtf8('Activate Log-Viewer'),
-                self.trUtf8('Activate Log-Viewer'),
+        self.logViewerActivateAct = E5Action(self.trUtf8('Log-Viewer'),
+                self.trUtf8('Lo&g-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+G")),
                 0, self,
-                'log_viewer_activate', True)
+                'log_viewer_activate')
+        self.logViewerActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Log-Viewer window."))
+        self.logViewerActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Log-Viewer</b>"""
+            """<p>This switches the input focus to the Log-Viewer window.</p>"""
+        ))
         self.logViewerActivateAct.triggered[()].connect(self.__activateLogViewer)
         self.actions.append(self.logViewerActivateAct)
         self.addAction(self.logViewerActivateAct)
 
-        self.taskViewerAct = E5Action(self.trUtf8('Task-Viewer'),
-                self.trUtf8('T&ask-Viewer'), 0, 0, self, 'task_viewer', True)
-        self.taskViewerAct.setStatusTip(self.trUtf8('Toggle the Task-Viewer window'))
-        self.taskViewerAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Task-Viewer window</b>"""
-            """<p>If the Task-Viewer window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.taskViewerAct.triggered[()].connect(self.__toggleTaskViewer)
-        self.actions.append(self.taskViewerAct)
-
-        self.taskViewerActivateAct = E5Action(self.trUtf8('Activate Task-Viewer'),
-                self.trUtf8('Activate Task-Viewer'),
+        self.taskViewerActivateAct = E5Action(self.trUtf8('Task-Viewer'),
+                self.trUtf8('&Task-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+T")),
                 0, self,
-                'task_viewer_activate', 1)
+                'task_viewer_activate')
+        self.taskViewerActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Task-Viewer window."))
+        self.taskViewerActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Task-Viewer</b>"""
+            """<p>This switches the input focus to the Task-Viewer window.</p>"""
+        ))
         self.taskViewerActivateAct.triggered[()].connect(self.__activateTaskViewer)
         self.actions.append(self.taskViewerActivateAct)
         self.addAction(self.taskViewerActivateAct)
 
-        self.templateViewerAct = E5Action(self.trUtf8('Template-Viewer'),
-                self.trUtf8('Temp&late-Viewer'), 0, 0, self, 'template_viewer', True)
-        self.templateViewerAct.setStatusTip(
-            self.trUtf8('Toggle the Template-Viewer window'))
-        self.templateViewerAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Template-Viewer window</b>"""
-            """<p>If the Template-Viewer window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.templateViewerAct.triggered[()].connect(self.__toggleTemplateViewer)
-        self.actions.append(self.templateViewerAct)
-
-        self.templateViewerActivateAct = E5Action(self.trUtf8('Activate Template-Viewer'),
-                self.trUtf8('Activate Template-Viewer'),
+        self.templateViewerActivateAct = E5Action(self.trUtf8('Template-Viewer'),
+                self.trUtf8('Templ&ate-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+A")),
                 0, self,
-                'template_viewer_activate', 1)
-        self.templateViewerActivateAct.triggered[()].connect(self.__activateTemplateViewer)
+                'template_viewer_activate')
+        self.templateViewerActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Template-Viewer window."))
+        self.templateViewerActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Template-Viewer</b>"""
+            """<p>This switches the input focus to the Template-Viewer window.</p>"""
+        ))
+        self.templateViewerActivateAct.triggered[()].connect(
+            self.__activateTemplateViewer)
         self.actions.append(self.templateViewerActivateAct)
         self.addAction(self.templateViewerActivateAct)
 
-        self.vtAct = E5Action(self.trUtf8('Vertical Toolbox'),
-                self.trUtf8('&Vertical Toolbox'), 0, 0, self, 'vertical_toolbox', True)
-        self.vtAct.setStatusTip(self.trUtf8('Toggle the Vertical Toolbox window'))
-        self.vtAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Vertical Toolbox window</b>"""
-            """<p>If the Vertical Toolbox window is hidden then display it."""
+        self.ltAct = E5Action(self.trUtf8('Left Toolbox'),
+                self.trUtf8('&Left Toolbox'), 0, 0, self, 'vertical_toolbox', True)
+        self.ltAct.setStatusTip(self.trUtf8('Toggle the Left Toolbox window'))
+        self.ltAct.setWhatsThis(self.trUtf8(
+            """<b>Toggle the Left Toolbox window</b>"""
+            """<p>If the Left Toolbox window is hidden then display it."""
             """ If it is displayed then close it.</p>"""
         ))
-        self.vtAct.triggered[()].connect(self.__toggleVerticalToolbox)
-        self.actions.append(self.vtAct)
+        self.ltAct.triggered[()].connect(self.__toggleLeftToolbox)
+        self.actions.append(self.ltAct)
+        
+        self.rtAct = E5Action(self.trUtf8('Right Toolbox'),
+                self.trUtf8('&Right Toolbox'), 0, 0, self, 'vertical_toolbox', True)
+        self.rtAct.setStatusTip(self.trUtf8('Toggle the Right Toolbox window'))
+        self.rtAct.setWhatsThis(self.trUtf8(
+            """<b>Toggle the Right Toolbox window</b>"""
+            """<p>If the Right Toolbox window is hidden then display it."""
+            """ If it is displayed then close it.</p>"""
+        ))
+        self.rtAct.triggered[()].connect(self.__toggleRightToolbox)
+        self.actions.append(self.rtAct)
         
         self.htAct = E5Action(self.trUtf8('Horizontal Toolbox'),
                 self.trUtf8('&Horizontal Toolbox'), 0, 0, self,
@@ -1397,6 +1372,17 @@
         self.lsbAct.triggered[()].connect(self.__toggleLeftSidebar)
         self.actions.append(self.lsbAct)
         
+        self.rsbAct = E5Action(self.trUtf8('Right Sidebar'),
+                self.trUtf8('&Right Sidebar'), 0, 0, self, 'right_sidebar', True)
+        self.rsbAct.setStatusTip(self.trUtf8('Toggle the right sidebar window'))
+        self.rsbAct.setWhatsThis(self.trUtf8(
+            """<b>Toggle the right sidebar window</b>"""
+            """<p>If the right sidebar window is hidden then display it."""
+            """ If it is displayed then close it.</p>"""
+        ))
+        self.rsbAct.triggered[()].connect(self.__toggleRightSidebar)
+        self.actions.append(self.rsbAct)
+        
         self.bsbAct = E5Action(self.trUtf8('Bottom Sidebar'),
                 self.trUtf8('&Bottom Sidebar'), 0, 0, self,
                 'bottom_sidebar', True)
@@ -1409,68 +1395,51 @@
         self.bsbAct.triggered[()].connect(self.__toggleBottomSidebar)
         self.actions.append(self.bsbAct)
         
-        self.cooperationViewerAct = E5Action(self.trUtf8('Cooperation'),
-                self.trUtf8('&Cooperation'), 0, 0, self, 'cooperation_viewer', True)
-        self.cooperationViewerAct.setStatusTip(self.trUtf8(
-            'Toggle the Cooperation window'))
-        self.cooperationViewerAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Cooperation window</b>"""
-            """<p>If the Cooperation window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.cooperationViewerAct.triggered[()].connect(self.__toggleCooperationViewer)
-        self.actions.append(self.cooperationViewerAct)
-        
         self.cooperationViewerActivateAct = E5Action(
-                self.trUtf8('Activate Cooperation-Viewer'),
-                self.trUtf8('Activate Cooperation-Viewer'),
+                self.trUtf8('Cooperation-Viewer'),
+                self.trUtf8('Co&operation-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+O")),
                 0, self,
-                'cooperation_viewer_activate', True)
-        self.cooperationViewerActivateAct.triggered[()].connect(self.activateCooperationViewer)
+                'cooperation_viewer_activate')
+        self.cooperationViewerActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Cooperation-Viewer window."))
+        self.cooperationViewerActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Cooperation-Viewer</b>"""
+            """<p>This switches the input focus to the Cooperation-Viewer window.</p>"""
+        ))
+        self.cooperationViewerActivateAct.triggered[()].connect(
+            self.activateCooperationViewer)
         self.actions.append(self.cooperationViewerActivateAct)
         self.addAction(self.cooperationViewerActivateAct)
 
-        self.symbolsViewerAct = E5Action(self.trUtf8('Symbols'),
-                self.trUtf8('&Symbols'), 0, 0, self, 'symbols_viewer', True)
-        self.symbolsViewerAct.setStatusTip(self.trUtf8(
-            'Toggle the Symbols window'))
-        self.symbolsViewerAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Symbols window</b>"""
-            """<p>If the Symbols window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.symbolsViewerAct.triggered[()].connect(self.__toggleSymbolsViewer)
-        self.actions.append(self.symbolsViewerAct)
-        
         self.symbolsViewerActivateAct = E5Action(
-                self.trUtf8('Activate Symbols-Viewer'),
-                self.trUtf8('Activate Symbols-Viewer'),
+                self.trUtf8('Symbols-Viewer'),
+                self.trUtf8('S&ymbols-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+Y")),
                 0, self,
-                'symbols_viewer_activate', True)
+                'symbols_viewer_activate')
+        self.symbolsViewerActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Symbols-Viewer window."))
+        self.symbolsViewerActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Symbols-Viewer</b>"""
+            """<p>This switches the input focus to the Symbols-Viewer window.</p>"""
+        ))
         self.symbolsViewerActivateAct.triggered[()].connect(self.__activateSymbolsViewer)
         self.actions.append(self.symbolsViewerActivateAct)
         self.addAction(self.symbolsViewerActivateAct)
 
-        self.numbersViewerAct = E5Action(self.trUtf8('Numbers'),
-                self.trUtf8('&Numbers'), 0, 0, self, 'numbers_viewer', True)
-        self.numbersViewerAct.setStatusTip(self.trUtf8(
-            'Toggle the Numbers window'))
-        self.numbersViewerAct.setWhatsThis(self.trUtf8(
-            """<b>Toggle the Numbers window</b>"""
-            """<p>If the Numbers window is hidden then display it."""
-            """ If it is displayed then close it.</p>"""
-        ))
-        self.numbersViewerAct.triggered[()].connect(self.__toggleNumbersViewer)
-        self.actions.append(self.numbersViewerAct)
-        
         self.numbersViewerActivateAct = E5Action(
-                self.trUtf8('Activate Numbers-Viewer'),
-                self.trUtf8('Activate Numbers-Viewer'),
+                self.trUtf8('Numbers-Viewer'),
+                self.trUtf8('Num&bers-Viewer'),
                 QKeySequence(self.trUtf8("Alt+Shift+B")),
                 0, self,
-                'numbers_viewer_activate', True)
+                'numbers_viewer_activate')
+        self.numbersViewerActivateAct.setStatusTip(self.trUtf8(
+            "Switch the input focus to the Numbers-Viewer window."))
+        self.numbersViewerActivateAct.setWhatsThis(self.trUtf8(
+            """<b>Activate Numbers-Viewer</b>"""
+            """<p>This switches the input focus to the Numbers-Viewer window.</p>"""
+        ))
         self.numbersViewerActivateAct.triggered[()].connect(self.__activateNumbersViewer)
         self.actions.append(self.numbersViewerActivateAct)
         self.addAction(self.numbersViewerActivateAct)
@@ -2181,6 +2150,21 @@
         self.__menus["window"].setTearOffEnabled(True)
         self.__menus["window"].aboutToShow.connect(self.__showWindowMenu)
         
+        self.__menus["subwindow"] = QMenu(self.trUtf8("&Windows"), self.__menus["window"])
+        self.__menus["subwindow"].setTearOffEnabled(True)
+        self.__menus["subwindow"].addAction(self.pbActivateAct)
+        self.__menus["subwindow"].addAction(self.mpbActivateAct)
+        self.__menus["subwindow"].addAction(self.browserActivateAct)
+        self.__menus["subwindow"].addAction(self.debugViewerActivateAct)
+        self.__menus["subwindow"].addAction(self.shellActivateAct)
+        self.__menus["subwindow"].addAction(self.terminalActivateAct)
+        self.__menus["subwindow"].addAction(self.logViewerActivateAct)
+        self.__menus["subwindow"].addAction(self.taskViewerActivateAct)
+        self.__menus["subwindow"].addAction(self.templateViewerActivateAct)
+        self.__menus["subwindow"].addAction(self.cooperationViewerActivateAct)
+        self.__menus["subwindow"].addAction(self.symbolsViewerActivateAct)
+        self.__menus["subwindow"].addAction(self.numbersViewerActivateAct)
+        
         self.__menus["toolbars"] = \
             QMenu(self.trUtf8("&Toolbars"), self.__menus["window"])
         self.__menus["toolbars"].setTearOffEnabled(True)
@@ -3031,60 +3015,24 @@
         self.__menus["window"].addSeparator()
         
         if self.layout == "Toolboxes":
-            self.__menus["window"].addAction(self.vtAct)
-            self.vtAct.setChecked(not self.vToolboxDock.isHidden())
+            self.__menus["window"].addAction(self.ltAct)
+            self.ltAct.setChecked(not self.lToolboxDock.isHidden())
+            self.__menus["window"].addAction(self.rtAct)
+            self.rtAct.setChecked(not self.lToolboxDock.isHidden())
             self.__menus["window"].addAction(self.htAct)
             self.htAct.setChecked(not self.hToolboxDock.isHidden())
-            self.__menus["window"].addAction(self.cooperationViewerAct)
-            self.cooperationViewerAct.setChecked(not self.cooperationDock.isHidden())
-            self.__menus["window"].addAction(self.debugViewerAct)
-            self.debugViewerAct.setChecked(not self.debugViewerDock.isHidden())
         elif self.layout == "Sidebars":
             self.__menus["window"].addAction(self.lsbAct)
             self.lsbAct.setChecked(not self.leftSidebar.isHidden())
+            self.__menus["window"].addAction(self.rsbAct)
+            self.rsbAct.setChecked(not self.rightSidebar.isHidden())
             self.__menus["window"].addAction(self.bsbAct)
             self.bsbAct.setChecked(not self.bottomSidebar.isHidden())
-            self.__menus["window"].addAction(self.cooperationViewerAct)
-            self.cooperationViewerAct.setChecked(not self.cooperationDock.isHidden())
-            self.__menus["window"].addAction(self.debugViewerAct)
-            self.debugViewerAct.setChecked(not self.debugViewerDock.isHidden())
-        else:
-            # Set the options according to what is being displayed.
-            self.__menus["window"].addAction(self.pbAct)
-            self.pbAct.setChecked(not self.projectBrowser.isHidden())
-            
-            self.__menus["window"].addAction(self.mpbAct)
-            self.mpbAct.setChecked(not self.multiProjectBrowser.isHidden())
-            
-            if not self.embeddedFileBrowser:
-                self.__menus["window"].addAction(self.browserAct)
-                self.browserAct.setChecked(not self.browser.isHidden())
-                
-            self.__menus["window"].addAction(self.debugViewerAct)
-            self.debugViewerAct.setChecked(not self.debugViewer.isHidden())
-            
-            if not self.embeddedShell:
-                self.__menus["window"].addAction(self.shellAct)
-                self.shellAct.setChecked(not self.shell.isHidden())
-            
-            self.__menus["window"].addAction(self.terminalAct)
-            self.terminalAct.setChecked(not self.terminal.isHidden())
-            
-            self.__menus["window"].addAction(self.logViewerAct)
-            self.logViewerAct.setChecked(not self.logViewer.isHidden())
-            
-            self.__menus["window"].addAction(self.taskViewerAct)
-            self.taskViewerAct.setChecked(not self.taskViewer.isHidden())
-
-            self.__menus["window"].addAction(self.templateViewerAct)
-            self.templateViewerAct.setChecked(not self.templateViewer.isHidden())
-
-            self.__menus["window"].addAction(self.cooperationViewerAct)
-            self.cooperationViewerAct.setChecked(not self.cooperation.isHidden())
-            
-            self.__menus["window"].addAction(self.symbolsViewerAct)
-            self.symbolsViewerAct.setChecked(not self.symbolsViewer.isHidden())
-
+        
+        # Insert menu entry for sub-windows
+        self.__menus["window"].addSeparator()
+        self.__menus["window"].addMenu(self.__menus["subwindow"])
+        
         # Insert menu entry for toolbar settings
         self.__menus["window"].addSeparator()
         self.__menus["window"].addMenu(self.__menus["toolbars"])
@@ -3094,6 +3042,12 @@
         
         self.showMenu.emit("Window", self.__menus["window"])
         
+    def __showSubWindowMenu(self):
+        """
+        Private slot to display the Window menu of the Window menu.
+        """
+        self.showMenu.emit("Subwindows", self.__menus["subwindow"])
+        
     def __showToolbarsMenu(self):
         """
         Private slot to display the Toolbars menu.
@@ -3154,7 +3108,7 @@
                 state = self.saveState()
                 self.profiles[self.currentProfile][4] = bytes(state)
                 if self.layout == "Sidebars":
-                    state = self.horizontalSplitter.saveState()
+                    state = self.leftSplitter.saveState()
                     self.profiles[self.currentProfile][6][0] = bytes(state)
                     state = self.verticalSplitter.saveState()
                     self.profiles[self.currentProfile][6][1] = bytes(state)
@@ -3162,16 +3116,19 @@
                     self.profiles[self.currentProfile][6][2] = bytes(state)
                     state = self.bottomSidebar.saveState()
                     self.profiles[self.currentProfile][6][3] = bytes(state)
+                    state = self.rightSplitter.saveState()
+                    self.profiles[self.currentProfile][6][4] = bytes(state)
+                    state = self.rightSidebar.saveState()
+                    self.profiles[self.currentProfile][6][5] = bytes(state)
             # step 2: save the visibility of the windows of the active profile
-            for window, i in zip(self.windows, list(range(len(self.windows)))):
-                if window is not None:
-                    self.profiles[self.currentProfile][0][i] = window.isVisible()
             if self.layout == "Toolboxes":
-                self.profiles[self.currentProfile][5][0] = self.vToolboxDock.isVisible()
+                self.profiles[self.currentProfile][5][0] = self.lToolboxDock.isVisible()
                 self.profiles[self.currentProfile][5][1] = self.hToolboxDock.isVisible()
+                self.profiles[self.currentProfile][5][2] = self.rToolboxDock.isVisible()
             elif self.layout == "Sidebars":
                 self.profiles[self.currentProfile][5][0] = self.leftSidebar.isVisible()
                 self.profiles[self.currentProfile][5][1] = self.bottomSidebar.isVisible()
+                self.profiles[self.currentProfile][5][2] = self.rightSidebar.isVisible()
             Preferences.setUI("ViewProfiles", self.profiles)
     
     def __activateViewProfile(self, name, save=True):
@@ -3194,7 +3151,7 @@
                 if self.layout == "Sidebars":
                     state = QByteArray(self.profiles[name][6][0])
                     if not state.isEmpty():
-                        self.horizontalSplitter.restoreState(state)
+                        self.leftSplitter.restoreState(state)
                     state = QByteArray(self.profiles[name][6][1])
                     if not state.isEmpty():
                         self.verticalSplitter.restoreState(state)
@@ -3204,18 +3161,23 @@
                     state = QByteArray(self.profiles[name][6][3])
                     if not state.isEmpty():
                         self.bottomSidebar.restoreState(state)
+                    state = QByteArray(self.profiles[name][6][4])
+                    if not state.isEmpty():
+                        self.rightSplitter.restoreState(state)
+                    state = QByteArray(self.profiles[name][6][5])
+                    if not state.isEmpty():
+                        self.rightSidebar.restoreState(state)
                 self.__configureDockareaCornerUsage()
             
             # step 3: activate the windows of the new profile
-            for window, visible in zip(self.windows, self.profiles[name][0]):
-                if window is not None:
-                    window.setVisible(visible)
             if self.layout == "Toolboxes":
-                self.vToolboxDock.setVisible(self.profiles[name][5][0])
+                self.lToolboxDock.setVisible(self.profiles[name][5][0])
                 self.hToolboxDock.setVisible(self.profiles[name][5][1])
+                self.rToolboxDock.setVisible(self.profiles[name][5][2])
             elif self.layout == "Sidebars":
                 self.leftSidebar.setVisible(self.profiles[name][5][0])
                 self.bottomSidebar.setVisible(self.profiles[name][5][1])
+                self.rightSidebar.setVisible(self.profiles[name][5][2])
             
             # step 4: remember the new profile
             self.currentProfile = name
@@ -3229,6 +3191,43 @@
             if self.__menus["window"].isTearOffMenuVisible():
                 self.__showWindowMenu()
         
+    def __debuggingStarted(self):
+        """
+        Private slot to handle the start of a debugging session.
+        """
+        self.setDebugProfile()
+        if self.layout == "Toolboxes":
+            self.__currentRightWidget = self.rToolbox.currentWidget()
+            self.rToolbox.setCurrentWidget(self.debugViewer)
+            if not self.embeddedShell:
+                self.__currentBottomWidget = self.hToolbox.currentWidget()
+                self.hToolbox.setCurrentWidget(self.shellAssembly)
+        elif self.layout == "Sidebars":
+            self.__currentRightWidget = self.rightSidebar.currentWidget()
+            self.rightSidebar.setCurrentWidget(self.debugViewer)
+            if not self.embeddedShell:
+                self.__currentBottomWidget = self.bottomSidebar.currentWidget()
+                self.bottomSidebar.setCurrentWidget(self.shellAssembly)
+        
+    def __debuggingDone(self):
+        """
+        Private slot to handle the end of a debugging session.
+        """
+        self.__setEditProfile()
+        if self.layout == "Toolboxes":
+            if self.__currentRightWidget:
+                self.rToolbox.setCurrentWidget(self.__currentRightWidget)
+            if self.__currentBottomWidget:
+                self.hToolbox.setCurrentWidget(self.__currentBottomWidget)
+        elif self.layout == "Sidebars":
+            if self.__currentRightWidget:
+                self.rightSidebar.setCurrentWidget(self.__currentRightWidget)
+            if self.__currentBottomWidget:
+                self.bottomSidebar.setCurrentWidget(self.__currentBottomWidget)
+        self.__currentRightWidget = None
+        self.__currentBottomWidget = None
+        self.__activateViewmanager()
+        
     def __setEditProfile(self, save=True):
         """
         Private slot to activate the edit view profile.
@@ -3239,18 +3238,6 @@
         self.__activateViewProfile("edit", save)
         self.setEditProfileAct.setChecked(True)
         
-    def __debuggingStarted(self):
-        """
-        Private slot to handle the start of a debugging session.
-        """
-        self.setDebugProfile()
-        if self.layout == "Toolboxes":
-            if not self.embeddedShell:
-                self.hToolbox.setCurrentWidget(self.shellAssembly)
-        elif self.layout == "Sidebars":
-            if not self.embeddedShell:
-                self.bottomSidebar.setCurrentWidget(self.shellAssembly)
-        
     def setDebugProfile(self, save=True):
         """
         Public slot to activate the debug view profile.
@@ -3271,25 +3258,13 @@
         """
         return self.currentProfile
         
-    def __toggleProjectBrowser(self):
-        """
-        Private slot to handle the toggle of the Project Browser window.
-        """
-        hasFocus = self.projectBrowser.currentWidget().hasFocus()
-        shown = self.__toggleWindow(self.projectBrowser)
-        if shown:
-            self.__activateProjectBrowser()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateProjectBrowser(self):
         """
         Private slot to handle the activation of the project browser.
         """
         if self.layout == "Toolboxes":
-            self.vToolboxDock.show()
-            self.vToolbox.setCurrentWidget(self.projectBrowser)
+            self.lToolboxDock.show()
+            self.lToolbox.setCurrentWidget(self.projectBrowser)
         elif self.layout == "Sidebars":
             self.leftSidebar.show()
             self.leftSidebar.setCurrentWidget(self.projectBrowser)
@@ -3297,25 +3272,13 @@
             self.projectBrowser.show()
         self.projectBrowser.currentWidget().setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleMultiProjectBrowser(self):
-        """
-        Private slot to handle the toggle of the Project Browser window.
-        """
-        hasFocus = self.multiProjectBrowser.hasFocus()
-        shown = self.__toggleWindow(self.multiProjectBrowser)
-        if shown:
-            self.__activateMultiProjectBrowser()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateMultiProjectBrowser(self):
         """
         Private slot to handle the activation of the project browser.
         """
         if self.layout == "Toolboxes":
-            self.vToolboxDock.show()
-            self.vToolbox.setCurrentWidget(self.multiProjectBrowser)
+            self.lToolboxDock.show()
+            self.lToolbox.setCurrentWidget(self.multiProjectBrowser)
         elif self.layout == "Sidebars":
             self.leftSidebar.show()
             self.leftSidebar.setCurrentWidget(self.multiProjectBrowser)
@@ -3323,52 +3286,31 @@
             self.multiProjectBrowser.show()
         self.multiProjectBrowser.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleDebugViewer(self):
-        """
-        Private slot to handle the toggle of the debug viewer.
-        """
-        hasFocus = self.debugViewer.currentWidget().hasFocus()
-        if self.layout in ["Toolboxes", "Sidebars"]:
-            shown = self.__toggleWindow(self.debugViewerDock)
-        else:
-            shown = self.__toggleWindow(self.debugViewer)
-        if shown:
-            self.__activateDebugViewer()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateDebugViewer(self):
         """
         Private slot to handle the activation of the debug viewer.
         """
-        if self.layout in ["Toolboxes", "Sidebars"]:
-            self.debugViewerDock.show()
-            self.debugViewerDock.raise_()
+        if self.layout == "Toolboxes":
+            self.rToolboxDock.show()
+            self.rToolbox.setCurrentWidget(self.debugViewer)
+        elif self.layout == "Sidebars":
+            self.rightSidebar.show()
+            self.rightSidebar.setCurrentWidget(self.debugViewer)
         else:
             self.debugViewer.show()
         self.debugViewer.currentWidget().setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleShell(self):
-        """
-        Private slot to handle the toggle of the Shell window .
-        """
-        hasFocus = self.shell.hasFocus()
-        shown = self.__toggleWindow(self.shell)
-        if shown:
-            self.__activateShell()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateShell(self):
         """
         Private slot to handle the activation of the Shell window.
         """
         if self.embeddedShell:              # embedded in debug browser
-            if self.layout in ["Toolboxes", "Sidebars"]:
-                self.debugViewerDock.show()
-                self.debugViewerDock.raise_()
+            if self.layout == "Toolboxes":
+                self.rToolboxDock.show()
+                self.rToolbox.setCurrentWidget(self.debugViewer)
+            elif self.layout == "Sidebars":
+                self.rightSidebar.show()
+                self.rightSidebar.setCurrentWidget(self.debugViewer)
             else:
                 self.debugViewer.show()
             self.debugViewer.setCurrentWidget(self.shellAssembly)
@@ -3383,18 +3325,6 @@
                 self.shell.show()
         self.shell.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleTerminal(self):
-        """
-        Private slot to handle the toggle of the Terminal window .
-        """
-        hasFocus = self.terminal.hasFocus()
-        shown = self.__toggleWindow(self.terminal)
-        if shown:
-            self.__activateTerminal()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateTerminal(self):
         """
         Private slot to handle the activation of the Terminal window.
@@ -3409,18 +3339,6 @@
             self.terminal.show()
         self.terminal.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleLogViewer(self):
-        """
-        Private slot to handle the toggle of the Log Viewer window.
-        """
-        hasFocus = self.logViewer.hasFocus()
-        shown = self.__toggleWindow(self.logViewer)
-        if shown:
-            self.__activateLogViewer()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateLogViewer(self):
         """
         Private slot to handle the activation of the Log Viewer.
@@ -3435,18 +3353,6 @@
             self.logViewer.show()
         self.logViewer.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleTaskViewer(self):
-        """
-        Private slot to handle the toggle of the Task Viewer window.
-        """
-        hasFocus = self.taskViewer.hasFocus()
-        shown = self.__toggleWindow(self.taskViewer)
-        if shown:
-            self.__activateTaskViewer()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateTaskViewer(self):
         """
         Private slot to handle the activation of the Task Viewer.
@@ -3461,25 +3367,13 @@
             self.taskViewer.show()
         self.taskViewer.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleTemplateViewer(self):
-        """
-        Private slot to handle the toggle of the Template Viewer window.
-        """
-        hasFocus = self.templateViewer.hasFocus()
-        shown = self.__toggleWindow(self.templateViewer)
-        if shown:
-            self.__activateTemplateViewer()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateTemplateViewer(self):
         """
         Private slot to handle the activation of the Template Viewer.
         """
         if self.layout == "Toolboxes":
-            self.vToolboxDock.show()
-            self.vToolbox.setCurrentWidget(self.templateViewer)
+            self.lToolboxDock.show()
+            self.lToolbox.setCurrentWidget(self.templateViewer)
         elif self.layout == "Sidebars":
             self.leftSidebar.show()
             self.leftSidebar.setCurrentWidget(self.templateViewer)
@@ -3487,42 +3381,33 @@
             self.templateViewer.show()
         self.templateViewer.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleBrowser(self):
-        """
-        Private slot to handle the toggle of the File Browser window.
-        """
-        hasFocus = self.browser.hasFocus()
-        shown = self.__toggleWindow(self.browser)
-        if shown:
-            self.__activateBrowser()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateBrowser(self):
         """
         Private slot to handle the activation of the file browser.
         """
         if self.embeddedFileBrowser == 0:   # separate window
             if self.layout == "Toolboxes":
-                self.vToolboxDock.show()
-                self.vToolbox.setCurrentWidget(self.browser)
+                self.lToolboxDock.show()
+                self.lToolbox.setCurrentWidget(self.browser)
             elif self.layout == "Sidebars":
                 self.leftSidebar.show()
                 self.leftSidebar.setCurrentWidget(self.browser)
             else:
                 self.browser.show()
         elif self.embeddedFileBrowser == 1:  # embedded in debug browser
-            if self.layout in ["Toolboxes", "Sidebars"]:
-                self.debugViewerDock.show()
-                self.debugViewerDock.raise_()
+            if self.layout == "Toolboxes":
+                self.rToolboxDock.show()
+                self.rToolbox.setCurrentWidget(self.debugViewer)
+            elif self.layout == "Sidebars":
+                self.rightSidebar.show()
+                self.rightSidebar.setCurrentWidget(self.debugViewer)
             else:
                 self.debugViewer.show()
             self.debugViewer.setCurrentWidget(self.browser)
         else:                               # embedded in project browser
             if self.layout == "Toolboxes":
-                self.vToolboxDock.show()
-                self.vToolbox.setCurrentWidget(self.projectBrowser)
+                self.lToolboxDock.show()
+                self.lToolbox.setCurrentWidget(self.projectBrowser)
             elif self.layout == "Sidebars":
                 self.leftSidebar.show()
                 self.leftSidebar.setCurrentWidget(self.projectBrowser)
@@ -3531,14 +3416,26 @@
             self.projectBrowser.setCurrentWidget(self.browser)
         self.browser.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleVerticalToolbox(self):
-        """
-        Private slot to handle the toggle of the Vertical Toolbox window.
-        """
-        hasFocus = self.vToolbox.currentWidget().hasFocus()
-        shown = self.__toggleWindow(self.vToolboxDock)
+    def __toggleLeftToolbox(self):
+        """
+        Private slot to handle the toggle of the Left Toolbox window.
+        """
+        hasFocus = self.lToolbox.currentWidget().hasFocus()
+        shown = self.__toggleWindow(self.lToolboxDock)
         if shown:
-            self.vToolbox.currentWidget().setFocus(Qt.ActiveWindowFocusReason)
+            self.lToolbox.currentWidget().setFocus(Qt.ActiveWindowFocusReason)
+        else:
+            if hasFocus:
+                self.__activateViewmanager()
+        
+    def __toggleRightToolbox(self):
+        """
+        Private slot to handle the toggle of the Right Toolbox window.
+        """
+        hasFocus = self.rToolbox.currentWidget().hasFocus()
+        shown = self.__toggleWindow(self.rToolboxDock)
+        if shown:
+            self.rToolbox.currentWidget().setFocus(Qt.ActiveWindowFocusReason)
         else:
             if hasFocus:
                 self.__activateViewmanager()
@@ -3567,6 +3464,18 @@
             if hasFocus:
                 self.__activateViewmanager()
         
+    def __toggleRightSidebar(self):
+        """
+        Private slot to handle the toggle of the right sidebar window.
+        """
+        hasFocus = self.rightSidebar.currentWidget().hasFocus()
+        shown = self.__toggleWindow(self.rightSidebar)
+        if shown:
+            self.rightSidebar.currentWidget().setFocus(Qt.ActiveWindowFocusReason)
+        else:
+            if hasFocus:
+                self.__activateViewmanager()
+        
     def __toggleBottomSidebar(self):
         """
         Private slot to handle the toggle of the bottom sidebar window.
@@ -3579,51 +3488,27 @@
             if hasFocus:
                 self.__activateViewmanager()
         
-    def __toggleCooperationViewer(self):
-        """
-        Private slot to handle the toggle of the cooperation window.
-        """
-        hasFocus = self.cooperation.hasFocus()
-        if self.layout in ["Toolboxes", "Sidebars"]:
-            shown = self.__toggleWindow(self.cooperationDock)
-        else:
-            shown = self.__toggleWindow(self.cooperation)
-        if shown:
-            self.activateCooperationViewer()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-        
     def activateCooperationViewer(self):
         """
         Public slot to handle the activation of the cooperation window.
         """
-        if self.layout in ["Toolboxes", "Sidebars"]:
-            self.cooperationDock.show()
-            self.cooperationDock.raise_()
+        if self.layout == "Toolboxes":
+            self.rToolboxDock.show()
+            self.rToolbox.setCurrentWidget(self.cooperation)
+        elif self.layout == "Sidebars":
+            self.rightSidebar.show()
+            self.rightSidebar.setCurrentWidget(self.cooperation)
         else:
             self.cooperation.show()
         self.cooperation.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleSymbolsViewer(self):
-        """
-        Private slot to handle the toggle of the Symbols Viewer window.
-        """
-        hasFocus = self.symbolsViewer.hasFocus()
-        shown = self.__toggleWindow(self.symbolsViewer)
-        if shown:
-            self.__activateSymbolsViewer()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateSymbolsViewer(self):
         """
         Private slot to handle the activation of the Symbols Viewer.
         """
         if self.layout == "Toolboxes":
-            self.vToolboxDock.show()
-            self.vToolbox.setCurrentWidget(self.symbolsViewer)
+            self.lToolboxDock.show()
+            self.lToolbox.setCurrentWidget(self.symbolsViewer)
         elif self.layout == "Sidebars":
             self.leftSidebar.show()
             self.leftSidebar.setCurrentWidget(self.symbolsViewer)
@@ -3631,25 +3516,13 @@
             self.symbolsViewer.show()
         self.symbolsViewer.setFocus(Qt.ActiveWindowFocusReason)
         
-    def __toggleNumbersViewer(self):
-        """
-        Private slot to handle the toggle of the Numbers Viewer window.
-        """
-        hasFocus = self.numbersViewer.hasFocus()
-        shown = self.__toggleWindow(self.numbersViewer)
-        if shown:
-            self.__activateNumbersViewer()
-        else:
-            if hasFocus:
-                self.__activateViewmanager()
-
     def __activateNumbersViewer(self):
         """
         Private slot to handle the activation of the Numbers Viewer.
         """
         if self.layout == "Toolboxes":
-            self.vToolboxDock.show()
-            self.vToolbox.setCurrentWidget(self.numbersViewer)
+            self.lToolboxDock.show()
+            self.lToolbox.setCurrentWidget(self.numbersViewer)
         elif self.layout == "Sidebars":
             self.bottomSidebar.show()
             self.bottomSidebar.setCurrentWidget(self.numbersViewer)
@@ -5266,6 +5139,7 @@
         if self.layout == "Sidebars":
             self.leftSidebar.shutdown()
             self.bottomSidebar.shutdown()
+            self.rightSidebar.shutdown()
         
         if self.SAServer is not None:
             self.SAServer.shutdown()

eric ide

mercurial