Helpviewer/HelpSingleApplication.py

changeset 6630
bddd12f27a4c
parent 6625
a67fee7bc09c
child 6645
ad476851d7e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Helpviewer/HelpSingleApplication.py	Sat Dec 15 16:21:38 2018 +0100
@@ -0,0 +1,195 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2018 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+
+"""
+Module implementing the single application server and client for the web
+browser.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSignal
+
+from Toolbox.SingleApplication import SingleApplicationClient, \
+    SingleApplicationServer
+
+import Globals
+
+###########################################################################
+## define some module global stuff
+###########################################################################
+
+SAFile = "eric6_help"
+
+# define the protocol tokens
+SALoadUrl = 'LoadUrl'
+SANewTab = 'NewTab'
+SASearch = 'Search'
+SAShutdown = 'Shutdown'
+
+
+class HelpSingleApplicationServer(SingleApplicationServer):
+    """
+    Class implementing the single application server embedded within the
+    Help viewer.
+    
+    @signal loadUrl(str) emitted to load an URL
+    @signal newTab(str) emitted to load an URL in a new tab
+    @signal search(str) emitted to search for a given word
+    @signal shutdown() emitted to shut down the browser
+    """
+    loadUrl = pyqtSignal(str)
+    newTab = pyqtSignal(str)
+    search = pyqtSignal(str)
+    shutdown = pyqtSignal()
+    
+    def __init__(self, name=""):
+        """
+        Constructor
+        
+        @param name name to be used by the single application server
+        @type str
+        """
+        if not name:
+            name = SAFile
+        
+        SingleApplicationServer.__init__(self, name)
+
+    def handleCommand(self, command, arguments):
+        """
+        Public slot to handle the command sent by the client.
+        
+        @param command command sent by the client
+        @type str
+        @param arguments list of command arguments
+        @type list of str
+        """
+        if command == SALoadUrl:
+            self.__saLoadUrl(arguments[0])
+        
+        elif command == SANewTab:
+            self.__saNewTab(arguments[0])
+        
+        elif command == SASearch:
+            self.__saSearch(arguments[0])
+        
+        elif command == SAShutdown:
+            self.__saShutdown()
+    
+    def __saLoadUrl(self, url):
+        """
+        Private method to load an URL in a new tab.
+        
+        @param url URL to be loaded
+        @type str
+        """
+        self.loadUrl.emit(url)
+    
+    def __saNewTab(self, url):
+        """
+        Private method to load an URL .
+        
+        @param url URL to be loaded
+        @type str
+        """
+        self.newTab.emit(url)
+    
+    def __saSearch(self, word):
+        """
+        Private method to search for a given word.
+        
+        @param word word to be searched for
+        @type str
+        """
+        self.search.emit(word)
+    
+    def __saShutdown(self):
+        """
+        Private method to shut down the web browser.
+        """
+        self.shutdown.emit()
+
+
+class HelpSingleApplicationClient(SingleApplicationClient):
+    """
+    Class implementing the single application client of the help viewer.
+    """
+    def __init__(self, name=""):
+        """
+        Constructor
+        
+        @param name name to be used by the single application server
+        @type str
+        """
+        if not name:
+            name = SAFile
+        
+        SingleApplicationClient.__init__(self, name)
+    
+    def processArgs(self, args, disconnect=True):
+        """
+        Public method to process the command line args passed to the UI.
+        
+        @param args list of command line arguments
+        @type list of str
+        @param disconnect flag indicating to disconnect when done
+        @type bool
+        """
+        # no args, return
+        if args is None:
+            return
+        
+        if Globals.isWindowsPlatform():
+            argChars = ('-', '/')
+        else:
+            argChars = ('-', )
+        
+        for arg in args:
+            if arg.startswith("--search="):
+                self.__search(arg.replace("--search=", ""))
+            elif arg.startswith("--newtab="):
+                self.__newTab(arg.replace("--newtab=", ""))
+            elif arg == "--shutdown":
+                self.__shutdown()
+            elif not arg.startswith(argChars):
+                # it is an URL
+                self.__loadUrl(arg)
+        
+        if disconnect:
+            self.disconnect()
+    
+    def __loadUrl(self, url):
+        """
+        Private method to send an URL to be loaded.
+        
+        @param url URL to be loaded
+        @type str
+        """
+        self.sendCommand(SALoadUrl, [url])
+    
+    def __newTab(self, url):
+        """
+        Private method to send an URL to be loaded in a new tab.
+        
+        @param url URL to be loaded
+        @type str
+        """
+        self.sendCommand(SANewTab, [url])
+    
+    def __search(self, word):
+        """
+        Private method to send a word to search for.
+        
+        @param word to to be searched for
+        @type str
+        """
+        self.sendCommand(SASearch, [word])
+    
+    def __shutdown(self):
+        """
+        Private method to signal a shutdown request to the browser.
+        """
+        self.sendCommand(SAShutdown, [])

eric ide

mercurial