move QtFrontend to the Qt dialogue
[lilass.git] / gui.py
diff --git a/gui.py b/gui.py
index d586442711a4a27cf45fb331b78cdeacf0a104a4..4847668630baea6c0642a1eac74ea47e5ea32f30 100644 (file)
--- 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
 # 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:
 
 '''
 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.
 '''
     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()
 
 # list of available frontends
 frontends = collections.OrderedDict()