From: Ralf Jung Date: Wed, 17 Oct 2012 16:48:39 +0000 (+0200) Subject: Move the GUI frontend doc out of the Qt implementation X-Git-Url: https://git.ralfj.de/lilass.git/commitdiff_plain/0d513b43eb63d88ff9b1262dedda26b330d2505e?ds=inline;hp=4c3831b98072b3668350cd8c4140383f85484c4c Move the GUI frontend doc out of the Qt implementation --- diff --git a/gui.py b/gui.py index 155226b..b3929cb 100644 --- a/gui.py +++ b/gui.py @@ -18,6 +18,18 @@ # 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: + +def error(message): + This function displays the error message to the user in some appropriate fassion + +def setup(internalResolutions, externalResolutions): + Both arguments are lists of (width, height) tuples of resolutions. You can use dsl.res2user to obtain a user-readable representation of a resolution tuple. + 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. +''' + # frontend detectors def qtAvailable(): try: @@ -29,19 +41,18 @@ def qtAvailable(): def zenityAvailable(): return True # FIXME -# actual frontend +# actual frontends if qtAvailable(): from PyQt4 import QtGui from qt_dialogue import PositionSelection app = QtGui.QApplication(sys.argv) def error(message): - '''Displays a fatal error to the user''' QtGui.QMessageBox.critical(None, 'Fatal error', message) def setup(internalResolutions, externalResolutions): - '''Returns a ScreenSetup instance, or None if the user canceled''' return PositionSelection(internalResolutions, externalResolutions).run() + elif zenityAvailable(): import subprocess from zenity_dialogue import run as setup # this provides the setup function @@ -49,5 +60,6 @@ elif zenityAvailable(): def error(message): '''Displays a fatal error to the user''' subprocess.check_call(["zenity", "--error", "--text="+message]) + else: print >> sys.stderr, 'No GUI frontend available, please make sure PyQt4 or Zenity is installed' diff --git a/zenity_dialogue.py b/zenity_dialogue.py index 45cf557..69365e8 100644 --- a/zenity_dialogue.py +++ b/zenity_dialogue.py @@ -22,7 +22,7 @@ def userChoose (title, choices, returns, fallback): assert len(choices) == len(returns) p = subprocess.Popen(["zenity", "--list", "--text="+title, "--column="]+choices, stdout=subprocess.PIPE) switch = dict (zip (choices,returns)) - for line in p.stdout: + for line in p.stdout: # FIXME use p.communicate()[0] instead to get entire stdout and ensure the process terminates. also check p.returncode. return switch.get(line.strip(), fallback) return fallback