try:
# Be fine with PyQt4 not being installed
- from PyQt4 import QtCore, QtGui, uic
+ from PyQt5 import QtCore, QtWidgets, uic
- class PositionSelection(QtGui.QDialog):
+ class PositionSelection(QtWidgets.QDialog):
def __init__(self, situation):
# set up main window
super(PositionSelection, self).__init__()
syncIfMirror(self.intRes, self.extRes)
syncIfMirror(self.extRes, self.intRes)
- # connect the update function, and make sure we are in a correct state
+ # if situation has a previousSetup, use its values as initial state
+ if situation.previousSetup:
+ p = situation.previousSetup
+ self.intEnabled.setChecked(p.intResolution is not None)
+ self.extEnabled.setChecked(p.extResolution is not None)
+ if p.relPosition:
+ self.relPos.setCurrentIndex(p.relPosition.value - 1)
+ if p.extIsPrimary:
+ self.extPrimary.setChecked(True)
+ else:
+ self.intPrimary.setChecked(True)
+ # Pre-select the previous resolution
+ self._intDefaultRes = p.intResolution
+ self._extDefaultRes = p.extResolution
+ self._mirrorDefaultRes = p.intResolution if p.relPosition == RelativeScreenPosition.MIRROR else None # in case of a mirror, they would be the same anyway
+ else:
+ self._intDefaultRes = situation.internalConnector.getPreferredResolution()
+ self._extDefaultRes = situation.externalConnector.getPreferredResolution()
+ self._mirrorDefaultRes = None
+
+ # connect the update function
self.intEnabled.toggled.connect(self.updateEnabledControls)
self.extEnabled.toggled.connect(self.updateEnabledControls)
self.relPos.currentIndexChanged.connect(self.updateEnabledControls)
+
+ # make sure we are in a correct state
self.updateEnabledControls()
-
+
def getRelativeScreenPosition(self):
idx = self.relPos.currentIndex()
return self.relPos.itemData(idx)
- def fillResolutionBox(self, box, resolutions):
+ def fillResolutionBox(self, box, resolutions, select = None):
# if the count did not change, update in-place (this avoids flicker)
if box.count() == len(resolutions):
for idx, res in enumerate(resolutions):
box.setItemText(idx, str(res))
box.setItemData(idx, res)
+ if res == select:
+ box.setCurrentIndex(idx)
else:
# first clear it
while box.count() > 0:
# then fill it
for res in resolutions:
box.addItem(str(res), res)
+ if res == select:
+ box.setCurrentIndex(box.count() - 1) # select the most recently added one
def updateEnabledControls(self):
intEnabled = self.intEnabled.isChecked()
# which resolutions do we offer?
if self.isMirror:
commonRes = self._situation.commonResolutions()
- self.fillResolutionBox(self.intRes, commonRes)
- self.fillResolutionBox(self.extRes, commonRes)
+ self.fillResolutionBox(self.intRes, commonRes, select = self._mirrorDefaultRes)
+ self.fillResolutionBox(self.extRes, commonRes, select = self._mirrorDefaultRes)
self.intRes.setCurrentIndex(self.extRes.currentIndex())
else:
- self.fillResolutionBox(self.intRes, self._situation.internalResolutions())
- self.fillResolutionBox(self.extRes, self._situation.externalResolutions())
+ self.fillResolutionBox(self.intRes, self._situation.internalConnector.getResolutionList(), select = self._intDefaultRes)
+ self.fillResolutionBox(self.extRes, self._situation.externalConnector.getResolutionList(), select = self._extDefaultRes)
# configure position control
self.posGroup.setEnabled(bothEnabled)
self.posLabel1.setEnabled(bothEnabled)
self.posLabel2.setEnabled(bothEnabled)
self.relPos.setEnabled(bothEnabled)
# avoid having no screen
- self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(intEnabled or extEnabled)
+ self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(intEnabled or extEnabled)
def run(self):
self.exec_()
# Qt frontend
class QtFrontend:
def __init__(self):
- from PyQt4 import QtGui
- self.app = QtGui.QApplication(sys.argv)
+ from PyQt5 import QtWidgets
+ self.app = QtWidgets.QApplication(sys.argv)
print("Qt loaded")
def error(self, message):
- from PyQt4 import QtGui
- QtGui.QMessageBox.critical(None, 'Fatal error', message)
+ from PyQt5 import QtWidgets
+ QtWidgets.QMessageBox.critical(None, 'Fatal error', message)
def setup(self, situation):
return PositionSelection(situation).run()
@staticmethod
def isAvailable():
try:
- import PyQt4
+ import PyQt5
return True
except ImportError:
return False