default behaviour: no resolution selected -> take highest (the one at [0])
error handling implemented
from qt_dialogue import PositionSelection
app = QtGui.QApplication(sys.argv)
except Exception, e:
from qt_dialogue import PositionSelection
app = QtGui.QApplication(sys.argv)
except Exception, e:
from zenity_dialogue import run as zenity_run
qt_available = False
def error(message):
'''Displays a fatal error to the user'''
from zenity_dialogue import run as zenity_run
qt_available = False
def error(message):
'''Displays a fatal error to the user'''
- QtGui.QMessageBox.critical(None, 'Fatal error', message)
+ if qt_available:
+ QtGui.QMessageBox.critical(None, 'Fatal error', message)
+ else:
+ subprocess.Popen(["zenity", "--error", "--text="+message], stdout=subprocess.PIPE)
def setup(internalResolutions, externalResolutions):
'''Returns a ScreenSetup instance, or None if the user canceled'''
def setup(internalResolutions, externalResolutions):
'''Returns a ScreenSetup instance, or None if the user canceled'''
import subprocess
from dsl import RelativeScreenPosition, ScreenSetup, res2user
import subprocess
from dsl import RelativeScreenPosition, ScreenSetup, res2user
-def userChoose (title, choices, returns):
+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:
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:
- return switch.get(line.strip(), None)
+ return switch.get(line.strip(), fallback)
+ return fallback
def run (internalResolutions, externalResolutions):
def run (internalResolutions, externalResolutions):
- relpos = userChoose ("Position of external screen", ["Left of internal screen", "Right of internal screen", "Use external screen only"], [RelativeScreenPosition.LEFT, RelativeScreenPosition.RIGHT, RelativeScreenPosition.EXTERNAL_ONLY])
+ relpos = userChoose ("Position of external screen", ["Left of internal screen", "Right of internal screen", "Use external screen only"], [RelativeScreenPosition.LEFT, RelativeScreenPosition.RIGHT, RelativeScreenPosition.EXTERNAL_ONLY], None)
if relpos == None:
return None
intres = internalResolutions[0]
if relpos != RelativeScreenPosition.EXTERNAL_ONLY:
if relpos == None:
return None
intres = internalResolutions[0]
if relpos != RelativeScreenPosition.EXTERNAL_ONLY:
- intres = userChoose ("internal display resolution", map(res2user,internalResolutions), internalResolutions)
- if intres == None:
- return None
- extres = userChoose ("external display resolution", map(res2user,externalResolutions), externalResolutions)
- if extres == None:
- return None
- extprim = userChoose ("Which display should be the primary display?", ["internal display", "external display"], [False, True])
+ intres = userChoose ("internal display resolution", map(res2user,internalResolutions), internalResolutions, internalResolutions[0])
+ extres = userChoose ("external display resolution", map(res2user,externalResolutions), externalResolutions, externalResolutions[0])
+ extprim = userChoose ("Which display should be the primary display?", ["internal display", "external display"], [False, True], None)
if extprim == None:
return None
return ScreenSetup(relpos,intres,extres,extprim)
if extprim == None:
return None
return ScreenSetup(relpos,intres,extres,extprim)