#include "global.h"
MainWindow::MainWindow() {
+
m_fullscreen = false;
mediaObject = 0;
audioOutput = 0;
stopAct = new QAction(QtIconLoader::icon("media-stop", QIcon(":/images/stop.png")), tr("&Stop"), this);
stopAct->setStatusTip(tr("Stop playback and go back to the search view"));
- stopAct->setShortcut(QKeySequence(Qt::Key_Escape));
+ stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
actions->insert("stop", stopAct);
connect(stopAct, SIGNAL(triggered()), this, SLOT(stop()));
skipAct = new QAction(QtIconLoader::icon("media-skip-forward", QIcon(":/images/skip.png")), tr("S&kip"), this);
skipAct->setStatusTip(tr("Skip to the next video"));
- skipAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right));
+ skipAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_Right) << QKeySequence(Qt::Key_MediaNext));
skipAct->setEnabled(false);
actions->insert("skip", skipAct);
connect(skipAct, SIGNAL(triggered()), mediaView, SLOT(skip()));
pauseAct = new QAction(QtIconLoader::icon("media-pause", QIcon(":/images/pause.png")), tr("&Pause"), this);
pauseAct->setStatusTip(tr("Pause playback"));
- pauseAct->setShortcut(QKeySequence(Qt::Key_Space));
+ pauseAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Space) << QKeySequence(Qt::Key_MediaPlay));
pauseAct->setEnabled(false);
actions->insert("pause", pauseAct);
connect(pauseAct, SIGNAL(triggered()), mediaView, SLOT(pause()));
actions->insert("compactView", compactViewAct);
connect(compactViewAct, SIGNAL(toggled(bool)), this, SLOT(compactView(bool)));
+ /*
// icon should be document-save but it is ugly
downloadAct = new QAction(QtIconLoader::icon("go-down", QIcon(":/images/go-down.png")), tr("&Download"), this);
downloadAct->setStatusTip(tr("Download this video"));
downloadAct->setEnabled(false);
actions->insert("download", downloadAct);
connect(downloadAct, SIGNAL(triggered()), this, SLOT(download()));
+ */
webPageAct = new QAction(QtIconLoader::icon("internet-web-browser", QIcon(":/images/internet-web-browser.png")), tr("&YouTube"), this);
webPageAct->setStatusTip(tr("Open the YouTube video page"));
removeAct = new QAction(tr("&Remove"), this);
removeAct->setStatusTip(tr("Remove the selected videos from the playlist"));
- QList<QKeySequence> shortcuts;
- shortcuts << QKeySequence("Del") << QKeySequence("Backspace");
- removeAct->setShortcuts(shortcuts);
+ removeAct->setShortcuts(QList<QKeySequence>() << QKeySequence("Del") << QKeySequence("Backspace"));
removeAct->setEnabled(false);
actions->insert("remove", removeAct);
connect(removeAct, SIGNAL(triggered()), mediaView, SLOT(removeSelected()));
actions->insert("about", aboutAct);
connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
- searchFocusAct = new QAction(tr("&Search"), this);
+ // Invisible actions
+
+ searchFocusAct = new QAction(this);
searchFocusAct->setShortcut(QKeySequence::Find);
actions->insert("search", searchFocusAct);
connect(searchFocusAct, SIGNAL(triggered()), this, SLOT(searchFocus()));
addAction(searchFocusAct);
+ volumeUpAct = new QAction(this);
+ volumeUpAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Plus));
+ actions->insert("volume-up", volumeUpAct);
+ connect(volumeUpAct, SIGNAL(triggered()), this, SLOT(volumeUp()));
+ addAction(volumeUpAct);
+
+ volumeDownAct = new QAction(this);
+ volumeDownAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Minus));
+ actions->insert("volume-down", volumeDownAct);
+ connect(volumeDownAct, SIGNAL(triggered()), this, SLOT(volumeDown()));
+ addAction(volumeDownAct);
+
+ volumeMuteAct = new QAction(this);
+ volumeMuteAct->setShortcut(tr("Ctrl+M"));
+ actions->insert("volume-mute", volumeMuteAct);
+ connect(volumeMuteAct, SIGNAL(triggered()), this, SLOT(volumeMute()));
+ addAction(volumeMuteAct);
+
// common action properties
foreach (QAction *action, actions->values()) {
action->setAutoRepeat(false);
action->setToolTip(action->statusTip());
+ // show keyboard shortcuts in the status bar
+ if (!action->shortcut().isEmpty())
+ action->setStatusTip(action->statusTip() + " (" + action->shortcut().toString() + ")");
+
// make the actions work when video is fullscreen
action->setShortcutContext(Qt::ApplicationShortcut);
fileMenu = menuBar()->addMenu(tr("&Application"));
// menus->insert("file", fileMenu);
- /*
- fileMenu->addAction(settingsAct);
+ // fileMenu->addAction(settingsAct);
fileMenu->addSeparator();
- */
fileMenu->addAction(quitAct);
playlistMenu = menuBar()->addMenu(tr("&Playlist"));
viewMenu->addSeparator();
viewMenu->addAction(webPageAct);
viewMenu->addSeparator();
- viewMenu->addAction(downloadAct);
+ // viewMenu->addAction(downloadAct);
viewMenu->addAction(compactViewAct);
viewMenu->addAction(fullscreenAct);
compactViewAct->setEnabled(widget == mediaView);
webPageAct->setEnabled(widget == mediaView);
aboutAct->setEnabled(widget != aboutView);
+
+ /*
// this is not the best place to enable downloads, but the user is informed
// if there really is no video is playing
downloadAct->setEnabled(widget == mediaView);
+ */
// cool toolbar on the Mac
// setUnifiedTitleAndToolBarOnMac(widget == mediaView);
pauseAct->setEnabled(true);
pauseAct->setIcon(QtIconLoader::icon("media-pause", QIcon(":/images/pause.png")));
pauseAct->setText(tr("&Pause"));
- pauseAct->setStatusTip(tr("Pause playback"));
+ pauseAct->setStatusTip(tr("Pause playback") + " (" + pauseAct->shortcut().toString() + ")");
skipAct->setEnabled(true);
break;
pauseAct->setEnabled(true);
pauseAct->setIcon(QtIconLoader::icon("media-play", QIcon(":/images/play.png")));
pauseAct->setText(tr("&Play"));
- pauseAct->setStatusTip(tr("Resume playback"));
+ pauseAct->setStatusTip(tr("Resume playback") + " (" + pauseAct->shortcut().toString() + ")");
break;
case Phonon::BufferingState:
if (m_fullscreen) {
// use setShortucs instead of setShortcut
// the latter seems not to work
- QList<QKeySequence> shortcuts;
- shortcuts << QKeySequence(Qt::ALT + Qt::Key_Return);
- fullscreenAct->setShortcuts(shortcuts);
+ fullscreenAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::ALT + Qt::Key_Return));
fullscreenAct->setText(tr("&Full Screen"));
- stopAct->setShortcut(QKeySequence(Qt::Key_Escape));
+ stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
if (m_maximized) showMaximized();
else showNormal();
} else {
- stopAct->setShortcut(QString(""));
- QList<QKeySequence> shortcuts;
- // for some reason it is important that ESC comes first
- shortcuts << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::ALT + Qt::Key_Return);
- fullscreenAct->setShortcuts(shortcuts);
+ stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_MediaStop));
+ fullscreenAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::ALT + Qt::Key_Return));
fullscreenAct->setText(tr("Exit &Full Screen"));
m_maximized = isMaximized();
connect(mediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(totalTimeChanged(qint64)));
seekSlider->setMediaObject(mediaObject);
audioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this);
+ connect(audioOutput, SIGNAL(volumeChanged(qreal)), this, SLOT(volumeChanged(qreal)));
+ connect(audioOutput, SIGNAL(mutedChanged(bool)), this, SLOT(volumeMutedChanged(bool)));
volumeSlider->setAudioOutput(audioOutput);
Phonon::createPath(mediaObject, audioOutput);
}
void MainWindow::tick(qint64 time) {
if (time <= 0) {
- totalTime->clear();
+ currentTime->clear();
return;
}
QTime displayTime(0, (time / 60000) % 60, (time / 1000) % 60);
// qDebug() << "totalTime" << time << displayTime.toString("mm:ss");
}
+void MainWindow::volumeUp() {
+ qreal newVolume = volumeSlider->audioOutput()->volume() + .1;
+ if (newVolume > volumeSlider->maximumVolume())
+ newVolume = volumeSlider->maximumVolume();
+ volumeSlider->audioOutput()->setVolume(newVolume);
+}
+
+void MainWindow::volumeDown() {
+ qreal newVolume = volumeSlider->audioOutput()->volume() - .1;
+ if (newVolume < 0)
+ newVolume = 0;
+ volumeSlider->audioOutput()->setVolume(newVolume);
+}
+
+void MainWindow::volumeMute() {
+ volumeSlider->audioOutput()->setMuted(!volumeSlider->audioOutput()->isMuted());
+}
+
+void MainWindow::volumeChanged(qreal newVolume) {
+ // automatically unmute when volume changes
+ if (volumeSlider->audioOutput()->isMuted())
+ volumeSlider->audioOutput()->setMuted(false);
+ statusBar()->showMessage(tr("Volume at %1%").arg(newVolume*100));
+}
+
+void MainWindow::volumeMutedChanged(bool muted) {
+ if (muted)
+ statusBar()->showMessage(tr("Volume is muted"));
+ else
+ statusBar()->showMessage(tr("Volume is unmuted"));
+}
+
+/*
void MainWindow::abortDownload() {
QProgressDialog* dlg = dynamic_cast<QProgressDialog*>(this->sender());
QMap<QNetworkReply*, DownloadResource>::iterator cur;
m_downloads.remove(r);
}
}
+
+*/