--- /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, [])