diff --git a/syncplay/constants.py b/syncplay/constants.py
index fc02015..a61deb6 100644
--- a/syncplay/constants.py
+++ b/syncplay/constants.py
@@ -47,7 +47,6 @@ PROTOCOL_TIMEOUT = 12.5
RECONNECT_RETRIES = 10
SERVER_STATE_INTERVAL = 1
WARNING_OSD_MESSAGES_LOOP_INTERVAL = 1
-MERGE_PLAYPAUSE_BUTTONS = False
SYNC_ON_PAUSE = True # Client seek to global position - subtitles may disappear on some media players
#Usually there's no need to adjust these
LAST_PAUSED_DIFF_THRESHOLD = 2
@@ -121,7 +120,6 @@ STYLE_SUBLABEL = "QCheckBox, QLabel {{ margin-left: 6px; padding-left: 16px; ba
STYLE_ERRORLABEL = "QLabel { color : black; border-style: outset; border-width: 2px; border-radius: 7px; border-color: red; padding: 2px; background: #FFAAAA; }"
STYLE_SUCCESSLABEL = "QLabel { color : black; border-style: outset; border-width: 2px; border-radius: 7px; border-color: green; padding: 2px; background: #AAFFAA; }"
STYLE_READY_PUSHBUTTON = "QPushButton { text-align: left; padding: 10px 5px 10px 5px;}"
-STYLE_AUTO_PLAY_PUSHBUTTON = "QPushButton { text-align: left; padding: 5px 5px 5px 5px; }"
STYLE_NOTIFICATIONBOX = "Username { color: #367AA9; font-weight:bold; }"
STYLE_CONTACT_INFO = u"{}
" # Contact info message
STYLE_USERNAME = "color: #367AA9; font-weight:bold;"
diff --git a/syncplay/messages.py b/syncplay/messages.py
index 39ab961..e2a546e 100755
--- a/syncplay/messages.py
+++ b/syncplay/messages.py
@@ -123,6 +123,9 @@ en = {
"vlc-failed-versioncheck": "This version of VLC is not supported by Syncplay. Please use VLC 2.",
"vlc-failed-other" : "When trying to load the syncplay.lua interface script VLC has provided the following error: {}", # Syncplay Error
+ "invalid-seek-value" : u"Invalid seek value",
+ "invalid-offset-value" : u"Invalid offset value",
+
# Client arguments
"argument-description" : 'Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network.',
"argument-epilog" : 'If no options supplied _config values will be used',
@@ -207,14 +210,15 @@ en = {
"contact-label" : "Feel free to e-mail dev@syncplay.pl, chat via the #Syncplay IRC channel on irc.freenode.net, raise an issue via GitHub or visit http://syncplay.pl/",
- "joinroom-guibuttonlabel" : "Join room",
- "seektime-guibuttonlabel" : "Seek to time",
- "undoseek-guibuttonlabel" : "Undo seek",
- "togglepause-guibuttonlabel" : "Toggle pause",
- "play-guibuttonlabel" : "Play",
- "pause-guibuttonlabel" : "Pause",
+ "joinroom-menu-label" : "Join room",
+ "seektime-menu-label" : "Seek to time",
+ "undoseek-menu-label" : "Undo seek",
+ "togglepause-menu-label" : "Toggle pause",
+ "play-menu-label" : "Play",
+ "pause-menu-label" : "Pause",
+ "autoplay-menu-label" : u"Auto-play when everyone is ready",
+
"ready-guipushbuttonlabel" : u"I'm ready to watch!",
- "autoplay-guipushbuttonlabel" : u"Auto-play when everyone is ready",
"roomuser-heading-label" : "Room / User",
"size-heading-label" : "Size",
@@ -222,9 +226,6 @@ en = {
"filename-heading-label" : "Filename",
"notifications-heading-label" : "Notifications",
"userlist-heading-label" : "List of who is playing what",
- "othercommands-heading-label" : "Other commands",
- "room-heading-label" : "Room",
- "seek-heading-label" : "Seek",
"browseformedia-label" : "Browse for media files",
@@ -237,6 +238,8 @@ en = {
"createcontrolledroom-menu-label" : "&Create controlled room",
"identifyascontroller-menu-label" : "&Identify as room controller",
+ "playback-menu-label" : u"&Playback",
+
"help-menu-label" : "&Help",
"userguide-menu-label" : "Open user &guide",
"update-menu-label" : "Check for &update",
@@ -295,12 +298,8 @@ en = {
"help-tooltip" : "Opens the Syncplay.pl user guide.",
"reset-tooltip" : "Reset all settings to the default configuration.",
- "togglepause-tooltip" : "Pause/unpause media.",
- "play-tooltip" : "Unpause media.",
- "pause-tooltip" : "Pause media.",
- "undoseek-tooltip" : "Seek to where you were before the most recent seek.",
"joinroom-tooltip" : "Leave current room and joins specified room.",
- "seektime-tooltip" : "Jump to specified time (in seconds / min:sec). Use +/- for relative seek.",
+ "seektime-msgbox-label" : "Jump to specified time (in seconds / min:sec). Use +/- for relative seek.",
# In-userlist notes (GUI)
"differentsize-note" : "Different size!",
@@ -461,6 +460,9 @@ ru = {
"vlc-failed-versioncheck" : u"Данная версия VLC не поддерживается Syncplay. Пожалуйста, используйте VLC версии 2 или выше.",
"vlc-failed-other" : u"Во время загрузки скрипта интерфейса syncplay.lua в VLC произошла следующая ошибка: {}", # Syncplay Error
+ "invalid-seek-value" : u"Invalid seek value", # TODO: Translate into Russian
+ "invalid-offset-value" : u"Invalid offset value", # TODO: Translate into Russian
+
# Client arguments
"argument-description" : u'Решение для синхронного воспроизведения в VLC, MPlayer или MPC-HC через Интернет.',
"argument-epilog" : u'Если параметр не будет передан, то будет использоваться значение, указанное в _config.',
@@ -545,14 +547,14 @@ ru = {
"contact-label" : u"Есть идея, нашли ошибку или хотите оставить отзыв? Пишите на dev@syncplay.pl, в IRC канал #Syncplay на irc.freenode.net или задавайте вопросы через GitHub. Кроме того, заходите на http://syncplay.pl/ за инорфмацией, помощью и обновлениями!",
- "joinroom-guibuttonlabel" : u"Зайти в комнату",
- "seektime-guibuttonlabel" : u"Перемотать",
- "undoseek-guibuttonlabel" : u"Отменить перемотку",
- "togglepause-guibuttonlabel" : u"Вкл./выкл. паузу",
- "play-guibuttonlabel" : u"Play",
- "pause-guibuttonlabel" : u"Пауза",
+ "joinroom-menu-label" : u"Зайти в комнату",
+ "seektime-menu-label" : u"Перемотать",
+ "undoseek-menu-label" : u"Отменить перемотку",
+ "play-menu-label" : u"Play",
+ "pause-menu-label" : u"Пауза",
+ "autoplay-menu-label" : u"Auto-play when everyone is ready", # TODO: Translate into Russian
+
"ready-guipushbuttonlabel" : u"I'm ready to watch!", # TODO: Translate into Russian
- "autoplay-guipushbuttonlabel" : u"Auto-play when everyone is ready", # TODO: Translate into Russian
"roomuser-heading-label" : u"Комната / Пользователь",
"size-heading-label" : u"Size", # TODO: Translate into Russian
@@ -560,9 +562,6 @@ ru = {
"filename-heading-label" : u"Filename", # TODO: Translate into Russian
"notifications-heading-label" : u"Уведомления",
"userlist-heading-label" : u"Кто что смотрит",
- "othercommands-heading-label" : u"Другие команды",
- "room-heading-label" : u"Комната",
- "seek-heading-label" : u"Перемотка",
"browseformedia-label" : u"Выбрать видеофайл",
@@ -633,12 +632,8 @@ ru = {
"help-tooltip" : u"Открыть Руководство Пользователя на Syncplay.pl.",
"reset-tooltip" : u"Сбрасывает все настройки Syncplay в начальное состояние.",
- "togglepause-tooltip" : u"Приостановить/продолжить просмотр.",
- "play-tooltip" : u"Продолжить просмотр.",
- "pause-tooltip" : u"Приостановить просмотр.",
- "undoseek-tooltip" : u"Перейти к тому месту, которое Вы просматривали до перемотки.",
"joinroom-tooltip" : u"Покинуть комнату и зайти в другую, указанную комнату.",
- "seektime-tooltip" : u"Перемотать к определенному моменту времени (указывать в секундах или мин:сек). Используйте +/-, чтобы перемотать вперед/назад относительно настоящего момента.",
+ "seektime-msgbox-label" : u"Перемотать к определенному моменту времени (указывать в секундах или мин:сек). Используйте +/-, чтобы перемотать вперед/назад относительно настоящего момента.",
# In-userlist notes (GUI)
"differentsize-note" : u"Размер файла не совпадает!",
@@ -799,6 +794,9 @@ de = {
"vlc-failed-versioncheck": u"Diese VLC-Version wird von Syncplay nicht unterstützt. Bitte nutze VLC 2.0",
"vlc-failed-other" : u"Beim Laden des syncplay.lua Interface-Skripts durch VLC trat folgender Fehler auf: {}", # Syncplay Error
+ "invalid-seek-value" : u"Invalid seek value", # TODO: Translate into German
+ "invalid-offset-value" : u"Invalid offset value", # TODO: Translate into German
+
# Client arguments
"argument-description" : u'Anwendung, um mehrere MPlayer, MPC-HC und VLC-Instanzen über das Internet zu synchronisieren.',
"argument-epilog" : u'Wenn keine Optionen angegeben sind, werden die _config-Werte verwendet',
@@ -881,14 +879,15 @@ de = {
"contact-label" : u"Du hast eine Idee, einen Bug gefunden oder möchtest Feedback geben? Sende eine E-Mail an dev@syncplay.pl, chatte auf dem #Syncplay IRC-Kanal auf irc.freenode.net oder öffne eine Fehlermeldung auf GitHub. Außerdem findest du auf http://syncplay.pl/ weitere Informationen, Hilfestellungen und Updates.",
- "joinroom-guibuttonlabel" : u"Raum beitreten",
- "seektime-guibuttonlabel" : u"Spule zu Zeit",
- "undoseek-guibuttonlabel" : u"Rückgängig",
- "togglepause-guibuttonlabel" : u"Pause umschalten",
- "play-guibuttonlabel" : u"Wiedergabe",
- "pause-guibuttonlabel" : u"Pause",
+ "joinroom-menu-label" : u"Raum beitreten",
+ "seektime-menu-label" : u"Spule zu Zeit",
+ "undoseek-menu-label" : u"Rückgängig",
+ "togglepause-menu-label" : u"Pause umschalten",
+ "play-menu-label" : u"Wiedergabe",
+ "pause-menu-label" : u"Pause",
+ "autoplay-menu-label" : u"Auto-play when everyone is ready", # TODO: Translate into German
+
"ready-guipushbuttonlabel" : u"I'm ready to watch!", # TODO: Translate into German
- "autoplay-guipushbuttonlabel" : u"Auto-play when everyone is ready", # TODO: Translate into German
"roomuser-heading-label" : u"Raum / Benutzer",
"size-heading-label" : u"Größe",
@@ -896,9 +895,6 @@ de = {
"filename-heading-label" : u"Dateiname",
"notifications-heading-label" : u"Benachrichtigungen",
"userlist-heading-label" : u"Liste der gespielten Dateien",
- "othercommands-heading-label" : u"Andere Befehle",
- "room-heading-label" : u"Raum",
- "seek-heading-label" : u"Spulen",
"browseformedia-label" : u"Nach Mediendateien durchsuchen",
@@ -971,12 +967,8 @@ de = {
"help-tooltip" : u"Öffnet Hilfe auf syncplay.pl [Englisch]",
"reset-tooltip" : u"Alle Einstellungen auf Standardwerte zurücksetzen.",
- "togglepause-tooltip" : u"Datei starten/pausieren",
- "play-tooltip" : u"Fortsetzen",
- "pause-tooltip" : u"Pausieren",
- "undoseek-tooltip" : u"Den letzten Spulvorgang rückgängig machen.",
"joinroom-tooltip" : u"Den aktuellen Raum verlassen und stattdessen den angegebenen betreten.",
- "seektime-tooltip" : u"Springe zur angegebenen Zeit (in Sekunden oder min:sek). Verwende +/- zum relativen Springen.",
+ "seektime-msgbox-label" : u"Springe zur angegebenen Zeit (in Sekunden oder min:sek). Verwende +/- zum relativen Springen.",
# In-userlist notes (GUI)
"differentsize-note" : u"Verschiedene Größe!",
diff --git a/syncplay/ui/gui.py b/syncplay/ui/gui.py
index 03e9d09..45a3102 100644
--- a/syncplay/ui/gui.py
+++ b/syncplay/ui/gui.py
@@ -208,10 +208,9 @@ class MainWindow(QtGui.QMainWindow):
self.updateReadyIcon()
def updateAutoPlayState(self, newState):
- oldState = self.autoPlayPushButton.isChecked()
+ oldState = self.autoplayAction.isChecked()
if newState != oldState and newState != None:
- self.autoPlayPushButton.setChecked(newState)
- self.updateAutoPlayIcon()
+ self.autoplayAction.setChecked(newState)
def roomClicked(self, item):
while item.parent().row() != -1:
@@ -250,18 +249,21 @@ class MainWindow(QtGui.QMainWindow):
self._syncplayClient.sendRoom()
def seekPosition(self):
- s = re.match(constants.UI_SEEK_REGEX, self.seekInput.text())
- if s:
- sign = self._extractSign(s.group('sign'))
- t = utils.parseTime(s.group('time'))
- if t is None:
- return
- if sign:
- t = self._syncplayClient.getGlobalPosition() + sign * t
- self._syncplayClient.setPosition(t)
-
- else:
- self.showErrorMessage("Invalid seek value")
+ seekTime, ok = QtGui.QInputDialog.getText(self, getMessage("seektime-menu-label"),
+ getMessage("seektime-msgbox-label"), QtGui.QLineEdit.Normal,
+ "0:00")
+ if ok and seekTime != '':
+ s = re.match(constants.UI_SEEK_REGEX, seekTime)
+ if s:
+ sign = self._extractSign(s.group('sign'))
+ t = utils.parseTime(s.group('time'))
+ if t is None:
+ return
+ if sign:
+ t = self._syncplayClient.getGlobalPosition() + sign * t
+ self._syncplayClient.setPosition(t)
+ else:
+ self.showErrorMessage(getMessage("invalid-seek-value"))
def undoSeek(self):
tmp_pos = self._syncplayClient.getPlayerPosition()
@@ -284,69 +286,6 @@ class MainWindow(QtGui.QMainWindow):
self.exitSyncplay()
self.saveSettings()
- def setupSizes(self):
- self.hideRoomSeekLabels()
- self.miscThreshold = self.seekGroup.sizeHint().width()+self.roomGroup.sizeHint().width()+self.miscGroup.sizeHint().width()+30
- self.hideMiscLabels()
- self.setMinimumWidth(self.seekGroup.sizeHint().width()+self.roomGroup.sizeHint().width()+self.miscGroup.sizeHint().width()+30)
- self.seekGroup.setMinimumWidth(self.seekGroup.sizeHint().width())
- self.roomGroup.setMinimumWidth(self.roomGroup.sizeHint().width())
- self.miscGroup.setMinimumWidth(self.miscGroup.sizeHint().width())
- self.showRoomSeekLabels()
- self.showMiscLabels()
- windowMaximumWidth = self.maximumWidth()
- self.seekGroup.setMaximumWidth(self.seekGroup.sizeHint().width())
- self.roomGroup.setMaximumWidth(self.roomGroup.sizeHint().width())
- self.miscGroup.setMaximumWidth(self.miscGroup.sizeHint().width())
- self.setMaximumWidth(windowMaximumWidth)
- self.roomSeekThreshold = self.mainLayout.sizeHint().width()
-
- def hideRoomSeekLabels(self):
- self.roomButton.setText("")
- self.seekButton.setText("")
-
- def hideMiscLabels(self):
- self.unseekButton.setText("")
- if constants.MERGE_PLAYPAUSE_BUTTONS:
- self.playpauseButton.setText("")
- else:
- self.playButton.setText("")
- self.pauseButton.setText("")
-
- def showRoomSeekLabels(self):
- if not constants.SHOW_BUTTON_LABELS:
- return
- self.roomButton.setText(getMessage("joinroom-guibuttonlabel"))
- self.seekButton.setText(getMessage("seektime-guibuttonlabel"))
-
- def showMiscLabels(self):
- self.unseekButton.setText(getMessage("undoseek-guibuttonlabel"))
- if not constants.SHOW_BUTTON_LABELS:
- return
- if constants.MERGE_PLAYPAUSE_BUTTONS:
- self.playpauseButton.setText(getMessage("togglepause-guibuttonlabel"))
- else:
- self.playButton.setText(getMessage("play-guibuttonlabel"))
- self.pauseButton.setText(getMessage("pause-guibuttonlabel"))
-
- def resizeEvent(self,resizeEvent):
- self.updateListGeometry()
- if self.roomGroup and self.miscThreshold:
- currentWidth = self.mainFrame.size().width()
- if currentWidth < self.miscThreshold:
- if self.unseekButton.text() != "":
- self.hideMiscLabels()
- else:
- if self.unseekButton.text() == "":
- self.showMiscLabels()
-
- if currentWidth < self.roomSeekThreshold:
- if self.roomButton.text() != "":
- self.hideRoomSeekLabels()
- else:
- if self.roomButton.text() == "":
- self.showRoomSeekLabels()
-
def loadMediaBrowseSettings(self):
settings = QSettings("Syncplay", "MediaBrowseDialog")
settings.beginGroup("MediaBrowseDialog")
@@ -431,7 +370,7 @@ class MainWindow(QtGui.QMainWindow):
t = self._syncplayClient.getUserOffset() + sign * t
self._syncplayClient.setUserOffset(t)
else:
- self.showErrorMessage("Invalid offset value")
+ self.showErrorMessage(getMessage("invalid-offset-value"))
def openUserGuide(self):
if sys.platform.startswith('linux'):
@@ -456,6 +395,7 @@ class MainWindow(QtGui.QMainWindow):
window.outputbox.moveCursor(QtGui.QTextCursor.End)
window.outputbox.insertHtml(constants.STYLE_CONTACT_INFO.format(getMessage("contact-label")))
window.outputbox.moveCursor(QtGui.QTextCursor.End)
+ window.outputbox.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
window.outputlabel = QtGui.QLabel(getMessage("notifications-heading-label"))
window.outputFrame = QtGui.QFrame()
@@ -476,10 +416,28 @@ class MainWindow(QtGui.QMainWindow):
window.listFrame = QtGui.QFrame()
window.listFrame.setLineWidth(0)
window.listFrame.setMidLineWidth(0)
+ window.listFrame.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
window.listLayout.setContentsMargins(0, 0, 0, 0)
window.listLayout.addWidget(window.listlabel)
window.listLayout.addWidget(window.listTreeView)
+ window.roomInput = QtGui.QLineEdit()
+ window.roomInput.returnPressed.connect(self.joinRoom)
+ window.roomButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'door_in.png'),
+ getMessage("joinroom-menu-label"))
+ window.roomButton.pressed.connect(self.joinRoom)
+ window.roomLayout = QtGui.QHBoxLayout()
+ window.roomFrame = QtGui.QFrame()
+ window.roomFrame.setLayout(self.roomLayout)
+ window.roomFrame.setContentsMargins(0,0,0,0)
+ window.roomFrame.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
+ window.roomLayout.setContentsMargins(0,0,0,0)
+ self.roomButton.setToolTip(getMessage("joinroom-tooltip"))
+ window.roomLayout.addWidget(window.roomInput)
+ window.roomLayout.addWidget(window.roomButton)
+ window.roomFrame.setMaximumHeight(window.roomFrame.sizeHint().height())
+ window.listLayout.addWidget(window.roomFrame, Qt.AlignRight)
+
window.readyPushButton = QtGui.QPushButton()
readyFont = QtGui.QFont()
readyFont.setWeight(QtGui.QFont.Bold)
@@ -491,18 +449,6 @@ class MainWindow(QtGui.QMainWindow):
window.readyPushButton.setStyleSheet(constants.STYLE_READY_PUSHBUTTON)
window.listLayout.addWidget(window.readyPushButton, Qt.AlignRight)
- window.autoPlayPushButton = QtGui.QPushButton()
- autoPlayFont = QtGui.QFont()
- autoPlayFont.setWeight(QtGui.QFont.Bold)
- window.autoPlayPushButton.setText(getMessage("autoplay-guipushbuttonlabel"))
- window.autoPlayPushButton.setCheckable(True)
- window.autoPlayPushButton.setAutoExclusive(False)
- window.autoPlayPushButton.toggled.connect(self.changeAutoPlayState)
- window.autoPlayPushButton.setFont(autoPlayFont)
- window.autoPlayPushButton.setStyleSheet(constants.STYLE_AUTO_PLAY_PUSHBUTTON)
- window.listLayout.addWidget(window.autoPlayPushButton, Qt.AlignRight)
- self.updateAutoPlayIcon()
-
window.listFrame.setLayout(window.listLayout)
window.topSplit.addWidget(window.outputFrame)
@@ -512,94 +458,11 @@ class MainWindow(QtGui.QMainWindow):
window.mainLayout.addWidget(window.topSplit)
window.topSplit.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding)
- def addBottomLayout(self, window):
- window.bottomLayout = QtGui.QHBoxLayout()
-
- window.addSeekBox(MainWindow)
- window.addMiscBox(MainWindow)
- window.addRoomBox(MainWindow)
-
- window.bottomLayout.addWidget(window.seekGroup)
- window.bottomLayout.addWidget(window.miscGroup)
- window.bottomLayout.addWidget(window.roomGroup)
-
- window.mainLayout.addLayout(window.bottomLayout, Qt.AlignLeft)
-
- def addRoomBox(self, window):
- window.roomGroup = QtGui.QGroupBox(getMessage("room-heading-label"))
-
- window.roomInput = QtGui.QLineEdit()
- window.roomInput.returnPressed.connect(self.joinRoom)
- window.roomButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'door_in.png'),
- getMessage("joinroom-guibuttonlabel"))
- window.roomButton.pressed.connect(self.joinRoom)
- window.roomLayout = QtGui.QHBoxLayout()
- window.roomInput.setFixedWidth(150)
-
- self.roomButton.setToolTip(getMessage("joinroom-tooltip"))
-
- window.roomLayout.addWidget(window.roomInput)
- window.roomLayout.addWidget(window.roomButton)
-
- window.roomGroup.setLayout(window.roomLayout)
- window.roomGroup.setFixedHeight(window.roomGroup.sizeHint().height())
-
- def addSeekBox(self, window):
- window.seekGroup = QtGui.QGroupBox(getMessage("seek-heading-label"))
-
- window.seekInput = QtGui.QLineEdit()
- window.seekInput.returnPressed.connect(self.seekPosition)
- window.seekButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'clock_go.png'),
- getMessage("seektime-guibuttonlabel"))
- window.seekButton.pressed.connect(self.seekPosition)
-
- self.seekButton.setToolTip(getMessage("seektime-tooltip"))
-
- window.seekLayout = QtGui.QHBoxLayout()
- window.seekInput.setText("0:00")
- window.seekInput.setFixedWidth(60)
-
- window.seekLayout.addWidget(window.seekInput)
- window.seekLayout.addWidget(window.seekButton)
-
- window.seekGroup.setLayout(window.seekLayout)
- window.seekGroup.setFixedHeight(window.seekGroup.sizeHint().height())
-
- def addMiscBox(self, window):
- window.miscGroup = QtGui.QGroupBox(getMessage("othercommands-heading-label"))
-
- window.unseekButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'arrow_undo.png'),
- getMessage("undoseek-guibuttonlabel"))
- window.unseekButton.pressed.connect(self.undoSeek)
- self.unseekButton.setToolTip(getMessage("undoseek-tooltip"))
-
- window.miscLayout = QtGui.QHBoxLayout()
- window.miscLayout.addWidget(window.unseekButton)
- if constants.MERGE_PLAYPAUSE_BUTTONS == True:
- window.playpauseButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'control_pause_blue.png'),
- getMessage("togglepause-guibuttonlabel"))
- window.playpauseButton.pressed.connect(self.togglePause)
- window.miscLayout.addWidget(window.playpauseButton)
- self.playpauseButton.setToolTip(getMessage("togglepause-tooltip"))
- else:
- window.playButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'control_play_blue.png'),
- getMessage("play-guibuttonlabel"))
- window.playButton.pressed.connect(self.play)
- window.miscLayout.addWidget(window.playButton)
- window.pauseButton = QtGui.QPushButton(QtGui.QIcon(self.resourcespath + 'control_pause_blue.png'),
- getMessage("pause-guibuttonlabel"))
- window.pauseButton.pressed.connect(self.pause)
- window.miscLayout.addWidget(window.pauseButton)
- self.playButton.setToolTip(getMessage("play-tooltip"))
- self.pauseButton.setToolTip(getMessage("pause-tooltip"))
-
- window.miscGroup.setLayout(window.miscLayout)
- window.miscGroup.setFixedHeight(window.miscGroup.sizeHint().height())
-
-
def addMenubar(self, window):
window.menuBar = QtGui.QMenuBar()
+ # File menu
+
window.fileMenu = QtGui.QMenu(getMessage("file-menu-label"), self)
window.openAction = window.fileMenu.addAction(QtGui.QIcon(self.resourcespath + 'folder_explore.png'),
getMessage("openmedia-menu-label"))
@@ -613,6 +476,22 @@ class MainWindow(QtGui.QMainWindow):
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.playAction.triggered.connect(self.play)
+ window.pauseAction = window.playbackMenu.addAction(QtGui.QIcon(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.triggered.connect(self.seekPosition)
+ window.unseekAction = window.playbackMenu.addAction(QtGui.QIcon(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'),
getMessage("setoffset-menu-label"))
@@ -626,6 +505,12 @@ class MainWindow(QtGui.QMainWindow):
window.identifyascontroller.triggered.connect(self.identifyAsController)
window.menuBar.addMenu(window.advancedMenu)
+ window.autoplayAction = window.advancedMenu.addAction(getMessage("autoplay-menu-label"))
+ window.autoplayAction.setCheckable(True)
+ window.autoplayAction.triggered.connect(self.changeAutoPlayState)
+
+ # Help menu
+
window.helpMenu = QtGui.QMenu(getMessage("help-menu-label"), self)
window.userguideAction = window.helpMenu.addAction(QtGui.QIcon(self.resourcespath + 'help.png'),
getMessage("userguide-menu-label"))
@@ -664,8 +549,7 @@ class MainWindow(QtGui.QMainWindow):
self._syncplayClient.changeReadyState(self.readyPushButton.isChecked())
def changeAutoPlayState(self):
- self.updateAutoPlayIcon()
- self._syncplayClient.changeAutoPlayState(self.autoPlayPushButton.isChecked())
+ self._syncplayClient.changeAutoPlayState(self.autoplayAction.isChecked())
def updateReadyIcon(self):
ready = self.readyPushButton.isChecked()
@@ -674,13 +558,6 @@ class MainWindow(QtGui.QMainWindow):
else:
self.readyPushButton.setIcon(QtGui.QIcon(self.resourcespath + 'empty_checkbox.png'))
- def updateAutoPlayIcon(self):
- ready = self.autoPlayPushButton.isChecked()
- if ready:
- self.autoPlayPushButton.setIcon(QtGui.QIcon(self.resourcespath + 'tick_checkbox.png'))
- else:
- self.autoPlayPushButton.setIcon(QtGui.QIcon(self.resourcespath + 'empty_checkbox.png'))
-
def automaticUpdateCheck(self):
currentDateTime = datetime.utcnow()
if not self.config['checkForUpdatesAutomatically']:
@@ -776,10 +653,8 @@ class MainWindow(QtGui.QMainWindow):
self.setWindowTitle("Syncplay v" + version)
self.mainLayout = QtGui.QVBoxLayout()
self.addTopLayout(self)
- self.addBottomLayout(self)
self.addMenubar(self)
self.addMainFrame(self)
- self.setupSizes()
self.loadSettings()
self.setWindowIcon(QtGui.QIcon(self.resourcespath + "syncplay.png"))
self.setWindowFlags(self.windowFlags() & Qt.WindowCloseButtonHint & Qt.AA_DontUseNativeMenuBar & Qt.WindowMinimizeButtonHint & ~Qt.WindowContextHelpButtonHint)