X-Git-Url: https://git.ralfj.de/lilass.git/blobdiff_plain/6fd92bb21b1a743d0a794141277a7aea857d3c50..7f7312acf4942364d6a5bb0b63e7f7a823c11d9b:/gui.py diff --git a/gui.py b/gui.py index d586442..4847668 100644 --- a/gui.py +++ b/gui.py @@ -16,7 +16,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # This file abstracts GUI stuff away, so that the actual dsl.py does not have to deal with it -import sys ''' This module implements two functions: @@ -29,90 +28,12 @@ def setup(internalResolutions, externalResolutions): The user should be asked about his display setup preferences. The function returns None if the user cancelled, and an instance of dsl.ScreenSetup otherwise. ''' -import subprocess, collections +import collections -from question_frontend import QuestionFrontend -from screen import processOutputIt +from qt_frontend import QtFrontend +from cli_frontend import CLIFrontend +from zenity_frontend import ZenityFrontend -# Qt frontend -class QtFrontend: - def __init__(self): - from PyQt4 import QtGui - self.app = QtGui.QApplication(sys.argv) - print("Qt loaded") - - def error(self, message): - from PyQt4 import QtGui - QtGui.QMessageBox.critical(None, 'Fatal error', message) - - def setup(self, situation): - from qt_dialogue import PositionSelection - return PositionSelection(situation).run() - - @staticmethod - def isAvailable(): - try: - import PyQt4 - return True - except ImportError: - return False - - -# Zenity frontend -class ZenityFrontend(QuestionFrontend): - def error(self, message): - '''Displays a fatal error to the user''' - subprocess.check_call(["zenity", "--error", "--text="+message]) - def userChoose (self, title, choices, returns, fallback): - assert len(choices) == len(returns) - args = ["zenity", "--list", "--text="+title, "--column="]+choices - switch = dict (list(zip (choices,returns))) - try: - for line in processOutputIt(*args): - return switch.get(line.strip(), fallback) - except Exception: - # on user cancel, the return code of zenity is nonzero - return fallback - # if the output was empty - return fallback - def isAvailable(): - try: - processOutputIt("zenity", "--version") - return True - except FileNotFoundError: - return False - except PermissionError: - return False - -# CLI frontend -class CLIFrontend(QuestionFrontend): - def error(self, message): - print(message, file=sys.stderr) - - def userChoose (self, title, choices, returns, fallback): - while True: - # print question - print(title) - for i in range(len(choices)): - print("%d. %s"%(i,choices[i])) - print("Enter 'c' to cancel.") - # handle input - answer = input("> ") - if answer == "c": - return None - #else - try: - answerint = int(answer) - if answerint >= 0 and answerint < len(choices): - return returns[answerint] - except ValueError: - pass - # if we are here something invalid was entered - print("INVALID ANSWER: '%s'" % answer) - - @staticmethod - def isAvailable(): - return True # list of available frontends frontends = collections.OrderedDict()