lastSetup support in question frontends
authorConstantin Berhard <git.mail.enormator@xoxy.net>
Tue, 24 Nov 2015 12:41:33 +0000 (13:41 +0100)
committerConstantin Berhard <git.mail.enormator@xoxy.net>
Tue, 24 Nov 2015 12:41:33 +0000 (13:41 +0100)
database.py
qt_frontend.py
question_frontend.py
screen.py
zenity_frontend.py

index c65b4b93a905d2dd897ca3ac9e69c88ebc32231c..e4ec01157cd8cee9a70c4e41451455f34aee0aa1 100644 (file)
@@ -60,7 +60,7 @@ class Database:
         _, intres, extres, mode, extprim = result
         intres = Resolution.fromDatabase(intres) # this method is safe for NULLs
         extres = Resolution.fromDatabase(extres)
         _, intres, extres, mode, extprim = result
         intres = Resolution.fromDatabase(intres) # this method is safe for NULLs
         extres = Resolution.fromDatabase(extres)
-        mode = RelativeScreenPosition(mode)
+        mode = RelativeScreenPosition(mode) if mode else None
         extprim = bool(extprim) # 0 => False, 1 => True
         return ScreenSetup(intres, extres, mode, extprim)
     def __exit__(self, type, value, tb):
         extprim = bool(extprim) # 0 => False, 1 => True
         return ScreenSetup(intres, extres, mode, extprim)
     def __exit__(self, type, value, tb):
index 05c33ae26ddf0f91241dfa73d2e67e8a931336ae..b3ee61e41a5afc6ac3e052985fd2bc7c8dd73c94 100644 (file)
@@ -53,7 +53,6 @@ try:
                 self.intEnabled.setChecked(last.intResolution is not None)
                 self.extEnabled.setChecked(last.extResolution is not None)
                 if last.relPosition:
                 self.intEnabled.setChecked(last.intResolution is not None)
                 self.extEnabled.setChecked(last.extResolution is not None)
                 if last.relPosition:
-                    print("YO:",last.relPosition.value-1)
                     self.relPos.setCurrentIndex(last.relPosition.value-1)
 
             # make sure we are in a correct state
                     self.relPos.setCurrentIndex(last.relPosition.value-1)
 
             # make sure we are in a correct state
index a17b7ca95b2229f0eb9bc6a1d6bbfd68d55a7e5f..fc9e8c6dd0048f7c585f500d671451843c24e26e 100644 (file)
@@ -40,6 +40,13 @@ class QuestionFrontend:
         return self.userChoose("Select resolution for %s"%displayname, modedescs, availablemodes, None)
 
     def setup (self, situation):
         return self.userChoose("Select resolution for %s"%displayname, modedescs, availablemodes, None)
 
     def setup (self, situation):
+        if situation.lastSetup:
+            applyLast = self.userChoose("This display is known. The last setup for it was like this:\n%s.\nApply the last used configuration?" % str(situation.lastSetup), ("Apply last setup", "Enter different setup"), (True,False), None)
+            if applyLast is None:
+                return None
+            if applyLast is True:
+                return situation.lastSetup
+            assert applyLast is False
         operationmodes = list(OperationMode)
         operationmodedescs = list(map(lambda x: x.text, operationmodes))
         operationmode = self.userChoose ("Display setup", operationmodedescs, operationmodes, None)
         operationmodes = list(OperationMode)
         operationmodedescs = list(map(lambda x: x.text, operationmodes))
         operationmode = self.userChoose ("Display setup", operationmodedescs, operationmodes, None)
index 456c0bdcd6b9eb08e716dd74b3cf7b54f45ea4db..21774df08bd91cc96e9093ff3f9c05dcc01fa006 100644 (file)
--- a/screen.py
+++ b/screen.py
@@ -47,6 +47,8 @@ class RelativeScreenPosition(Enum):
         cls = self.__class__
         self._value_ = len(cls.__members__) + 1
         self.text = text
         cls = self.__class__
         self._value_ = len(cls.__members__) + 1
         self.text = text
+    def __str__(self):
+        return self.text
 
 class Resolution:
     '''Represents a resolution of a screen'''
 
 class Resolution:
     '''Represents a resolution of a screen'''
@@ -134,6 +136,13 @@ class ScreenSetup:
                 RelativeScreenPosition.MIRROR: '--same-as',
             }[self.relPosition], intName]
         return args
                 RelativeScreenPosition.MIRROR: '--same-as',
             }[self.relPosition], intName]
         return args
+    
+    def __str__(self):
+        if self.intResolution is None:
+            return "External display only, at "+str(self.extResolution)
+        if self.extResolution is None:
+            return "Internal display only, at "+str(self.intResolution)
+        return "External display %s at %s %s internal display %s at %s" % ("(primary)" if self.extIsPrimary else "", str(self.extResolution), str(self.relPosition), "" if self.extIsPrimary else "(primary)", str(self.intResolution))
 
 class Connector:
     def __init__(self, name=None):
 
 class Connector:
     def __init__(self, name=None):
index 7dd4d82dda4f26dfccae46a61609487ed2f67f5f..f6834b54c46cfceeb7d4be41bfaae8efe6978c8e 100644 (file)
@@ -29,7 +29,7 @@ class ZenityFrontend(QuestionFrontend):
 
     def userChoose (self, title, choices, returns, fallback):
         assert len(choices) == len(returns)
 
     def userChoose (self, title, choices, returns, fallback):
         assert len(choices) == len(returns)
-        args = ["zenity", "--list", "--text="+title, "--column="]+choices
+        args = ["zenity", "--list", "--text="+title, "--column="]+list(choices)
         switch = dict (list(zip (choices,returns)))
         try:
             for line in processOutputIt(*args):
         switch = dict (list(zip (choices,returns)))
         try:
             for line in processOutputIt(*args):