Merge pull request #1 from ConnyOnny/master
[lilass.git] / gui.py
diff --git a/gui.py b/gui.py
index 50cb3a3d6377c7ce4bed77040fe79099ac08aca4..62decc6b326c61e87a90ce02c673594340059f6a 100644 (file)
--- a/gui.py
+++ b/gui.py
@@ -1,5 +1,5 @@
 # DSL - easy Display Setup for Laptops
 # DSL - easy Display Setup for Laptops
-# Copyright (C) 2012 Ralf Jung <post@ralfj.de>
+# Copyright (C) 2012-2015 Ralf Jung <post@ralfj.de>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -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,7 +28,11 @@ 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 sys
+import collections
+
+from cli_frontend import CLIFrontend
+from zenity_frontend import ZenityFrontend
 
 # Qt frontend
 class QtFrontend:
 
 # Qt frontend
 class QtFrontend:
@@ -42,9 +45,9 @@ class QtFrontend:
         from PyQt4 import QtGui
         QtGui.QMessageBox.critical(None, 'Fatal error', message)
     
         from PyQt4 import QtGui
         QtGui.QMessageBox.critical(None, 'Fatal error', message)
     
-    def setup(self, internalResolutions, externalResolutions, commonRes):
+    def setup(self, situation):
         from qt_dialogue import PositionSelection
         from qt_dialogue import PositionSelection
-        return PositionSelection(internalResolutions, externalResolutions, commonRes).run()
+        return PositionSelection(situation).run()
     
     @staticmethod
     def isAvailable():
     
     @staticmethod
     def isAvailable():
@@ -54,39 +57,6 @@ class QtFrontend:
         except ImportError:
             return False
 
         except ImportError:
             return False
 
-
-# Zenity frontend
-class ZenityFrontend:
-    def error(message):
-        '''Displays a fatal error to the user'''
-        subprocess.check_call(["zenity", "--error", "--text="+message])
-    
-    def setup(self, internalResolutions, externalResolutions, commonRes):
-        from zenity_dialogue import run
-        run(internalResolutions, externalResolutions)
-    
-    @staticmethod
-    def isAvailable():
-        try:
-            from dsl import processOutputIt
-            processOutputIt("zenity", "--version")
-            return True
-        except Exception:
-            return False
-
-
-# CLI frontend
-class CLIFrontend:
-    def error(self, message):
-        print(message, file=sys.stderr)
-    
-    def setup(self, internalResolutions, externalResolutions, commonRes):
-        raise Exception("Choosing the setup interactively is not supported with the CLI frontend")
-    
-    @staticmethod
-    def isAvailable():
-        return True
-
 # list of available frontends
 frontends = collections.OrderedDict()
 frontends["qt"] = QtFrontend
 # list of available frontends
 frontends = collections.OrderedDict()
 frontends["qt"] = QtFrontend
@@ -100,8 +70,10 @@ def getFrontend(name = None):
         if name in frontends:
             if frontends[name].isAvailable():
                 return frontends[name]() # call constructor
         if name in frontends:
             if frontends[name].isAvailable():
                 return frontends[name]() # call constructor
-        # frontend not found or not available
-        raise Exception("Frontend %s not found or not available" % name)
+            else:
+                raise Exception("Frontend %s not available" % name)
+        # frontend not found
+        raise Exception("Frontend %s not found" % name)
     # auto-detect
     for frontend in frontends.values():
         if frontend.isAvailable():
     # auto-detect
     for frontend in frontends.values():
         if frontend.isAvailable():