diff --git a/buildPy2app.py b/buildPy2app.py new file mode 100644 index 0000000..5cc8ccb --- /dev/null +++ b/buildPy2app.py @@ -0,0 +1,32 @@ +""" +This is a setup.py script generated by py2applet + +Usage: + python setup.py py2app +""" + +from setuptools import setup +from glob import glob +import syncplay + +APP = ['syncplayClient.py'] +DATA_FILES = [ + ('resources', glob('resources/*.png')), +] +OPTIONS = { + 'iconfile':'resources/icon.icns', + 'plist': { + 'CFBundleName':'Syncplay', + 'CFBundleShortVersionString':syncplay.version, + 'CFBundleIdentifier':'pl.syncplay.Syncplay', + 'NSHumanReadableCopyright': '@ 2017 Syncplay All Rights Reserved' + } +} + +setup( + app=APP, + name='Syncplay', + data_files=DATA_FILES, + options={'py2app': OPTIONS}, + setup_requires=['py2app'], +) diff --git a/resources/icon.icns b/resources/icon.icns new file mode 100644 index 0000000..10fb766 Binary files /dev/null and b/resources/icon.icns differ diff --git a/syncplay/ui/ConfigurationGetter.py b/syncplay/ui/ConfigurationGetter.py index c45c6cc..222a764 100755 --- a/syncplay/ui/ConfigurationGetter.py +++ b/syncplay/ui/ConfigurationGetter.py @@ -401,15 +401,15 @@ class ConfigurationGetter(object): self._overrideConfigWithArgs(args) if not self._config['noGui']: try: - from PySide import QtGui # @UnresolvedImport - from PySide.QtCore import QCoreApplication - from syncplay.vendor import qt4reactor + from PySide2 import QtWidgets + from PySide2.QtCore import QCoreApplication + from syncplay.vendor import qt5reactor if QCoreApplication.instance() is None: - self.app = QtGui.QApplication(sys.argv) - qt4reactor.install() + self.app = QtWidgets.QApplication(sys.argv) + qt5reactor.install() if sys.platform.startswith('darwin'): import appnope - appnope.nope() + appnope.nope() except ImportError: print getMessage("unable-import-gui-error") self._config['noGui'] = True diff --git a/syncplay/ui/GuiConfiguration.py b/syncplay/ui/GuiConfiguration.py index d8e832a..47a2412 100644 --- a/syncplay/ui/GuiConfiguration.py +++ b/syncplay/ui/GuiConfiguration.py @@ -1,6 +1,7 @@ -from PySide import QtCore, QtGui -from PySide.QtCore import QSettings, Qt, QCoreApplication, QUrl -from PySide.QtGui import QApplication, QLineEdit, QCursor, QLabel, QCheckBox, QDesktopServices, QIcon, QImage, QButtonGroup, QRadioButton, QDoubleSpinBox, QPlainTextEdit +from PySide2 import QtCore, QtWidgets, QtGui +from PySide2.QtCore import Qt, QSettings, QCoreApplication, QSize, QPoint, QUrl, QLine +from PySide2.QtWidgets import QApplication, QLineEdit, QLabel, QCheckBox, QButtonGroup, QRadioButton, QDoubleSpinBox, QPlainTextEdit +from PySide2.QtGui import QCursor, QIcon, QImage, QDesktopServices from syncplay.players.playerFactory import PlayerFactory from datetime import datetime from syncplay import utils @@ -19,7 +20,7 @@ class GuiConfiguration: def run(self): if QCoreApplication.instance() is None: - self.app = QtGui.QApplication(sys.argv) + self.app = QtWidgets.QApplication(sys.argv) dialog = ConfigDialog(self.config, self._availablePlayerPaths, self.error, self.defaultConfig) dialog.exec_() @@ -65,22 +66,22 @@ class GetPlayerIconThread(threading.Thread, QtCore.QObject): self.done.emit(iconpath, playerpath) -class ConfigDialog(QtGui.QDialog): +class ConfigDialog(QtWidgets.QDialog): pressedclosebutton = True moreToggling = False def automaticUpdatePromptCheck(self): if self.automaticupdatesCheckbox.checkState() == Qt.PartiallyChecked: - reply = QtGui.QMessageBox.question(self, "Syncplay", - getMessage("promptforupdate-label"), QtGui.QMessageBox.StandardButton.Yes | QtGui.QMessageBox.StandardButton.No) - if reply == QtGui.QMessageBox.Yes: + reply = QtWidgets.QMessageBox.question(self, "Syncplay", + getMessage("promptforupdate-label"), QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No) + if reply == QtWidgets.QMessageBox.Yes: self.automaticupdatesCheckbox.setChecked(True) else: self.automaticupdatesCheckbox.setChecked(False) def moreToggled(self): - self.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + self.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) if self.moreToggling == False: self.moreToggling = True @@ -113,7 +114,7 @@ class ConfigDialog(QtGui.QDialog): self.executablepathCombobox.setFixedWidth(self.mediapathTextbox.width()) def openHelp(self): - self.QtGui.QDesktopServices.openUrl(QUrl("http://syncplay.pl/guide/client/")) + self.QtWidgets.QDesktopServices.openUrl(QUrl("http://syncplay.pl/guide/client/")) def safenormcaseandpath(self, path): if utils.isURL(path): @@ -210,10 +211,10 @@ class ConfigDialog(QtGui.QDialog): def languageChanged(self): setLanguage(unicode(self.languageCombobox.itemData(self.languageCombobox.currentIndex()))) - QtGui.QMessageBox.information(self, "Syncplay", getMessage("language-changed-msgbox-label")) + QtWidgets.QMessageBox.information(self, "Syncplay", getMessage("language-changed-msgbox-label")) def browsePlayerpath(self): - options = QtGui.QFileDialog.Options() + options = QtWidgets.QFileDialog.Options() defaultdirectory = "" browserfilter = "All files (*)" @@ -232,7 +233,7 @@ class ConfigDialog(QtGui.QDialog): elif "bsd" in sys.platform or sys.platform.startswith('dragonfly'): defaultdirectory = "/usr/local/bin" - fileName, filtr = QtGui.QFileDialog.getOpenFileName(self, + fileName, filtr = QtWidgets.QFileDialog.getOpenFileName(self, "Browse for media player executable", defaultdirectory, browserfilter, "", options) @@ -336,11 +337,11 @@ class ConfigDialog(QtGui.QDialog): self.hostCombobox.setEditText(currentServer) def showErrorMessage(self, errorMessage): - QtGui.QMessageBox.warning(self, "Syncplay", errorMessage) + QtWidgets.QMessageBox.warning(self, "Syncplay", errorMessage) def browseMediapath(self): self.loadMediaBrowseSettings() - options = QtGui.QFileDialog.Options() + options = QtWidgets.QFileDialog.Options() if self.config["mediaSearchDirectories"] and os.path.isdir(self.config["mediaSearchDirectories"][0]): defaultdirectory = self.config["mediaSearchDirectories"][0] elif os.path.isdir(self.mediadirectory): @@ -352,7 +353,7 @@ class ConfigDialog(QtGui.QDialog): else: defaultdirectory = "" browserfilter = "All files (*)" - fileName, filtr = QtGui.QFileDialog.getOpenFileName(self, "Browse for media files", defaultdirectory, + fileName, filtr = QtWidgets.QFileDialog.getOpenFileName(self, "Browse for media files", defaultdirectory, browserfilter, "", options) if fileName: self.mediapathTextbox.setText(os.path.normpath(fileName)) @@ -508,9 +509,9 @@ class ConfigDialog(QtGui.QDialog): self.mediaSearchDirectories = self.config["mediaSearchDirectories"] self.trustedDomains = self.config["trustedDomains"] - self.connectionSettingsGroup = QtGui.QGroupBox(getMessage("connection-group-title")) + self.connectionSettingsGroup = QtWidgets.QGroupBox(getMessage("connection-group-title")) self.loadSavedPublicServerList() - self.hostCombobox = QtGui.QComboBox(self) + self.hostCombobox = QtWidgets.QComboBox(self) if self.publicServers: i = 0 for publicServer in self.publicServers: @@ -521,7 +522,7 @@ class ConfigDialog(QtGui.QDialog): self.hostCombobox.setEditText(host) self.hostCombobox.setFixedWidth(165) self.hostLabel = QLabel(getMessage("host-label"), self) - self.findServerButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + 'arrow_refresh.png'), getMessage("update-server-list-label")) + self.findServerButton = QtWidgets.QPushButton(QtGui.QIcon(resourcespath + 'arrow_refresh.png'), getMessage("update-server-list-label")) self.findServerButton.clicked.connect(self.updateServerList) self.findServerButton.setToolTip(getMessage("update-server-list-tooltip")) self.usernameTextbox = QLineEdit(self) @@ -545,7 +546,7 @@ class ConfigDialog(QtGui.QDialog): self.usernameTextbox.setMaxLength(constants.MAX_USERNAME_LENGTH) self.defaultroomTextbox.setMaxLength(constants.MAX_ROOM_NAME_LENGTH) - self.connectionSettingsLayout = QtGui.QGridLayout() + self.connectionSettingsLayout = QtWidgets.QGridLayout() self.connectionSettingsLayout.addWidget(self.hostLabel, 0, 0) self.connectionSettingsLayout.addWidget(self.hostCombobox, 0, 1) self.connectionSettingsLayout.addWidget(self.findServerButton, 0, 2) @@ -562,11 +563,11 @@ class ConfigDialog(QtGui.QDialog): self.playerargsTextbox.textEdited.connect(self.changedPlayerArgs) self.playerargsLabel = QLabel(getMessage("player-arguments-label"), self) - self.mediaplayerSettingsGroup = QtGui.QGroupBox(getMessage("media-setting-title")) + self.mediaplayerSettingsGroup = QtWidgets.QGroupBox(getMessage("media-setting-title")) self.executableiconImage = QtGui.QImage() self.executableiconLabel = QLabel(self) self.executableiconLabel.setMinimumWidth(16) - self.executablepathCombobox = QtGui.QComboBox(self) + self.executablepathCombobox = QtWidgets.QComboBox(self) self.executablepathCombobox.setEditable(True) self.executablepathCombobox.currentIndexChanged.connect(self.updateExecutableIcon) self.executablepathCombobox.setEditText(self._tryToFillPlayerPath(config['playerPath'], playerpaths)) @@ -574,11 +575,11 @@ class ConfigDialog(QtGui.QDialog): self.executablepathCombobox.editTextChanged.connect(self.updateExecutableIcon) self.executablepathLabel = QLabel(getMessage("executable-path-label"), self) - self.executablebrowseButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + 'folder_explore.png'), getMessage("browse-label")) + self.executablebrowseButton = QtWidgets.QPushButton(QtGui.QIcon(resourcespath + 'folder_explore.png'), getMessage("browse-label")) self.executablebrowseButton.clicked.connect(self.browsePlayerpath) self.mediapathTextbox = QLineEdit(config['file'], self) self.mediapathLabel = QLabel(getMessage("media-path-label"), self) - self.mediabrowseButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + 'folder_explore.png'), getMessage("browse-label")) + self.mediabrowseButton = QtWidgets.QPushButton(QtGui.QIcon(resourcespath + 'folder_explore.png'), getMessage("browse-label")) self.mediabrowseButton.clicked.connect(self.browseMediapath) self.executablepathLabel.setObjectName("executable-path") @@ -588,7 +589,7 @@ class ConfigDialog(QtGui.QDialog): self.playerargsLabel.setObjectName("player-arguments") self.playerargsTextbox.setObjectName(constants.LOAD_SAVE_MANUALLY_MARKER + "player-arguments") - self.mediaplayerSettingsLayout = QtGui.QGridLayout() + self.mediaplayerSettingsLayout = QtWidgets.QGridLayout() self.mediaplayerSettingsLayout.addWidget(self.executablepathLabel, 0, 0) self.mediaplayerSettingsLayout.addWidget(self.executableiconLabel, 0, 1) self.mediaplayerSettingsLayout.addWidget(self.executablepathCombobox, 0, 2) @@ -603,8 +604,8 @@ class ConfigDialog(QtGui.QDialog): self.showmoreCheckbox = QCheckBox(getMessage("more-title")) self.showmoreCheckbox.setObjectName(constants.LOAD_SAVE_MANUALLY_MARKER + "more") - self.basicOptionsFrame = QtGui.QFrame() - self.basicOptionsLayout = QtGui.QVBoxLayout() + self.basicOptionsFrame = QtWidgets.QFrame() + self.basicOptionsLayout = QtWidgets.QVBoxLayout() if error: self.errorLabel = QLabel(self) if error[:1] != constants.ERROR_MESSAGE_MARKER: @@ -620,19 +621,19 @@ class ConfigDialog(QtGui.QDialog): self.basicOptionsLayout.addWidget(self.connectionSettingsGroup) self.basicOptionsLayout.addSpacing(5) self.basicOptionsLayout.addWidget(self.mediaplayerSettingsGroup) - self.basicOptionsFrame.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + self.basicOptionsFrame.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.basicOptionsFrame.setLayout(self.basicOptionsLayout) self.stackedLayout.addWidget(self.basicOptionsFrame) def addReadinessTab(self): - self.readyFrame = QtGui.QFrame() - self.readyLayout = QtGui.QVBoxLayout() + self.readyFrame = QtWidgets.QFrame() + self.readyLayout = QtWidgets.QVBoxLayout() self.readyFrame.setLayout(self.readyLayout) # Initial state - self.readyInitialGroup = QtGui.QGroupBox(getMessage("readiness-title")) - self.readyInitialLayout = QtGui.QVBoxLayout() + self.readyInitialGroup = QtWidgets.QGroupBox(getMessage("readiness-title")) + self.readyInitialLayout = QtWidgets.QVBoxLayout() self.readyInitialGroup.setLayout(self.readyInitialLayout) self.readyatstartCheckbox = QCheckBox(getMessage("readyatstart-label")) self.readyatstartCheckbox.setObjectName("readyAtStart") @@ -640,8 +641,8 @@ class ConfigDialog(QtGui.QDialog): self.readyLayout.addWidget(self.readyInitialGroup) # Automatically pausing - self.readyPauseGroup = QtGui.QGroupBox(getMessage("pausing-title")) - self.readyPauseLayout = QtGui.QVBoxLayout() + self.readyPauseGroup = QtWidgets.QGroupBox(getMessage("pausing-title")) + self.readyPauseLayout = QtWidgets.QVBoxLayout() self.readyPauseGroup.setLayout(self.readyPauseLayout) self.pauseonleaveCheckbox = QCheckBox(getMessage("pauseonleave-label")) self.pauseonleaveCheckbox.setObjectName("pauseOnLeave") @@ -649,8 +650,8 @@ class ConfigDialog(QtGui.QDialog): self.readyLayout.addWidget(self.readyPauseGroup) # Unpausing - self.readyUnpauseGroup = QtGui.QGroupBox(getMessage("unpause-title")) - self.readyUnpauseLayout = QtGui.QVBoxLayout() + self.readyUnpauseGroup = QtWidgets.QGroupBox(getMessage("unpause-title")) + self.readyUnpauseLayout = QtWidgets.QVBoxLayout() self.readyUnpauseGroup.setLayout(self.readyUnpauseLayout) self.readyUnpauseButtonGroup = QButtonGroup() self.unpauseIfAlreadyReadyOption = QRadioButton(getMessage("unpause-ifalreadyready-option")) @@ -679,12 +680,12 @@ class ConfigDialog(QtGui.QDialog): self.stackedLayout.addWidget(self.readyFrame) def addMiscTab(self): - self.miscFrame = QtGui.QFrame() - self.miscLayout = QtGui.QVBoxLayout() + self.miscFrame = QtWidgets.QFrame() + self.miscLayout = QtWidgets.QVBoxLayout() self.miscFrame.setLayout(self.miscLayout) - self.coreSettingsGroup = QtGui.QGroupBox(getMessage("core-behaviour-title")) - self.coreSettingsLayout = QtGui.QGridLayout() + self.coreSettingsGroup = QtWidgets.QGroupBox(getMessage("core-behaviour-title")) + self.coreSettingsLayout = QtWidgets.QGridLayout() self.coreSettingsGroup.setLayout(self.coreSettingsLayout) ### Privacy: @@ -727,8 +728,8 @@ class ConfigDialog(QtGui.QDialog): ## Syncplay internals - self.internalSettingsGroup = QtGui.QGroupBox(getMessage("syncplay-internals-title")) - self.internalSettingsLayout = QtGui.QVBoxLayout() + self.internalSettingsGroup = QtWidgets.QGroupBox(getMessage("syncplay-internals-title")) + self.internalSettingsLayout = QtWidgets.QVBoxLayout() self.internalSettingsGroup.setLayout(self.internalSettingsLayout) self.alwaysshowCheckbox = QCheckBox(getMessage("forceguiprompt-label")) @@ -741,13 +742,13 @@ class ConfigDialog(QtGui.QDialog): ## Media path directories - self.mediasearchSettingsGroup = QtGui.QGroupBox(getMessage("syncplay-mediasearchdirectories-title")) - self.mediasearchSettingsLayout = QtGui.QVBoxLayout() + self.mediasearchSettingsGroup = QtWidgets.QGroupBox(getMessage("syncplay-mediasearchdirectories-title")) + self.mediasearchSettingsLayout = QtWidgets.QVBoxLayout() self.mediasearchSettingsGroup.setLayout(self.mediasearchSettingsLayout) self.mediasearchTextEdit = QPlainTextEdit(utils.getListAsMultilineString(self.mediaSearchDirectories)) self.mediasearchTextEdit.setObjectName(constants.LOAD_SAVE_MANUALLY_MARKER + "mediasearcdirectories-arguments") - self.mediasearchTextEdit.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap) + self.mediasearchTextEdit.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) self.mediasearchSettingsLayout.addWidget(self.mediasearchTextEdit) self.mediasearchSettingsGroup.setMaximumHeight(self.mediasearchSettingsGroup.minimumSizeHint().height()) @@ -758,12 +759,12 @@ class ConfigDialog(QtGui.QDialog): self.stackedLayout.addWidget(self.miscFrame) def addSyncTab(self): - self.syncSettingsFrame = QtGui.QFrame() - self.syncSettingsLayout = QtGui.QVBoxLayout() + self.syncSettingsFrame = QtWidgets.QFrame() + self.syncSettingsLayout = QtWidgets.QVBoxLayout() - self.desyncSettingsGroup = QtGui.QGroupBox(getMessage("sync-otherslagging-title")) - self.desyncOptionsFrame = QtGui.QFrame() - self.desyncSettingsOptionsLayout = QtGui.QHBoxLayout() + self.desyncSettingsGroup = QtWidgets.QGroupBox(getMessage("sync-otherslagging-title")) + self.desyncOptionsFrame = QtWidgets.QFrame() + self.desyncSettingsOptionsLayout = QtWidgets.QHBoxLayout() config = self.config self.slowdownCheckbox = QCheckBox(getMessage("slowondesync-label")) @@ -773,9 +774,9 @@ class ConfigDialog(QtGui.QDialog): self.fastforwardCheckbox = QCheckBox(getMessage("fastforwardondesync-label")) self.fastforwardCheckbox.setObjectName("fastforwardOnDesync") - self.desyncSettingsLayout = QtGui.QGridLayout() + self.desyncSettingsLayout = QtWidgets.QGridLayout() self.desyncSettingsLayout.setSpacing(2) - self.desyncFrame = QtGui.QFrame() + self.desyncFrame = QtWidgets.QFrame() self.desyncFrame.setLineWidth(0) self.desyncFrame.setMidLineWidth(0) @@ -788,9 +789,9 @@ class ConfigDialog(QtGui.QDialog): self.desyncFrame.setLayout(self.syncSettingsLayout) - self.othersyncSettingsGroup = QtGui.QGroupBox(getMessage("sync-youlaggging-title")) - self.othersyncOptionsFrame = QtGui.QFrame() - self.othersyncSettingsLayout = QtGui.QGridLayout() + self.othersyncSettingsGroup = QtWidgets.QGroupBox(getMessage("sync-youlaggging-title")) + self.othersyncOptionsFrame = QtWidgets.QFrame() + self.othersyncSettingsLayout = QtWidgets.QGridLayout() self.dontslowwithmeCheckbox = QCheckBox(getMessage("dontslowdownwithme-label")) self.dontslowwithmeCheckbox.setObjectName("dontSlowDownWithMe") @@ -803,13 +804,13 @@ class ConfigDialog(QtGui.QDialog): ## Trusted domains - self.trusteddomainsSettingsGroup = QtGui.QGroupBox(getMessage("syncplay-trusteddomains-title")) - self.trusteddomainsSettingsLayout = QtGui.QVBoxLayout() + self.trusteddomainsSettingsGroup = QtWidgets.QGroupBox(getMessage("syncplay-trusteddomains-title")) + self.trusteddomainsSettingsLayout = QtWidgets.QVBoxLayout() self.trusteddomainsSettingsGroup.setLayout(self.trusteddomainsSettingsLayout) self.trusteddomainsTextEdit = QPlainTextEdit(utils.getListAsMultilineString(self.trustedDomains)) self.trusteddomainsTextEdit.setObjectName(constants.LOAD_SAVE_MANUALLY_MARKER + "trusteddomains-arguments") - self.trusteddomainsTextEdit.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap) + self.trusteddomainsTextEdit.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) self.trusteddomainsSettingsLayout.addWidget(self.trusteddomainsTextEdit) self.trusteddomainsSettingsGroup.setMaximumHeight(self.trusteddomainsSettingsGroup.minimumSizeHint().height()) @@ -824,14 +825,14 @@ class ConfigDialog(QtGui.QDialog): self.stackedLayout.addWidget(self.syncSettingsFrame) def addMessageTab(self): - self.messageFrame = QtGui.QFrame() - self.messageLayout = QtGui.QVBoxLayout() + self.messageFrame = QtWidgets.QFrame() + self.messageLayout = QtWidgets.QVBoxLayout() self.messageLayout.setAlignment(Qt.AlignTop) # OSD - self.osdSettingsGroup = QtGui.QGroupBox(getMessage("messages-osd-title")) - self.osdSettingsLayout = QtGui.QVBoxLayout() - self.osdSettingsFrame = QtGui.QFrame() + self.osdSettingsGroup = QtWidgets.QGroupBox(getMessage("messages-osd-title")) + self.osdSettingsLayout = QtWidgets.QVBoxLayout() + self.osdSettingsFrame = QtWidgets.QFrame() self.showOSDCheckbox = QCheckBox(getMessage("showosd-label")) self.showOSDCheckbox.setObjectName("showOSD") @@ -871,23 +872,23 @@ class ConfigDialog(QtGui.QDialog): # Other display - self.displaySettingsGroup = QtGui.QGroupBox(getMessage("messages-other-title")) - self.displaySettingsLayout = QtGui.QVBoxLayout() + self.displaySettingsGroup = QtWidgets.QGroupBox(getMessage("messages-other-title")) + self.displaySettingsLayout = QtWidgets.QVBoxLayout() self.displaySettingsLayout.setAlignment(Qt.AlignTop & Qt.AlignLeft) - self.displaySettingsFrame = QtGui.QFrame() + self.displaySettingsFrame = QtWidgets.QFrame() self.showDurationNotificationCheckbox = QCheckBox(getMessage("showdurationnotification-label")) self.showDurationNotificationCheckbox.setObjectName("showDurationNotification") self.displaySettingsLayout.addWidget(self.showDurationNotificationCheckbox) - self.languageFrame = QtGui.QFrame() - self.languageLayout = QtGui.QHBoxLayout() + self.languageFrame = QtWidgets.QFrame() + self.languageLayout = QtWidgets.QHBoxLayout() self.languageLayout.setContentsMargins(0, 0, 0, 0) self.languageFrame.setLayout(self.languageLayout) - self.languageFrame.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + self.languageFrame.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.languageLayout.setAlignment(Qt.AlignTop & Qt.AlignLeft) self.languageLabel = QLabel(getMessage("language-label"), self) - self.languageCombobox = QtGui.QComboBox(self) + self.languageCombobox = QtWidgets.QComboBox(self) self.languageCombobox.addItem(getMessage("automatic-language").format(getMessage("LANGUAGE", getInitialLanguage()))) self.languages = getLanguages() @@ -917,22 +918,22 @@ class ConfigDialog(QtGui.QDialog): config = self.config resourcespath = self.resourcespath - self.bottomButtonFrame = QtGui.QFrame() - self.bottomButtonLayout = QtGui.QHBoxLayout() - self.helpButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + u'help.png'), getMessage("help-label")) + self.bottomButtonFrame = QtWidgets.QFrame() + self.bottomButtonLayout = QtWidgets.QHBoxLayout() + self.helpButton = QtWidgets.QPushButton(QtGui.QIcon(self.resourcespath + u'help.png'), getMessage("help-label")) self.helpButton.setObjectName("help") self.helpButton.setMaximumSize(self.helpButton.sizeHint()) self.helpButton.pressed.connect(self.openHelp) - self.resetButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + u'cog_delete.png'),getMessage("reset-label")) + self.resetButton = QtWidgets.QPushButton(QtGui.QIcon(resourcespath + u'cog_delete.png'),getMessage("reset-label")) self.resetButton.setMaximumSize(self.resetButton.sizeHint()) self.resetButton.setObjectName("reset") self.resetButton.pressed.connect(self.resetSettings) - self.runButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + u'accept.png'), getMessage("run-label")) + self.runButton = QtWidgets.QPushButton(QtGui.QIcon(resourcespath + u'accept.png'), getMessage("run-label")) self.runButton.pressed.connect(self._runWithoutStoringConfig) self.runButton.setToolTip(getMessage("nostore-tooltip")) - self.storeAndRunButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + u'accept.png'), getMessage("storeandrun-label")) + self.storeAndRunButton = QtWidgets.QPushButton(QtGui.QIcon(resourcespath + u'accept.png'), getMessage("storeandrun-label")) self.storeAndRunButton.pressed.connect(self._saveDataAndLeave) self.bottomButtonLayout.addWidget(self.helpButton) self.bottomButtonLayout.addWidget(self.resetButton) @@ -942,9 +943,9 @@ class ConfigDialog(QtGui.QDialog): self.bottomButtonLayout.setContentsMargins(5,0,5,0) self.mainLayout.addWidget(self.bottomButtonFrame, 1, 0, 1, 2) - self.bottomCheckboxFrame = QtGui.QFrame() + self.bottomCheckboxFrame = QtWidgets.QFrame() self.bottomCheckboxFrame.setContentsMargins(0,0,0,0) - self.bottomCheckboxLayout = QtGui.QGridLayout() + self.bottomCheckboxLayout = QtWidgets.QGridLayout() self.alwaysshowCheckbox = QCheckBox(getMessage("forceguiprompt-label")) self.enableplaylistsCheckbox = QCheckBox(getMessage("sharedplaylistenabled-label")) @@ -957,14 +958,14 @@ class ConfigDialog(QtGui.QDialog): self.mainLayout.addWidget(self.bottomCheckboxFrame, 2, 0, 1, 2) def tabList(self): - self.tabListLayout = QtGui.QHBoxLayout() - self.tabListFrame = QtGui.QFrame() - self.tabListWidget = QtGui.QListWidget() - self.tabListWidget.addItem(QtGui.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"house.png"),getMessage("basics-label"))) - self.tabListWidget.addItem(QtGui.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"control_pause_blue.png"),getMessage("readiness-label"))) - self.tabListWidget.addItem(QtGui.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"film_link.png"),getMessage("sync-label"))) - self.tabListWidget.addItem(QtGui.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"comments.png"),getMessage("messages-label"))) - self.tabListWidget.addItem(QtGui.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"cog.png"),getMessage("misc-label"))) + self.tabListLayout = QtWidgets.QHBoxLayout() + self.tabListFrame = QtWidgets.QFrame() + self.tabListWidget = QtWidgets.QListWidget() + self.tabListWidget.addItem(QtWidgets.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"house.png"),getMessage("basics-label"))) + self.tabListWidget.addItem(QtWidgets.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"control_pause_blue.png"),getMessage("readiness-label"))) + self.tabListWidget.addItem(QtWidgets.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"film_link.png"),getMessage("sync-label"))) + self.tabListWidget.addItem(QtWidgets.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"comments.png"),getMessage("messages-label"))) + self.tabListWidget.addItem(QtWidgets.QListWidgetItem(QtGui.QIcon(self.resourcespath + u"cog.png"),getMessage("misc-label"))) self.tabListLayout.addWidget(self.tabListWidget) self.tabListFrame.setLayout(self.tabListLayout) self.tabListFrame.setFixedWidth(self.tabListFrame.minimumSizeHint().width()) @@ -1045,6 +1046,7 @@ class ConfigDialog(QtGui.QDialog): self.config['clearGUIData'] = False self.clearGUIData() + self.QtWidgets = QtWidgets self.QtGui = QtGui self.error = error if sys.platform.startswith('win'): @@ -1060,11 +1062,11 @@ class ConfigDialog(QtGui.QDialog): self.setWindowFlags(self.windowFlags() & Qt.WindowCloseButtonHint & ~Qt.WindowContextHelpButtonHint) self.setWindowIcon(QtGui.QIcon(resourcespath + u"syncplay.png")) - self.stackedLayout = QtGui.QStackedLayout() - self.stackedFrame = QtGui.QFrame() + self.stackedLayout = QtWidgets.QStackedLayout() + self.stackedFrame = QtWidgets.QFrame() self.stackedFrame.setLayout(self.stackedLayout) - self.mainLayout = QtGui.QGridLayout() + self.mainLayout = QtWidgets.QGridLayout() self.mainLayout.setSpacing(0) self.mainLayout.setContentsMargins(0,0,0,0) diff --git a/syncplay/ui/gui.py b/syncplay/ui/gui.py index 4250d6f..e7391d4 100644 --- a/syncplay/ui/gui.py +++ b/syncplay/ui/gui.py @@ -1,5 +1,5 @@ -from PySide import QtGui -from PySide.QtCore import Qt, QSettings, QSize, QPoint, QUrl, QLine +from PySide2 import QtWidgets, QtGui +from PySide2.QtCore import Qt, QSettings, QSize, QPoint, QUrl, QLine, QStandardPaths from syncplay import utils, constants, version from syncplay.messages import getMessage import sys @@ -13,12 +13,12 @@ from functools import wraps from twisted.internet import task lastCheckedForUpdates = None -class UserlistItemDelegate(QtGui.QStyledItemDelegate): +class UserlistItemDelegate(QtWidgets.QStyledItemDelegate): def __init__(self): - QtGui.QStyledItemDelegate.__init__(self) + QtWidgets.QStyledItemDelegate.__init__(self) def sizeHint(self, option, index): - size = QtGui.QStyledItemDelegate.sizeHint(self, option, index) + size = QtWidgets.QStyledItemDelegate.sizeHint(self, option, index) if (index.column() == constants.USERLIST_GUI_USERNAME_COLUMN): size.setWidth(size.width() + constants.USERLIST_GUI_USERNAME_OFFSET) return size @@ -82,9 +82,9 @@ class UserlistItemDelegate(QtGui.QStyledItemDelegate): midY - 8, streamSwitchIconQPixmap.scaled(16, 16, Qt.KeepAspectRatio)) optionQStyleOptionViewItem.rect.setX(optionQStyleOptionViewItem.rect.x()+16) - QtGui.QStyledItemDelegate.paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex) + QtWidgets.QStyledItemDelegate.paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex) -class MainWindow(QtGui.QMainWindow): +class MainWindow(QtWidgets.QMainWindow): insertPosition = None playlistState = [] updatingPlaylist = False @@ -97,7 +97,7 @@ class MainWindow(QtGui.QMainWindow): MainWindow.insertPosition = newPosition self.playlist.forceUpdate() - class PlaylistItemDelegate(QtGui.QStyledItemDelegate): + class PlaylistItemDelegate(QtWidgets.QStyledItemDelegate): def paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex): itemQPainter.save() currentQAbstractItemModel = indexQModelIndex.model() @@ -115,7 +115,7 @@ class MainWindow(QtGui.QMainWindow): currentlyplayingIconQPixmap.scaled(6, 16, Qt.KeepAspectRatio)) optionQStyleOptionViewItem.rect.setX(optionQStyleOptionViewItem.rect.x()+10) - QtGui.QStyledItemDelegate.paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex) + QtWidgets.QStyledItemDelegate.paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex) lineAbove = False lineBelow = False @@ -131,7 +131,7 @@ class MainWindow(QtGui.QMainWindow): itemQPainter.drawLine(line) itemQPainter.restore() - class PlaylistGroupBox(QtGui.QGroupBox): + class PlaylistGroupBox(QtWidgets.QGroupBox): def dragEnterEvent(self, event): data = event.mimeData() @@ -152,8 +152,8 @@ class MainWindow(QtGui.QMainWindow): if not window.playlist.isEnabled(): return window.setPlaylistInsertPosition(None) - if QtGui.QDropEvent.proposedAction(event) == Qt.MoveAction: - QtGui.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted + if QtWidgets.QDropEvent.proposedAction(event) == Qt.MoveAction: + QtWidgets.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted data = event.mimeData() urls = data.urls() @@ -169,7 +169,7 @@ class MainWindow(QtGui.QMainWindow): else: super(MainWindow.PlaylistWidget, self).dropEvent(event) - class PlaylistWidget(QtGui.QListWidget): + class PlaylistWidget(QtWidgets.QListWidget): selfWindow = None playlistIndexFilename = None @@ -188,7 +188,7 @@ class MainWindow(QtGui.QMainWindow): if fileIsUntrusted: self.item(item).setForeground(QtGui.QBrush(QtGui.QColor(constants.STYLE_UNTRUSTEDITEM_COLOR))) elif fileIsAvailable: - self.item(item).setForeground(QtGui.QBrush(QtGui.QColor(QtGui.QPalette.ColorRole(QtGui.QPalette.Text)))) + self.item(item).setForeground(QtGui.QBrush(QtGui.QColor(QtWidgets.QPalette.ColorRole(QtWidgets.QPalette.Text)))) else: self.item(item).setForeground(QtGui.QBrush(QtGui.QColor(constants.STYLE_DIFFERENTITEM_COLOR))) self.selfWindow._syncplayClient.fileSwitch.setFilenameWatchlist(self.selfWindow.newWatchlist) @@ -251,8 +251,8 @@ class MainWindow(QtGui.QMainWindow): if not window.playlist.isEnabled(): return window.setPlaylistInsertPosition(None) - if QtGui.QDropEvent.proposedAction(event) == Qt.MoveAction: - QtGui.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted + if QtWidgets.QDropEvent.proposedAction(event) == Qt.MoveAction: + QtWidgets.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted data = event.mimeData() urls = data.urls() @@ -273,17 +273,17 @@ class MainWindow(QtGui.QMainWindow): - class topSplitter(QtGui.QSplitter): + class topSplitter(QtWidgets.QSplitter): def createHandle(self): return self.topSplitterHandle(self.orientation(), self) - class topSplitterHandle(QtGui.QSplitterHandle): + class topSplitterHandle(QtWidgets.QSplitterHandle): def mouseReleaseEvent(self, event): - QtGui.QSplitterHandle.mouseReleaseEvent(self, event) + QtWidgets.QSplitterHandle.mouseReleaseEvent(self, event) self.parent().parent().parent().updateListGeometry() def mouseMoveEvent(self, event): - QtGui.QSplitterHandle.mouseMoveEvent(self, event) + QtWidgets.QSplitterHandle.mouseMoveEvent(self, event) self.parent().parent().parent().updateListGeometry() def needsClient(f): # @NoSelf @@ -408,11 +408,11 @@ class MainWindow(QtGui.QMainWindow): if isControlledRoom: if room == currentUser.room and currentUser.isController(): - roomitem.setIcon(QtGui.QIcon(self.resourcespath + 'lock_open.png')) + roomitem.setIcon(QtGui.QPixmap(self.resourcespath + 'lock_open.png')) else: - roomitem.setIcon(QtGui.QIcon(self.resourcespath + 'lock.png')) + roomitem.setIcon(QtGui.QPixmap(self.resourcespath + 'lock.png')) else: - roomitem.setIcon(QtGui.QIcon(self.resourcespath + 'chevrons_right.png')) + roomitem.setIcon(QtGui.QPixmap(self.resourcespath + 'chevrons_right.png')) for user in rooms[room]: useritem = QtGui.QStandardItem(user.username) @@ -506,7 +506,7 @@ class MainWindow(QtGui.QMainWindow): item = self.playlist.selectedIndexes()[0] else: item = None - menu = QtGui.QMenu() + menu = QtWidgets.QMenu() if item: firstFile = item.sibling(item.row(), 0).data() @@ -548,7 +548,7 @@ class MainWindow(QtGui.QMainWindow): else: return - menu = QtGui.QMenu() + menu = QtWidgets.QMenu() username = item.sibling(item.row(), 0).data() if username == self._syncplayClient.userlist.currentUser.username: shortUsername = getMessage("item-is-yours-indicator") @@ -596,15 +596,15 @@ class MainWindow(QtGui.QMainWindow): self.listTreeView.setFirstColumnSpanned(roomtocheck, self.listTreeView.rootIndex(), True) roomtocheck += 1 self.listTreeView.header().setStretchLastSection(False) - self.listTreeView.header().setResizeMode(0, QtGui.QHeaderView.ResizeToContents) - self.listTreeView.header().setResizeMode(1, QtGui.QHeaderView.ResizeToContents) - self.listTreeView.header().setResizeMode(2, QtGui.QHeaderView.ResizeToContents) - self.listTreeView.header().setResizeMode(3, QtGui.QHeaderView.ResizeToContents) + self.listTreeView.header().setResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) + self.listTreeView.header().setResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) + self.listTreeView.header().setResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) + self.listTreeView.header().setResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) NarrowTabsWidth = self.listTreeView.header().sectionSize(0)+self.listTreeView.header().sectionSize(1)+self.listTreeView.header().sectionSize(2) if self.listTreeView.header().width() < (NarrowTabsWidth+self.listTreeView.header().sectionSize(3)): self.listTreeView.header().resizeSection(3,self.listTreeView.header().width()-NarrowTabsWidth) else: - self.listTreeView.header().setResizeMode(3, QtGui.QHeaderView.Stretch) + self.listTreeView.header().setResizeMode(3, QtWidgets.QHeaderView.Stretch) self.listTreeView.expandAll() except: pass @@ -677,7 +677,7 @@ class MainWindow(QtGui.QMainWindow): def showErrorMessage(self, message, criticalerror=False): message = unicode(message) if criticalerror: - QtGui.QMessageBox.critical(self, "Syncplay", message) + QtWidgets.QMessageBox.critical(self, "Syncplay", message) message = message.replace(u"&", u"&").replace(u'"', u""").replace(u"<", u"<").replace(u">", u">") message = message.replace(u"\n", u"
") message = u"".format(constants.STYLE_ERRORNOTIFICATION) + message + u"" @@ -698,8 +698,8 @@ class MainWindow(QtGui.QMainWindow): self._syncplayClient.sendRoom() def seekPositionDialog(self): - seekTime, ok = QtGui.QInputDialog.getText(self, getMessage("seektime-menu-label"), - getMessage("seektime-msgbox-label"), QtGui.QLineEdit.Normal, + seekTime, ok = QtWidgets.QInputDialog.getText(self, getMessage("seektime-menu-label"), + getMessage("seektime-msgbox-label"), QtWidgets.QLineEdit.Normal, u"0:00") if ok and seekTime != '': self.seekPosition(seekTime) @@ -766,10 +766,10 @@ class MainWindow(QtGui.QMainWindow): defaultdirectory = self.config["mediaSearchDirectories"][0] elif includeUserSpecifiedDirectories and os.path.isdir(self.mediadirectory): defaultdirectory = self.mediadirectory - elif os.path.isdir(QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MoviesLocation)): - defaultdirectory = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MoviesLocation) - elif os.path.isdir(QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.HomeLocation)): - defaultdirectory = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.HomeLocation) + elif os.path.isdir(QStandardPaths.standardLocations(QStandardPaths.MoviesLocation)[0]): + defaultdirectory = QStandardPaths.standardLocations(QStandardPaths.MoviesLocation)[0] + elif os.path.isdir(QStandardPaths.standardLocations(QStandardPaths.HomeLocation)[0]): + defaultdirectory = QStandardPaths.standardLocations(QStandardPaths.HomeLocation)[0] else: defaultdirectory = "" return defaultdirectory @@ -781,7 +781,7 @@ class MainWindow(QtGui.QMainWindow): return self.loadMediaBrowseSettings() - options = QtGui.QFileDialog.Options() + options = QtWidgets.QFileDialog.Options() self.mediadirectory = "" currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None if currentdirectory and os.path.isdir(currentdirectory): @@ -789,7 +789,7 @@ class MainWindow(QtGui.QMainWindow): else: defaultdirectory = self.getInitialMediaDirectory() browserfilter = "All files (*)" - fileName, filtr = QtGui.QFileDialog.getOpenFileName(self, getMessage("browseformedia-label"), defaultdirectory, + fileName, filtr = QtWidgets.QFileDialog.getOpenFileName(self, getMessage("browseformedia-label"), defaultdirectory, browserfilter, "", options) if fileName: if sys.platform.startswith('win'): @@ -806,7 +806,7 @@ class MainWindow(QtGui.QMainWindow): return self.loadMediaBrowseSettings() - options = QtGui.QFileDialog.Options() + options = QtWidgets.QFileDialog.Options() self.mediadirectory = "" currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None if currentdirectory and os.path.isdir(currentdirectory): @@ -814,7 +814,7 @@ class MainWindow(QtGui.QMainWindow): else: defaultdirectory = self.getInitialMediaDirectory() browserfilter = "All files (*)" - fileNames, filtr = QtGui.QFileDialog.getOpenFileNames(self, getMessage("browseformedia-label"), defaultdirectory, + fileNames, filtr = QtWidgets.QFileDialog.getOpenFileNames(self, getMessage("browseformedia-label"), defaultdirectory, browserfilter, "", options) self.updatingPlaylist = True if fileNames: @@ -830,17 +830,17 @@ class MainWindow(QtGui.QMainWindow): @needsClient def OpenAddURIsToPlaylistDialog(self): - URIsDialog = QtGui.QDialog() + URIsDialog = QtWidgets.QDialog() URIsDialog.setWindowTitle(getMessage("adduris-msgbox-label")) - URIsLayout = QtGui.QGridLayout() - URIsLabel = QtGui.QLabel(getMessage("adduris-msgbox-label")) + URIsLayout = QtWidgets.QGridLayout() + URIsLabel = QtWidgets.QLabel(getMessage("adduris-msgbox-label")) URIsLayout.addWidget(URIsLabel, 0, 0, 1, 1) - URIsTextbox = QtGui.QPlainTextEdit() - URIsTextbox.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap) + URIsTextbox = QtWidgets.QPlainTextEdit() + URIsTextbox.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) URIsLayout.addWidget(URIsTextbox, 1, 0, 1, 1) - URIsButtonBox = QtGui.QDialogButtonBox() + URIsButtonBox = QtWidgets.QDialogButtonBox() URIsButtonBox.setOrientation(Qt.Horizontal) - URIsButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel) + URIsButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.Cancel) URIsButtonBox.accepted.connect(URIsDialog.accept) URIsButtonBox.rejected.connect(URIsDialog.reject) URIsLayout.addWidget(URIsButtonBox, 2, 0, 1, 1) @@ -848,7 +848,7 @@ class MainWindow(QtGui.QMainWindow): URIsDialog.setModal(True) URIsDialog.show() result = URIsDialog.exec_() - if result == QtGui.QDialog.Accepted: + if result == QtWidgets.QDialog.Accepted: URIsToAdd = utils.convertMultilineStringToList(URIsTextbox.toPlainText()) self.updatingPlaylist = True for URI in URIsToAdd: @@ -866,17 +866,17 @@ class MainWindow(QtGui.QMainWindow): @needsClient def openEditPlaylistDialog(self): oldPlaylist = utils.getListAsMultilineString(self.getPlaylistState()) - editPlaylistDialog = QtGui.QDialog() + editPlaylistDialog = QtWidgets.QDialog() editPlaylistDialog.setWindowTitle(getMessage("editplaylist-msgbox-label")) - editPlaylistLayout = QtGui.QGridLayout() - editPlaylistLabel = QtGui.QLabel(getMessage("editplaylist-msgbox-label")) + editPlaylistLayout = QtWidgets.QGridLayout() + editPlaylistLabel = QtWidgets.QLabel(getMessage("editplaylist-msgbox-label")) editPlaylistLayout.addWidget(editPlaylistLabel, 0, 0, 1, 1) - editPlaylistTextbox = QtGui.QPlainTextEdit(oldPlaylist) - editPlaylistTextbox.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap) + editPlaylistTextbox = QtWidgets.QPlainTextEdit(oldPlaylist) + editPlaylistTextbox.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) editPlaylistLayout.addWidget(editPlaylistTextbox, 1, 0, 1, 1) - editPlaylistButtonBox = QtGui.QDialogButtonBox() + editPlaylistButtonBox = QtWidgets.QDialogButtonBox() editPlaylistButtonBox.setOrientation(Qt.Horizontal) - editPlaylistButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel) + editPlaylistButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.Cancel) editPlaylistButtonBox.accepted.connect(editPlaylistDialog.accept) editPlaylistButtonBox.rejected.connect(editPlaylistDialog.reject) editPlaylistLayout.addWidget(editPlaylistButtonBox, 2, 0, 1, 1) @@ -886,7 +886,7 @@ class MainWindow(QtGui.QMainWindow): editPlaylistDialog.setMinimumHeight(500) editPlaylistDialog.show() result = editPlaylistDialog.exec_() - if result == QtGui.QDialog.Accepted: + if result == QtWidgets.QDialog.Accepted: newPlaylist = utils.convertMultilineStringToList(editPlaylistTextbox.toPlainText()) if newPlaylist <> self.playlistState and self._syncplayClient and not self.updatingPlaylist: self.setPlaylist(newPlaylist) @@ -895,46 +895,46 @@ class MainWindow(QtGui.QMainWindow): @needsClient def openSetMediaDirectoriesDialog(self): - MediaDirectoriesDialog = QtGui.QDialog() + MediaDirectoriesDialog = QtWidgets.QDialog() MediaDirectoriesDialog.setWindowTitle(getMessage("syncplay-mediasearchdirectories-title")) # TODO: Move to messages_*.py - MediaDirectoriesLayout = QtGui.QGridLayout() - MediaDirectoriesLabel = QtGui.QLabel(getMessage("syncplay-mediasearchdirectories-title")) + MediaDirectoriesLayout = QtWidgets.QGridLayout() + MediaDirectoriesLabel = QtWidgets.QLabel(getMessage("syncplay-mediasearchdirectories-title")) MediaDirectoriesLayout.addWidget(MediaDirectoriesLabel, 0, 0, 1, 2) - MediaDirectoriesTextbox = QtGui.QPlainTextEdit() - MediaDirectoriesTextbox.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap) + MediaDirectoriesTextbox = QtWidgets.QPlainTextEdit() + MediaDirectoriesTextbox.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) MediaDirectoriesTextbox.setPlainText(utils.getListAsMultilineString(self.config["mediaSearchDirectories"])) MediaDirectoriesLayout.addWidget(MediaDirectoriesTextbox, 1, 0, 1, 1) - MediaDirectoriesButtonBox = QtGui.QDialogButtonBox() + MediaDirectoriesButtonBox = QtWidgets.QDialogButtonBox() MediaDirectoriesButtonBox.setOrientation(Qt.Horizontal) - MediaDirectoriesButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel) + MediaDirectoriesButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.Cancel) MediaDirectoriesButtonBox.accepted.connect(MediaDirectoriesDialog.accept) MediaDirectoriesButtonBox.rejected.connect(MediaDirectoriesDialog.reject) MediaDirectoriesLayout.addWidget(MediaDirectoriesButtonBox, 2, 0, 1, 1) - MediaDirectoriesAddFolderButton = QtGui.QPushButton(getMessage("addfolder-label")) + MediaDirectoriesAddFolderButton = QtWidgets.QPushButton(getMessage("addfolder-label")) MediaDirectoriesAddFolderButton.pressed.connect(lambda: self.openAddMediaDirectoryDialog(MediaDirectoriesTextbox, MediaDirectoriesDialog)) MediaDirectoriesLayout.addWidget(MediaDirectoriesAddFolderButton, 1, 1, 1, 1, Qt.AlignTop) MediaDirectoriesDialog.setLayout(MediaDirectoriesLayout) MediaDirectoriesDialog.setModal(True) MediaDirectoriesDialog.show() result = MediaDirectoriesDialog.exec_() - if result == QtGui.QDialog.Accepted: + if result == QtWidgets.QDialog.Accepted: newMediaDirectories = utils.convertMultilineStringToList(MediaDirectoriesTextbox.toPlainText()) self._syncplayClient.fileSwitch.changeMediaDirectories(newMediaDirectories) @needsClient def openSetTrustedDomainsDialog(self): - TrustedDomainsDialog = QtGui.QDialog() + TrustedDomainsDialog = QtWidgets.QDialog() TrustedDomainsDialog.setWindowTitle(getMessage("syncplay-trusteddomains-title")) - TrustedDomainsLayout = QtGui.QGridLayout() - TrustedDomainsLabel = QtGui.QLabel(getMessage("trusteddomains-msgbox-label")) + TrustedDomainsLayout = QtWidgets.QGridLayout() + TrustedDomainsLabel = QtWidgets.QLabel(getMessage("trusteddomains-msgbox-label")) TrustedDomainsLayout.addWidget(TrustedDomainsLabel, 0, 0, 1, 1) - TrustedDomainsTextbox = QtGui.QPlainTextEdit() - TrustedDomainsTextbox.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap) + TrustedDomainsTextbox = QtWidgets.QPlainTextEdit() + TrustedDomainsTextbox.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) TrustedDomainsTextbox.setPlainText(utils.getListAsMultilineString(self.config["trustedDomains"])) TrustedDomainsLayout.addWidget(TrustedDomainsTextbox, 1, 0, 1, 1) - TrustedDomainsButtonBox = QtGui.QDialogButtonBox() + TrustedDomainsButtonBox = QtWidgets.QDialogButtonBox() TrustedDomainsButtonBox.setOrientation(Qt.Horizontal) - TrustedDomainsButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel) + TrustedDomainsButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.Cancel) TrustedDomainsButtonBox.accepted.connect(TrustedDomainsDialog.accept) TrustedDomainsButtonBox.rejected.connect(TrustedDomainsDialog.reject) TrustedDomainsLayout.addWidget(TrustedDomainsButtonBox, 2, 0, 1, 1) @@ -942,7 +942,7 @@ class MainWindow(QtGui.QMainWindow): TrustedDomainsDialog.setModal(True) TrustedDomainsDialog.show() result = TrustedDomainsDialog.exec_() - if result == QtGui.QDialog.Accepted: + if result == QtWidgets.QDialog.Accepted: newTrustedDomains = utils.convertMultilineStringToList(TrustedDomainsTextbox.toPlainText()) self._syncplayClient.setTrustedDomains(newTrustedDomains) @needsClient @@ -954,7 +954,7 @@ class MainWindow(QtGui.QMainWindow): @needsClient def openAddMediaDirectoryDialog(self, MediaDirectoriesTextbox, MediaDirectoriesDialog): - folderName = unicode(QtGui.QFileDialog.getExistingDirectory(self,None,self.getInitialMediaDirectory(includeUserSpecifiedDirectories=False),QtGui.QFileDialog.ShowDirsOnly)) + folderName = unicode(QtWidgets.QFileDialog.getExistingDirectory(self,None,self.getInitialMediaDirectory(includeUserSpecifiedDirectories=False),QtWidgets.QFileDialog.ShowDirsOnly)) if folderName: existingMediaDirs = MediaDirectoriesTextbox.toPlainText() if existingMediaDirs == "": @@ -967,16 +967,16 @@ class MainWindow(QtGui.QMainWindow): @needsClient def promptForStreamURL(self): - streamURL, ok = QtGui.QInputDialog.getText(self, getMessage("promptforstreamurl-msgbox-label"), - getMessage("promptforstreamurlinfo-msgbox-label"), QtGui.QLineEdit.Normal, + streamURL, ok = QtWidgets.QInputDialog.getText(self, getMessage("promptforstreamurl-msgbox-label"), + getMessage("promptforstreamurlinfo-msgbox-label"), QtWidgets.QLineEdit.Normal, "") if ok and streamURL != '': self._syncplayClient._player.openFile(streamURL) @needsClient def createControlledRoom(self): - controlroom, ok = QtGui.QInputDialog.getText(self, getMessage("createcontrolledroom-msgbox-label"), - getMessage("controlledroominfo-msgbox-label"), QtGui.QLineEdit.Normal, + controlroom, ok = QtWidgets.QInputDialog.getText(self, getMessage("createcontrolledroom-msgbox-label"), + getMessage("controlledroominfo-msgbox-label"), QtWidgets.QLineEdit.Normal, utils.stripRoomName(self._syncplayClient.getRoom())) if ok and controlroom != '': self._syncplayClient.createControlledRoom(controlroom) @@ -985,7 +985,7 @@ class MainWindow(QtGui.QMainWindow): def identifyAsController(self): msgboxtitle = getMessage("identifyascontroller-msgbox-label") msgboxtext = getMessage("identifyinfo-msgbox-label") - controlpassword, ok = QtGui.QInputDialog.getText(self, msgboxtitle, msgboxtext, QtGui.QLineEdit.Normal, "") + controlpassword, ok = QtWidgets.QInputDialog.getText(self, msgboxtitle, msgboxtext, QtWidgets.QLineEdit.Normal, "") if ok and controlpassword != '': self._syncplayClient.identifyAsController(controlpassword) @@ -1000,8 +1000,8 @@ class MainWindow(QtGui.QMainWindow): @needsClient def setOffset(self): - newoffset, ok = QtGui.QInputDialog.getText(self, getMessage("setoffset-msgbox-label"), - getMessage("offsetinfo-msgbox-label"), QtGui.QLineEdit.Normal, + newoffset, ok = QtWidgets.QInputDialog.getText(self, getMessage("setoffset-msgbox-label"), + getMessage("offsetinfo-msgbox-label"), QtWidgets.QLineEdit.Normal, "") if ok and newoffset != '': o = re.match(constants.UI_OFFSET_REGEX, "o " + newoffset) @@ -1054,8 +1054,8 @@ class MainWindow(QtGui.QMainWindow): def addTopLayout(self, window): window.topSplit = self.topSplitter(Qt.Horizontal, self) - window.outputLayout = QtGui.QVBoxLayout() - window.outputbox = QtGui.QTextBrowser() + window.outputLayout = QtWidgets.QVBoxLayout() + window.outputbox = QtWidgets.QTextBrowser() window.outputbox.setReadOnly(True) window.outputbox.setTextInteractionFlags(window.outputbox.textInteractionFlags() | Qt.TextSelectableByKeyboard) window.outputbox.setOpenExternalLinks(True) @@ -1065,24 +1065,24 @@ class MainWindow(QtGui.QMainWindow): window.outputbox.moveCursor(QtGui.QTextCursor.End) window.outputbox.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) - window.outputlabel = QtGui.QLabel(getMessage("notifications-heading-label")) - window.chatInput = QtGui.QLineEdit() + window.outputlabel = QtWidgets.QLabel(getMessage("notifications-heading-label")) + window.chatInput = QtWidgets.QLineEdit() window.chatInput.setMaxLength(constants.MAX_CHAT_MESSAGE_LENGTH) window.chatInput.returnPressed.connect(self.sendChatMessage) - window.chatButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'email_go.png'), + window.chatButton = QtWidgets.QPushButton(QtGui.QPixmap(self.resourcespath + 'email_go.png'), getMessage("sendmessage-label")) window.chatButton.pressed.connect(self.sendChatMessage) - window.chatLayout = QtGui.QHBoxLayout() - window.chatFrame = QtGui.QFrame() + window.chatLayout = QtWidgets.QHBoxLayout() + window.chatFrame = QtWidgets.QFrame() window.chatFrame.setLayout(self.chatLayout) window.chatFrame.setContentsMargins(0,0,0,0) - window.chatFrame.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + window.chatFrame.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) window.chatLayout.setContentsMargins(0,0,0,0) self.chatButton.setToolTip(getMessage("sendmessage-tooltip")) window.chatLayout.addWidget(window.chatInput) window.chatLayout.addWidget(window.chatButton) window.chatFrame.setMaximumHeight(window.chatFrame.sizeHint().height()) - window.outputFrame = QtGui.QFrame() + window.outputFrame = QtWidgets.QFrame() window.outputFrame.setLineWidth(0) window.outputFrame.setMidLineWidth(0) window.outputLayout.setContentsMargins(0, 0, 0, 0) @@ -1091,47 +1091,47 @@ class MainWindow(QtGui.QMainWindow): window.outputLayout.addWidget(window.chatFrame) window.outputFrame.setLayout(window.outputLayout) - window.listLayout = QtGui.QVBoxLayout() + window.listLayout = QtWidgets.QVBoxLayout() window.listTreeModel = QtGui.QStandardItemModel() - window.listTreeView = QtGui.QTreeView() + window.listTreeView = QtWidgets.QTreeView() window.listTreeView.setModel(window.listTreeModel) window.listTreeView.setIndentation(21) window.listTreeView.doubleClicked.connect(self.roomClicked) self.listTreeView.setContextMenuPolicy(Qt.CustomContextMenu) - self.listTreeView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) + self.listTreeView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.listTreeView.customContextMenuRequested.connect(self.openRoomMenu) - window.listlabel = QtGui.QLabel(getMessage("userlist-heading-label")) - window.listFrame = QtGui.QFrame() + window.listlabel = QtWidgets.QLabel(getMessage("userlist-heading-label")) + window.listFrame = QtWidgets.QFrame() window.listFrame.setLineWidth(0) window.listFrame.setMidLineWidth(0) - window.listFrame.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + window.listFrame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) window.listLayout.setContentsMargins(0, 0, 0, 0) - window.userlistLayout = QtGui.QVBoxLayout() - window.userlistFrame = QtGui.QFrame() + window.userlistLayout = QtWidgets.QVBoxLayout() + window.userlistFrame = QtWidgets.QFrame() window.userlistFrame.setLineWidth(0) window.userlistFrame.setMidLineWidth(0) - window.userlistFrame.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + window.userlistFrame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) window.userlistLayout.setContentsMargins(0, 0, 0, 0) window.userlistFrame.setLayout(window.userlistLayout) window.userlistLayout.addWidget(window.listlabel) window.userlistLayout.addWidget(window.listTreeView) - window.listSplit = QtGui.QSplitter(Qt.Vertical, self) + window.listSplit = QtWidgets.QSplitter(Qt.Vertical, self) window.listSplit.addWidget(window.userlistFrame) window.listLayout.addWidget(window.listSplit) - window.roomInput = QtGui.QLineEdit() + window.roomInput = QtWidgets.QLineEdit() window.roomInput.setMaxLength(constants.MAX_ROOM_NAME_LENGTH) window.roomInput.returnPressed.connect(self.joinRoom) - window.roomButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'door_in.png'), + window.roomButton = QtWidgets.QPushButton(QtGui.QPixmap(self.resourcespath + 'door_in.png'), getMessage("joinroom-label")) window.roomButton.pressed.connect(self.joinRoom) - window.roomLayout = QtGui.QHBoxLayout() - window.roomFrame = QtGui.QFrame() + window.roomLayout = QtWidgets.QHBoxLayout() + window.roomFrame = QtWidgets.QFrame() window.roomFrame.setLayout(self.roomLayout) window.roomFrame.setContentsMargins(0,0,0,0) - window.roomFrame.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + window.roomFrame.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) window.roomLayout.setContentsMargins(0,0,0,0) self.roomButton.setToolTip(getMessage("joinroom-tooltip")) window.roomLayout.addWidget(window.roomInput) @@ -1146,11 +1146,11 @@ class MainWindow(QtGui.QMainWindow): window.topSplit.setStretchFactor(0,4) window.topSplit.setStretchFactor(1,5) window.mainLayout.addWidget(window.topSplit) - window.topSplit.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) + window.topSplit.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) def addBottomLayout(self, window): - window.bottomLayout = QtGui.QHBoxLayout() - window.bottomFrame = QtGui.QFrame() + window.bottomLayout = QtWidgets.QHBoxLayout() + window.bottomFrame = QtWidgets.QFrame() window.bottomFrame.setLayout(window.bottomLayout) window.bottomLayout.setContentsMargins(0,0,0,0) @@ -1159,8 +1159,8 @@ class MainWindow(QtGui.QMainWindow): window.playlistGroup = self.PlaylistGroupBox(getMessage("sharedplaylistenabled-label")) window.playlistGroup.setCheckable(True) window.playlistGroup.toggled.connect(self.changePlaylistEnabledState) - window.playlistLayout = QtGui.QHBoxLayout() - window.playlistGroup.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + window.playlistLayout = QtWidgets.QHBoxLayout() + window.playlistGroup.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) window.playlistGroup.setAcceptDrops(True) window.playlist = self.PlaylistWidget() window.playlist.setWindow(window) @@ -1168,18 +1168,18 @@ class MainWindow(QtGui.QMainWindow): window.playlist.setDragEnabled(True) window.playlist.setAcceptDrops(True) window.playlist.setDropIndicatorShown(True) - window.playlist.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) + window.playlist.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) window.playlist.setDefaultDropAction(Qt.MoveAction) - window.playlist.setDragDropMode(QtGui.QAbstractItemView.InternalMove) + window.playlist.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) window.playlist.doubleClicked.connect(self.playlistItemClicked) window.playlist.setContextMenuPolicy(Qt.CustomContextMenu) - window.playlist.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) + window.playlist.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) window.playlist.customContextMenuRequested.connect(self.openPlaylistMenu) self.playlistUpdateTimer = task.LoopingCall(self.playlistChangeCheck) self.playlistUpdateTimer.start(0.1, True) noteFont = QtGui.QFont() noteFont.setItalic(True) - playlistItem = QtGui.QListWidgetItem(getMessage("playlist-instruction-item-message")) + playlistItem = QtWidgets.QListWidgetItem(getMessage("playlist-instruction-item-message")) playlistItem.setFont(noteFont) window.playlist.addItem(playlistItem) playlistItem.setFont(noteFont) @@ -1189,7 +1189,7 @@ class MainWindow(QtGui.QMainWindow): window.playlistGroup.setLayout(window.playlistLayout) window.listSplit.addWidget(window.playlistGroup) - window.readyPushButton = QtGui.QPushButton() + window.readyPushButton = QtWidgets.QPushButton() readyFont = QtGui.QFont() readyFont.setWeight(QtGui.QFont.Bold) window.readyPushButton.setText(getMessage("ready-guipushbuttonlabel")) @@ -1201,12 +1201,12 @@ class MainWindow(QtGui.QMainWindow): window.readyPushButton.setToolTip(getMessage("ready-tooltip")) window.listLayout.addWidget(window.readyPushButton, Qt.AlignRight) - window.autoplayLayout = QtGui.QHBoxLayout() - window.autoplayFrame = QtGui.QFrame() + window.autoplayLayout = QtWidgets.QHBoxLayout() + window.autoplayFrame = QtWidgets.QFrame() window.autoplayFrame.setVisible(False) window.autoplayLayout.setContentsMargins(0,0,0,0) window.autoplayFrame.setLayout(window.autoplayLayout) - window.autoplayPushButton = QtGui.QPushButton() + window.autoplayPushButton = QtWidgets.QPushButton() autoPlayFont = QtGui.QFont() autoPlayFont.setWeight(QtGui.QFont.Bold) window.autoplayPushButton.setText(getMessage("autoplay-guipushbuttonlabel")) @@ -1215,13 +1215,13 @@ class MainWindow(QtGui.QMainWindow): window.autoplayPushButton.toggled.connect(self.changeAutoplayState) window.autoplayPushButton.setFont(autoPlayFont) window.autoplayPushButton.setStyleSheet(constants.STYLE_AUTO_PLAY_PUSHBUTTON) - window.autoplayPushButton.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + window.autoplayPushButton.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) window.autoplayPushButton.setToolTip(getMessage("autoplay-tooltip")) - window.autoplayLabel = QtGui.QLabel(getMessage("autoplay-minimum-label")) - window.autoplayLabel.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + window.autoplayLabel = QtWidgets.QLabel(getMessage("autoplay-minimum-label")) + window.autoplayLabel.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) window.autoplayLabel.setMaximumWidth(window.autoplayLabel.minimumSizeHint().width()) window.autoplayLabel.setToolTip(getMessage("autoplay-tooltip")) - window.autoplayThresholdSpinbox = QtGui.QSpinBox() + window.autoplayThresholdSpinbox = QtWidgets.QSpinBox() window.autoplayThresholdSpinbox.setMaximumWidth(window.autoplayThresholdSpinbox.minimumSizeHint().width()) window.autoplayThresholdSpinbox.setMinimum(2) window.autoplayThresholdSpinbox.setMaximum(99) @@ -1237,33 +1237,33 @@ class MainWindow(QtGui.QMainWindow): window.bottomFrame.setMaximumHeight(window.bottomFrame.minimumSizeHint().height()) def addPlaybackLayout(self, window): - window.playbackFrame = QtGui.QFrame() + window.playbackFrame = QtWidgets.QFrame() window.playbackFrame.setVisible(False) window.playbackFrame.setContentsMargins(0,0,0,0) - window.playbackLayout = QtGui.QHBoxLayout() + window.playbackLayout = QtWidgets.QHBoxLayout() window.playbackLayout.setAlignment(Qt.AlignLeft) window.playbackLayout.setContentsMargins(0,0,0,0) window.playbackFrame.setLayout(window.playbackLayout) - window.seekInput = QtGui.QLineEdit() + window.seekInput = QtWidgets.QLineEdit() window.seekInput.returnPressed.connect(self.seekFromButton) - window.seekButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + u'clock_go.png'), "") + window.seekButton = QtWidgets.QPushButton(QtGui.QPixmap(self.resourcespath + u'clock_go.png'), "") window.seekButton.setToolTip(getMessage("seektime-menu-label")) window.seekButton.pressed.connect(self.seekFromButton) window.seekInput.setText("0:00") window.seekInput.setFixedWidth(60) window.playbackLayout.addWidget(window.seekInput) window.playbackLayout.addWidget(window.seekButton) - window.unseekButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + u'arrow_undo.png'), "") + window.unseekButton = QtWidgets.QPushButton(QtGui.QPixmap(self.resourcespath + u'arrow_undo.png'), "") window.unseekButton.setToolTip(getMessage("undoseek-menu-label")) window.unseekButton.pressed.connect(self.undoSeek) - window.miscLayout = QtGui.QHBoxLayout() + window.miscLayout = QtWidgets.QHBoxLayout() window.playbackLayout.addWidget(window.unseekButton) - window.playButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + u'control_play_blue.png'), "") + window.playButton = QtWidgets.QPushButton(QtGui.QPixmap(self.resourcespath + u'control_play_blue.png'), "") window.playButton.setToolTip(getMessage("play-menu-label")) window.playButton.pressed.connect(self.play) window.playbackLayout.addWidget(window.playButton) - window.pauseButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'control_pause_blue.png'), "") + window.pauseButton = QtWidgets.QPushButton(QtGui.QPixmap(self.resourcespath + 'control_pause_blue.png'), "") window.pauseButton.setToolTip(getMessage("pause-menu-label")) window.pauseButton.pressed.connect(self.pause) window.playbackLayout.addWidget(window.pauseButton) @@ -1272,54 +1272,54 @@ class MainWindow(QtGui.QMainWindow): window.outputLayout.addWidget(window.playbackFrame) def addMenubar(self, window): - window.menuBar = QtGui.QMenuBar() + window.menuBar = QtWidgets.QMenuBar() # File menu - window.fileMenu = QtGui.QMenu(getMessage("file-menu-label"), self) - window.openAction = window.fileMenu.addAction(QtGui.QIcon(self.resourcespath + 'folder_explore.png'), + window.fileMenu = QtWidgets.QMenu(getMessage("file-menu-label"), self) + window.openAction = window.fileMenu.addAction(QtGui.QPixmap(self.resourcespath + 'folder_explore.png'), getMessage("openmedia-menu-label")) window.openAction.triggered.connect(self.browseMediapath) - window.openAction = window.fileMenu.addAction(QtGui.QIcon(self.resourcespath + 'world_explore.png'), + window.openAction = window.fileMenu.addAction(QtGui.QPixmap(self.resourcespath + 'world_explore.png'), getMessage("openstreamurl-menu-label")) window.openAction.triggered.connect(self.promptForStreamURL) - window.openAction = window.fileMenu.addAction(QtGui.QIcon(self.resourcespath + 'film_folder_edit.png'), + window.openAction = window.fileMenu.addAction(QtGui.QPixmap(self.resourcespath + 'film_folder_edit.png'), getMessage("setmediadirectories-menu-label")) window.openAction.triggered.connect(self.openSetMediaDirectoriesDialog) - window.exitAction = window.fileMenu.addAction(QtGui.QIcon(self.resourcespath + 'cross.png'), + window.exitAction = window.fileMenu.addAction(QtGui.QPixmap(self.resourcespath + 'cross.png'), getMessage("exit-menu-label")) window.exitAction.triggered.connect(self.exitSyncplay) window.menuBar.addMenu(window.fileMenu) # Playback menu - window.playbackMenu = QtGui.QMenu(getMessage("playback-menu-label"), self) - window.playAction = window.playbackMenu.addAction(QtGui.QIcon(self.resourcespath + 'control_play_blue.png'), getMessage("play-menu-label")) + window.playbackMenu = QtWidgets.QMenu(getMessage("playback-menu-label"), self) + window.playAction = window.playbackMenu.addAction(QtGui.QPixmap(self.resourcespath + 'control_play_blue.png'), getMessage("play-menu-label")) window.playAction.triggered.connect(self.play) - window.pauseAction = window.playbackMenu.addAction(QtGui.QIcon(self.resourcespath + 'control_pause_blue.png'), getMessage("pause-menu-label")) + window.pauseAction = window.playbackMenu.addAction(QtGui.QPixmap(self.resourcespath + 'control_pause_blue.png'), getMessage("pause-menu-label")) window.pauseAction.triggered.connect(self.pause) - window.seekAction = window.playbackMenu.addAction(QtGui.QIcon(self.resourcespath + 'clock_go.png'), getMessage("seektime-menu-label")) + window.seekAction = window.playbackMenu.addAction(QtGui.QPixmap(self.resourcespath + 'clock_go.png'), getMessage("seektime-menu-label")) window.seekAction.triggered.connect(self.seekPositionDialog) - window.unseekAction = window.playbackMenu.addAction(QtGui.QIcon(self.resourcespath + 'arrow_undo.png'), getMessage("undoseek-menu-label")) + window.unseekAction = window.playbackMenu.addAction(QtGui.QPixmap(self.resourcespath + 'arrow_undo.png'), getMessage("undoseek-menu-label")) window.unseekAction.triggered.connect(self.undoSeek) window.menuBar.addMenu(window.playbackMenu) # Advanced menu - window.advancedMenu = QtGui.QMenu(getMessage("advanced-menu-label"), self) - window.setoffsetAction = window.advancedMenu.addAction(QtGui.QIcon(self.resourcespath + 'timeline_marker.png'), + window.advancedMenu = QtWidgets.QMenu(getMessage("advanced-menu-label"), self) + window.setoffsetAction = window.advancedMenu.addAction(QtGui.QPixmap(self.resourcespath + 'timeline_marker.png'), getMessage("setoffset-menu-label")) window.setoffsetAction.triggered.connect(self.setOffset) - window.setTrustedDomainsAction = window.advancedMenu.addAction(QtGui.QIcon(self.resourcespath + 'shield_edit.png'), + window.setTrustedDomainsAction = window.advancedMenu.addAction(QtGui.QPixmap(self.resourcespath + 'shield_edit.png'), getMessage("settrusteddomains-menu-label")) window.setTrustedDomainsAction.triggered.connect(self.openSetTrustedDomainsDialog) window.createcontrolledroomAction = window.advancedMenu.addAction( - QtGui.QIcon(self.resourcespath + 'page_white_key.png'), getMessage("createcontrolledroom-menu-label")) + QtGui.QPixmap(self.resourcespath + 'page_white_key.png'), getMessage("createcontrolledroom-menu-label")) window.createcontrolledroomAction.triggered.connect(self.createControlledRoom) - window.identifyascontroller = window.advancedMenu.addAction(QtGui.QIcon(self.resourcespath + 'key_go.png'), + window.identifyascontroller = window.advancedMenu.addAction(QtGui.QPixmap(self.resourcespath + 'key_go.png'), getMessage("identifyascontroller-menu-label")) window.identifyascontroller.triggered.connect(self.identifyAsController) @@ -1327,7 +1327,7 @@ class MainWindow(QtGui.QMainWindow): # Window menu - window.windowMenu = QtGui.QMenu(getMessage("window-menu-label"), self) + window.windowMenu = QtWidgets.QMenu(getMessage("window-menu-label"), self) window.playbackAction = window.windowMenu.addAction(getMessage("playbackbuttons-menu-label")) window.playbackAction.setCheckable(True) @@ -1341,11 +1341,15 @@ class MainWindow(QtGui.QMainWindow): # Help menu - window.helpMenu = QtGui.QMenu(getMessage("help-menu-label"), self) - window.userguideAction = window.helpMenu.addAction(QtGui.QIcon(self.resourcespath + 'help.png'), + window.helpMenu = QtWidgets.QMenu(getMessage("help-menu-label"), self) + if sys.platform.startswith('darwin'): + window.about = window.helpMenu.addAction("&About") + window.about.triggered.connect(self.openAbout) + + window.userguideAction = window.helpMenu.addAction(QtGui.QPixmap(self.resourcespath + 'help.png'), getMessage("userguide-menu-label")) window.userguideAction.triggered.connect(self.openUserGuide) - window.updateAction = window.helpMenu.addAction(QtGui.QIcon(self.resourcespath + 'application_get.png'), + window.updateAction = window.helpMenu.addAction(QtGui.QPixmap(self.resourcespath + 'application_get.png'), getMessage("update-menu-label")) window.updateAction.triggered.connect(self.userCheckForUpdates) @@ -1353,8 +1357,11 @@ class MainWindow(QtGui.QMainWindow): if not sys.platform.startswith('darwin'): window.mainLayout.setMenuBar(window.menuBar) + def openAbout(self): + AboutMsgBox = QtGui.QMessageBox.about(self,"Syncplay","Syncplay v" + version) + def addMainFrame(self, window): - window.mainFrame = QtGui.QFrame() + window.mainFrame = QtWidgets.QFrame() window.mainFrame.setLineWidth(0) window.mainFrame.setMidLineWidth(0) window.mainFrame.setContentsMargins(0, 0, 0, 0) @@ -1414,16 +1421,16 @@ class MainWindow(QtGui.QMainWindow): def updateReadyIcon(self): ready = self.readyPushButton.isChecked() if ready: - self.readyPushButton.setIcon(QtGui.QIcon(self.resourcespath + 'tick_checkbox.png')) + self.readyPushButton.setIcon(QtGui.QPixmap(self.resourcespath + 'tick_checkbox.png')) else: - self.readyPushButton.setIcon(QtGui.QIcon(self.resourcespath + 'empty_checkbox.png')) + self.readyPushButton.setIcon(QtGui.QPixmap(self.resourcespath + 'empty_checkbox.png')) def updateAutoPlayIcon(self): ready = self.autoplayPushButton.isChecked() if ready: - self.autoplayPushButton.setIcon(QtGui.QIcon(self.resourcespath + 'tick_checkbox.png')) + self.autoplayPushButton.setIcon(QtGui.QPixmap(self.resourcespath + 'tick_checkbox.png')) else: - self.autoplayPushButton.setIcon(QtGui.QIcon(self.resourcespath + 'empty_checkbox.png')) + self.autoplayPushButton.setIcon(QtGui.QPixmap(self.resourcespath + 'empty_checkbox.png')) def automaticUpdateCheck(self): currentDateTime = datetime.utcnow() @@ -1459,12 +1466,12 @@ class MainWindow(QtGui.QMainWindow): if userInitiated == True: updateURL = constants.SYNCPLAY_DOWNLOAD_URL if updateURL is not None: - reply = QtGui.QMessageBox.question(self, "Syncplay", - updateMessage, QtGui.QMessageBox.StandardButton.Yes | QtGui.QMessageBox.StandardButton.No) - if reply == QtGui.QMessageBox.Yes: + reply = QtWidgets.QMessageBox.question(self, "Syncplay", + updateMessage, QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No) + if reply == QtWidgets.QMessageBox.Yes: self.QtGui.QDesktopServices.openUrl(QUrl(updateURL)) elif userInitiated: - QtGui.QMessageBox.information(self, "Syncplay", updateMessage) + QtWidgets.QMessageBox.information(self, "Syncplay", updateMessage) else: self.showMessage(updateMessage) @@ -1476,8 +1483,8 @@ class MainWindow(QtGui.QMainWindow): def dropEvent(self, event): rewindFile = False - if QtGui.QDropEvent.proposedAction(event) == Qt.MoveAction: - QtGui.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted + if QtWidgets.QDropEvent.proposedAction(event) == Qt.MoveAction: + QtWidgets.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted rewindFile = True data = event.mimeData() urls = data.urls() @@ -1618,15 +1625,18 @@ class MainWindow(QtGui.QMainWindow): self.resourcespath = utils.findWorkingDir() + u"\\resources\\" else: self.resourcespath = utils.findWorkingDir() + u"/resources/" - self.setWindowFlags(self.windowFlags() & Qt.AA_DontUseNativeMenuBar) + if sys.platform.startswith('darwin'): + self.setWindowFlags(self.windowFlags()) + else: + self.setWindowFlags(self.windowFlags() & Qt.AA_DontUseNativeMenuBar) self.setWindowTitle("Syncplay v" + version) - self.mainLayout = QtGui.QVBoxLayout() + self.mainLayout = QtWidgets.QVBoxLayout() self.addTopLayout(self) self.addBottomLayout(self) self.addMenubar(self) self.addMainFrame(self) self.loadSettings() - self.setWindowIcon(QtGui.QIcon(self.resourcespath + u"syncplay.png")) + self.setWindowIcon(QtGui.QPixmap(self.resourcespath + u"syncplay.png")) self.setWindowFlags(self.windowFlags() & Qt.WindowCloseButtonHint & Qt.AA_DontUseNativeMenuBar & Qt.WindowMinimizeButtonHint & ~Qt.WindowContextHelpButtonHint) self.show() self.setAcceptDrops(True) diff --git a/syncplay/utils.py b/syncplay/utils.py index 1857127..5b8cbb4 100644 --- a/syncplay/utils.py +++ b/syncplay/utils.py @@ -124,6 +124,8 @@ def findWorkingDir(): path = os.path.dirname(os.path.dirname(__file__)) elif frozen in ('dll', 'console_exe', 'windows_exe'): path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) + elif frozen in ('macosx_app'): + path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))) else: path = "" return path diff --git a/syncplay/vendor/qt4reactor.py b/syncplay/vendor/qt5reactor.py similarity index 60% rename from syncplay/vendor/qt4reactor.py rename to syncplay/vendor/qt5reactor.py index a337099..b53e97b 100644 --- a/syncplay/vendor/qt4reactor.py +++ b/syncplay/vendor/qt5reactor.py @@ -1,5 +1,76 @@ -# Copyright (c) 2001-2011 Twisted Matrix Laboratories. -# See LICENSE for details. +# -*- coding: utf-8 -*- +# Copyright (c) 2001-2017 +# Allen Short +# Andy Gayton +# Andrew Bennetts +# Antoine Pitrou +# Apple Computer, Inc. +# Ashwini Oruganti +# bakbuk +# Benjamin Bruheim +# Bob Ippolito +# Burak Nehbit +# Canonical Limited +# Christopher Armstrong +# Christopher R. Wood +# David Reid +# Donovan Preston +# Elvis Stansvik +# Eric Mangold +# Eyal Lotem +# Glenn Tarbox +# Google Inc. +# Hybrid Logic Ltd. +# Hynek Schlawack +# Itamar Turner-Trauring +# James Knight +# Jason A. Mobarak +# Jean-Paul Calderone +# Jessica McKellar +# Jonathan Jacobs +# Jonathan Lange +# Jonathan D. Simms +# Jürgen Hermann +# Julian Berman +# Kevin Horn +# Kevin Turner +# Kyle Altendorf +# Laurens Van Houtven +# Mary Gardiner +# Matthew Lefkowitz +# Massachusetts Institute of Technology +# Moshe Zadka +# Paul Swartz +# Pavel Pergamenshchik +# Ralph Meijer +# Richard Wall +# Sean Riley +# Software Freedom Conservancy +# Tarashish Mishra +# Travis B. Hartwell +# Thijs Triemstra +# Thomas Herve +# Timothy Allen +# Tom Prince + +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: + +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ @@ -7,13 +78,8 @@ This module provides support for Twisted to be driven by the Qt mainloop. In order to use this support, simply do the following:: | app = QApplication(sys.argv) # your code to init Qt - | import qt4reactor - | qt4reactor.install() - -alternatively: - - | from twisted.application import reactors - | reactors.installReactor('qt4') + | import qt5reactor + | qt5reactor.install() Then use twisted.internet APIs as usual. The other methods here are not intended to be called directly. @@ -27,65 +93,61 @@ Twisted can be initialized after QApplication.exec_() with a call to reactor.runReturn(). calling reactor.stop() will unhook twisted but leave your Qt application running -API Stability: stable +Qt5 Port: U{Burak Nehbit} -Maintainer: U{Glenn H Tarbox, PhD} +Current maintainer: U{Christopher R. Wood} +Previous maintainer: U{Tarashish Mishra} +Previous maintainer: U{Glenn H Tarbox, PhD} Previous maintainer: U{Itamar Shtull-Trauring} Original port to QT4: U{Gabe Rudy} Subsequent port by therve """ import sys -import time -from zope.interface import implements + +from PySide2.QtCore import ( + QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer, Signal) +from twisted.internet import posixbase from twisted.internet.interfaces import IReactorFDSet from twisted.python import log, runtime -from twisted.internet import posixbase -from twisted.python.runtime import platformType, platform - -try: - from PyQt4.QtCore import QSocketNotifier, QObject, SIGNAL, QTimer, QCoreApplication - from PyQt4.QtCore import QEventLoop -except ImportError: - from PySide.QtCore import QSocketNotifier, QObject, SIGNAL, QTimer, QCoreApplication - from PySide.QtCore import QEventLoop +from zope.interface import implementer class TwistedSocketNotifier(QObject): - """ - Connection between an fd event and reader/writer callbacks. - """ + """Connection between an fd event and reader/writer callbacks.""" + + activated = Signal(int) def __init__(self, parent, reactor, watcher, socketType): QObject.__init__(self, parent) self.reactor = reactor self.watcher = watcher - fd = watcher.fileno() - self.notifier = QSocketNotifier(fd, socketType, parent) + fd = self.watcher.fileno() + self.notifier = QSocketNotifier(watcher, socketType, parent) self.notifier.setEnabled(True) if socketType == QSocketNotifier.Read: self.fn = self.read else: self.fn = self.write - QObject.connect(self.notifier, SIGNAL("activated(int)"), self.fn) - + self.notifier.activated.connect(self.fn) def shutdown(self): self.notifier.setEnabled(False) - self.disconnect(self.notifier, SIGNAL("activated(int)"), self.fn) + self.notifier.activated.disconnect(self.fn) self.fn = self.watcher = None self.notifier.deleteLater() self.deleteLater() - def read(self, fd): if not self.watcher: return w = self.watcher - # doRead can cause self.shutdown to be called so keep a reference to self.watcher + # doRead can cause self.shutdown to be called so keep + # a reference to self.watcher + def _read(): - #Don't call me again, until the data has been read + # Don't call me again, until the data has been read self.notifier.setEnabled(False) why = None try: @@ -98,18 +160,20 @@ class TwistedSocketNotifier(QObject): if why: self.reactor._disconnectSelectable(w, why, inRead) elif self.watcher: - self.notifier.setEnabled(True) # Re enable notification following sucessfull read + self.notifier.setEnabled(True) + # Re enable notification following sucessfull read self.reactor._iterate(fromqt=True) + log.callWithLogger(w, _read) def write(self, sock): if not self.watcher: return w = self.watcher + def _write(): why = None self.notifier.setEnabled(False) - try: why = w.doWrite() except: @@ -120,12 +184,13 @@ class TwistedSocketNotifier(QObject): elif self.watcher: self.notifier.setEnabled(True) self.reactor._iterate(fromqt=True) + log.callWithLogger(w, _write) - +@implementer(IReactorFDSet) class QtReactor(posixbase.PosixReactorBase): - implements(IReactorFDSet) + # implements(IReactorFDSet) def __init__(self): self._reads = {} @@ -133,19 +198,17 @@ class QtReactor(posixbase.PosixReactorBase): self._notifiers = {} self._timer = QTimer() self._timer.setSingleShot(True) - QObject.connect(self._timer, SIGNAL("timeout()"), self.iterate) - + self._timer.timeout.connect(self.iterate_qt) if QCoreApplication.instance() is None: # Application Object has not been started yet - self.qApp=QCoreApplication([]) - self._ownApp=True + self.qApp = QCoreApplication([]) + self._ownApp = True else: self.qApp = QCoreApplication.instance() - self._ownApp=False + self._ownApp = False self._blockApp = None posixbase.PosixReactorBase.__init__(self) - def _add(self, xer, primary, type): """ Private method for adding a descriptor from the event loop. @@ -156,21 +219,14 @@ class QtReactor(posixbase.PosixReactorBase): if xer not in primary: primary[xer] = TwistedSocketNotifier(None, self, xer, type) - def addReader(self, reader): - """ - Add a FileDescriptor for notification of data available to read. - """ + """Add a FileDescriptor for notification of data available to read.""" self._add(reader, self._reads, QSocketNotifier.Read) - def addWriter(self, writer): - """ - Add a FileDescriptor for notification of data available to write. - """ + """Add a FileDescriptor for notification of data available to write.""" self._add(writer, self._writes, QSocketNotifier.Write) - def _remove(self, xer, primary): """ Private method for removing a descriptor from the event loop. @@ -182,81 +238,66 @@ class QtReactor(posixbase.PosixReactorBase): notifier = primary.pop(xer) notifier.shutdown() - def removeReader(self, reader): - """ - Remove a Selectable for notification of data available to read. - """ + """Remove a Selectable for notification of data available to read.""" self._remove(reader, self._reads) - def removeWriter(self, writer): - """ - Remove a Selectable for notification of data available to write. - """ + """Remove a Selectable for notification of data available to write.""" self._remove(writer, self._writes) - def removeAll(self): - """ - Remove all selectables, and return a list of them. - """ - rv = self._removeAll(self._reads, self._writes) - return rv - + """Remove all selectables, and return a list of them.""" + return self._removeAll(self._reads, self._writes) def getReaders(self): return self._reads.keys() - def getWriters(self): return self._writes.keys() - - def callLater(self,howlong, *args, **kargs): - rval = super(QtReactor,self).callLater(howlong, *args, **kargs) + def callLater(self, howlong, *args, **kargs): + rval = super(QtReactor, self).callLater(howlong, *args, **kargs) self.reactorInvocation() return rval - def reactorInvocation(self): self._timer.stop() self._timer.setInterval(0) self._timer.start() - def _iterate(self, delay=None, fromqt=False): - """See twisted.internet.interfaces.IReactorCore.iterate. - """ + """See twisted.internet.interfaces.IReactorCore.iterate.""" self.runUntilCurrent() - self.doIteration(delay, fromqt) + self.doIteration(delay, fromqt=fromqt) iterate = _iterate + def iterate_qt(self, delay=None): + self.iterate(delay=delay, fromqt=True) + def doIteration(self, delay=None, fromqt=False): - 'This method is called by a Qt timer or by network activity on a file descriptor' - + """This method is called by a Qt timer or by network activity on a file descriptor""" if not self.running and self._blockApp: self._blockApp.quit() self._timer.stop() + if delay is None: + delay = 0 delay = max(delay, 1) if not fromqt: self.qApp.processEvents(QEventLoop.AllEvents, delay * 1000) - if self.timeout() is None: - timeout = 0.1 - elif self.timeout() == 0: - timeout = 0 + t = self.timeout() + if t is None: + timeout = 0.01 else: - timeout = self.timeout() + timeout = min(t, 0.01) self._timer.setInterval(timeout * 1000) self._timer.start() - def runReturn(self, installSignalHandlers=True): self.startRunning(installSignalHandlers=installSignalHandlers) self.reactorInvocation() - def run(self, installSignalHandlers=True): if self._ownApp: self._blockApp = self.qApp @@ -264,6 +305,21 @@ class QtReactor(posixbase.PosixReactorBase): self._blockApp = QEventLoop() self.runReturn() self._blockApp.exec_() + if self.running: + self.stop() + self.runUntilCurrent() + + # def sigInt(self, *args): + # print('I received a sigint. BAIBAI') + # posixbase.PosixReactorBase.sigInt() + # + # def sigTerm(self, *args): + # print('I received a sigterm. BAIBAI') + # posixbase.PosixReactorBase.sigTerm() + # + # def sigBreak(self, *args): + # print('I received a sigbreak. BAIBAI') + # posixbase.PosixReactorBase.sigBreak() class QtEventReactor(QtReactor): @@ -271,22 +327,15 @@ class QtEventReactor(QtReactor): self._events = {} super(QtEventReactor, self).__init__() - def addEvent(self, event, fd, action): - """ - Add a new win32 event to the event loop. - """ + """Add a new win32 event to the event loop.""" self._events[event] = (fd, action) - def removeEvent(self, event): - """ - Remove an event. - """ + """Remove an event.""" if event in self._events: del self._events[event] - def doEvents(self): handles = self._events.keys() if len(handles) > 0: @@ -304,46 +353,33 @@ class QtEventReactor(QtReactor): #print 'Got an unexpected return of %r' % val return - def _runAction(self, action, fd): try: closed = getattr(fd, action)() except: closed = sys.exc_info()[1] log.deferr() - if closed: self._disconnectSelectable(fd, closed, action == 'doRead') - - def timeout(self): - t = super(QtEventReactor, self).timeout() - return min(t, 0.01) - - - def iterate(self, delay=None): - """See twisted.internet.interfaces.IReactorCore.iterate. - """ + def iterate(self, delay=None, fromqt=False): + """See twisted.internet.interfaces.IReactorCore.iterate.""" self.runUntilCurrent() self.doEvents() - self.doIteration(delay) + self.doIteration(delay, fromqt=fromqt) def posixinstall(): - """ - Install the Qt reactor. - """ - p = QtReactor() + """Install the Qt reactor.""" from twisted.internet.main import installReactor + p = QtReactor() installReactor(p) def win32install(): - """ - Install the Qt reactor. - """ - p = QtEventReactor() + """Install the Qt reactor.""" from twisted.internet.main import installReactor + p = QtEventReactor() installReactor(p) @@ -356,4 +392,3 @@ else: __all__ = ["install"] -