diff options
-rw-r--r-- | src-qt5/desktop-utils/lumina-mediaplayer/mainUI.cpp | 225 | ||||
-rw-r--r-- | src-qt5/desktop-utils/lumina-mediaplayer/mainUI.h | 34 | ||||
-rw-r--r-- | src-qt5/desktop-utils/lumina-mediaplayer/mainUI.ui | 223 |
3 files changed, 414 insertions, 68 deletions
diff --git a/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.cpp b/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.cpp index b4a83a66..09fe485d 100644 --- a/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.cpp +++ b/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.cpp @@ -13,6 +13,10 @@ #include <QDesktopServices> #include <QUrl> +#include <QFileDialog> + +//#include "VideoWidget.h" + MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI()){ ui->setupUi(this); closing = false; @@ -25,8 +29,10 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI()){ grp->addButton(ui->radio_local); grp->addButton(ui->radio_pandora); grp->setExclusive(true); - setupPandora(); + ui->radio_pandora->setChecked(true); + setupPlayer(); + setupPandora(); setupTrayIcon(); setupConnections(); setupIcons(); @@ -45,6 +51,37 @@ void MainUI::loadArguments(QStringList){ // ==== PRIVATE ==== +void MainUI::setupPlayer(){ + PLAYER = new QMediaPlayer(this); //base multimedia object + VIDEO = new QVideoWidget(this); //output to this widget for video + PLAYLIST = new QMediaPlaylist(PLAYER); //pull from this playlist + ui->videoLayout->addWidget(VIDEO); + + //Now setup the interfaces between all these objects + PLAYER->setVideoOutput(VIDEO); + PLAYER->setPlaylist(PLAYLIST); + PLAYER->setVolume(100); //just maximize this - will be managed outside this app + + //Setup the player connections + //connect(PLAYER, SIGNAL(audioAvailableChanged(bool)), this, SLOT(LocalAudioAvailable(bool)) ); + connect(PLAYER, SIGNAL(currentMediaChanged(const QMediaContent&)), this, SLOT(LocalMediaChanged(const QMediaContent&)) ); + connect(PLAYER, SIGNAL(durationChanged(qint64)), this, SLOT(LocalDurationChanged(qint64)) ); + connect(PLAYER, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(LocalError(QMediaPlayer::Error)) ); + connect(PLAYER, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(LocalMediaStatusChanged(QMediaPlayer::MediaStatus)) ); + connect(PLAYER, SIGNAL(mutedChanged(bool)), this, SLOT(LocalNowMuted(bool)) ); + connect(PLAYER, SIGNAL(positionChanged(qint64)), this, SLOT(LocalPositionChanged(qint64)) ); + connect(PLAYER, SIGNAL(seekableChanged(bool)), this, SLOT(LocalIsSeekable(bool)) ); + connect(PLAYER, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(LocalStateChanged(QMediaPlayer::State)) ); + connect(PLAYER, SIGNAL(videoAvailableChanged(bool)), this, SLOT(LocalVideoAvailable(bool)) ); + connect(PLAYER, SIGNAL(volumeChanged(int)), this, SLOT(LocalVolumeChanged(int)) ); + //Setup the playlist connections + connect(PLAYLIST, SIGNAL(currentIndexChanged(int)), this, SLOT(LocalListIndexChanged(int)) ); + connect(PLAYLIST, SIGNAL(mediaChanged(int,int)), this, SLOT(LocalListMediaChanged(int,int)) ); + connect(PLAYLIST, SIGNAL(mediaInserted(int,int)), this, SLOT(LocalListMediaInserted(int,int)) ); + connect(PLAYLIST, SIGNAL(mediaRemoved(int,int)), this, SLOT(LocalListMediaRemoved(int,int)) ); + +} + void MainUI::setupPandora(){ if(!LUtils::isValidBinary("pianobar")){ ui->radio_pandora->setEnabled(false); @@ -101,6 +138,13 @@ void MainUI::setupConnections(){ connect(ui->actionVolDown, SIGNAL(triggered()), this, SLOT(voldownToggled()) ); connect(ui->actionClose, SIGNAL(triggered()), this, SLOT(closeApplication()) ); + connect(ui->slider_local, SIGNAL(sliderMoved(int)), this, SLOT(setLocalPosition(int)) ); + connect(ui->tool_local_addFiles, SIGNAL(clicked()), this, SLOT(addLocalMedia()) ); + connect(ui->tool_local_rm, SIGNAL(clicked()), this, SLOT(rmLocalMedia()) ); + connect(ui->tool_local_shuffle, SIGNAL(clicked()), PLAYLIST, SLOT(shuffle()) ); + connect(ui->tool_local_repeat, SIGNAL(toggled(bool)), this, SLOT(localPlaybackSettingsChanged()) ); + + connect(ui->push_pandora_apply, SIGNAL(clicked()), this, SLOT(applyPandoraSettings()) ); connect(ui->combo_pandora_station, SIGNAL(activated(QString)), this, SLOT(changePandoraStation(QString)) ); connect(ui->tool_pandora_ban, SIGNAL(clicked()), PANDORA, SLOT(banSong()) ); @@ -134,6 +178,12 @@ void MainUI::setupIcons(){ ui->actionVolUp->setIcon( LXDG::findIcon("audio-volume-high","") ); ui->actionVolDown->setIcon( LXDG::findIcon("audio-volume-low","") ); + //Local Player Pages + ui->tool_local_addFiles->setIcon( LXDG::findIcon("list-add","") ); + ui->tool_local_rm->setIcon( LXDG::findIcon("list-remove","") ); + ui->tool_local_shuffle->setIcon( LXDG::findIcon("media-playlist-shuffle","") ); + ui->tool_local_repeat->setIcon( LXDG::findIcon("media-playlist-repeat","") ); + //Pandora Pages ui->push_pandora_apply->setIcon( LXDG::findIcon("dialog-ok-apply","dialog-ok") ); ui->tool_pandora_ban->setIcon( LXDG::findIcon("dialog-warning","") ); @@ -185,18 +235,21 @@ void MainUI::PlayerTypeChanged(bool active){ SYSTRAY->setIcon( ico ); this->setWindowIcon( ico ); this->setWindowTitle( tr("Pandora Radio") ); + //Now hide/deactivate any toolbar buttons which are not used + ui->actionBack->setVisible(!ui->radio_pandora->isChecked()); }else{ ui->stackedWidget->setCurrentWidget(ui->page_local); + LocalStateChanged(QMediaPlayer::StoppedState); QIcon ico = LXDG::findIcon("media-playlist-audio","audio-x-generic"); SYSTRAY->setIcon( ico ); this->setWindowIcon( ico ); this->setWindowTitle( tr("Media Player") ); + localPlaybackSettingsChanged(); } //Now close down any currently running streams as needed if(!ui->radio_pandora->isChecked() && PANDORA->currentState()!=PianoBarProcess::Stopped){ PANDORA->closePianoBar(); } + else if(!ui->radio_local->isChecked() && PLAYER->state()!=QMediaPlayer::StoppedState){ PLAYER->stop(); } - //Now hide/deactivate any toolbar buttons which are not used - ui->actionBack->setVisible(!ui->radio_pandora->isChecked()); } @@ -204,29 +257,44 @@ void MainUI::PlayerTypeChanged(bool active){ void MainUI::playToggled(){ if(ui->radio_pandora->isChecked()){ PANDORA->play(); + }else{ + if( ui->list_local->selectedItems().count()==1){ + PLAYLIST->setCurrentIndex( ui->list_local->row(ui->list_local->selectedItems().first()) ); + } + PLAYER->play(); } + } void MainUI::pauseToggled(){ if(ui->radio_pandora->isChecked()){ PANDORA->pause(); - } + } else{ + PLAYER->pause(); + } } void MainUI::stopToggled(){ if(ui->radio_pandora->isChecked()){ PANDORA->closePianoBar(); + }else{ + PLAYER->stop(); } } void MainUI::nextToggled(){ if(ui->radio_pandora->isChecked()){ PANDORA->skipSong(); + }else{ + PLAYLIST->next(); } } void MainUI::backToggled(){ if(ui->radio_pandora->isChecked()){ return; } + else{ + PLAYLIST->previous(); + } } void MainUI::volupToggled(){ @@ -241,6 +309,155 @@ void MainUI::voldownToggled(){ } } +//Player Options/Feedback +void MainUI::addLocalMedia(){ + QStringList paths = QFileDialog::getOpenFileNames(this, tr("Open Multimedia Files"), QDir::homePath() ); + for(int i=0; i<paths.length(); i++){ + PLAYLIST->addMedia( QUrl::fromLocalFile(paths[i]) ); + } +} + +void MainUI::rmLocalMedia(){ + QList<QListWidgetItem*> sel = ui->list_local->selectedItems(); + for(int i=0; i<sel.length(); i++){ + PLAYLIST->removeMedia( ui->list_local->row(sel[i]) ); + } +} + +void MainUI::localPlaybackSettingsChanged(){ + if(ui->tool_local_shuffle->isChecked()){ PLAYLIST->setPlaybackMode(QMediaPlaylist::Random); } + else if(ui->tool_local_repeat->isChecked()){ PLAYLIST->setPlaybackMode(QMediaPlaylist::Loop); } + else{ PLAYLIST->setPlaybackMode(QMediaPlaylist::Sequential); } +} + +//Local Playlist Feedback +void MainUI::LocalListIndexChanged(int current){ + for(int i=0; i<ui->list_local->count(); i++){ + if(i==current){ + ui->list_local->item(i)->setIcon( LXDG::findIcon("media-playback-start","") ); + ui->list_local->scrollToItem(ui->list_local->item(i)); + ui->label_player_novideo->setText( tr("Now Playing:")+"\n\n"+ui->list_local->item(i)->text() ); + }else if(!ui->list_local->item(i)->icon().isNull()){ + ui->list_local->item(i)->setIcon( LXDG::findIcon("","") ); + } + } +} + +void MainUI::LocalListMediaChanged(int start, int end){ + for(int i=start; i<end+1; i++){ + QUrl url = PLAYLIST->media(i).canonicalUrl(); + ui->list_local->item(i)->setText(url.toLocalFile().section("/",-1).simplified()); + } +} + +void MainUI::LocalListMediaInserted(int start, int end){ + for(int i=start; i<end+1; i++){ + QUrl url = PLAYLIST->media(i).canonicalUrl(); + ui->list_local->insertItem(i, url.toLocalFile().section("/",-1).simplified()); + } +} + +void MainUI::LocalListMediaRemoved(int start, int end){ + for(int i=end; i>=start; i--){ + delete ui->list_local->takeItem(i); + } +} + + + +/*void MainUI::LocalAudioAvailable(bool avail){ + //qDebug() << "Local Audio Available:" << avail; + if(!avail && PLAYER->state()!=QMediaPlayer::StoppedState){ + qDebug() << "WARNING: No Audio Output Available!!"; + } +}*/ + +void MainUI::LocalVideoAvailable(bool avail){ + //qDebug() << "Local VideoAvailable:" << avail; + //if(ui->tabWidget_local->currentWidget()==ui->tab_local_playing && avail){ + VIDEO->setVisible(avail); + //} + ui->label_player_novideo->setVisible(!avail); +} + +void MainUI::LocalIsSeekable(bool avail){ + ui->slider_local->setEnabled(avail); +} + +void MainUI::LocalNowMuted(bool mute){ + qDebug() << "Local Player Muted:" << mute; +} + +void MainUI::LocalError(QMediaPlayer::Error err){ + if(err == QMediaPlayer::NoError){ return; }; + QString errtext = QString(tr("[PLAYBACK ERROR]\n%1")).arg(PLAYER->errorString()); + qDebug() << "Local Player Error:" << err << errtext; + ui->label_player_novideo->setText(errtext); + VIDEO->setVisible(false); + ui->label_player_novideo->setVisible(true); +} + +void MainUI::LocalMediaChanged(const QMediaContent&){ + //qDebug() << "Local Media Changed:" << content; + +} + +void MainUI::LocalMediaStatusChanged(QMediaPlayer::MediaStatus stat){ + //qDebug() << "Local Media Status Changed:" << stat; + QString txt; + switch(stat){ + case QMediaPlayer::LoadingMedia: + txt = tr("Media Loading..."); break; + case QMediaPlayer::StalledMedia: + txt = tr("Media Stalled..."); break; + case QMediaPlayer::BufferingMedia: + txt = tr("Media Buffering..."); break; + default: + txt.clear(); + } + if(txt.isEmpty()){ ui->statusbar->clearMessage(); } + else{ ui->statusbar->showMessage(txt, 1500); } +} + +void MainUI::LocalStateChanged(QMediaPlayer::State state){ + //qDebug() << "Local Player State Changed:" << state; + ui->actionPlay->setVisible(state != QMediaPlayer::PlayingState); + ui->actionStop->setVisible(state != QMediaPlayer::StoppedState); + ui->actionPause->setVisible(state == QMediaPlayer::PlayingState); + ui->actionNext->setVisible(state == QMediaPlayer::PlayingState); + ui->actionBack->setVisible(state == QMediaPlayer::PlayingState); + if(state == QMediaPlayer::StoppedState){ + ui->tabWidget_local->setCurrentWidget(ui->tab_local_playlist); + ui->tabWidget_local->setTabEnabled(0,false); + }else if(state == QMediaPlayer::PlayingState && !ui->tabWidget_local->isTabEnabled(0)){ + ui->tabWidget_local->setTabEnabled(0,true); + ui->tabWidget_local->setCurrentWidget(ui->tab_local_playing); + }else if(PLAYER->mediaStatus()== QMediaPlayer::BufferingMedia || PLAYER->mediaStatus()==QMediaPlayer::BufferedMedia){ + if(VIDEO->isVisible() != PLAYER->isVideoAvailable()){ VIDEO->setVisible(PLAYER->isVideoAvailable()); } + } + +} + +void MainUI::LocalDurationChanged(qint64 tot){ + ui->slider_local->setRange(0,tot); + tot = qRound(tot/1000.0); //convert from ms to seconds + QString time = QTime(0, tot/60, tot%60,0).toString("m:ss") ; + //qDebug() << "Duration Update:" << tot << time; + ui->slider_local->setWhatsThis(time); +} + +void MainUI::LocalPositionChanged(qint64 val){ + ui->slider_local->setValue(val); + val = qRound(val/1000.0); //convert from ms to seconds + QString time = QTime(0, val/60, val%60,0).toString("m:ss"); + //qDebug() << "Time Update:" << val << time; + ui->label_local_runstats->setText(time+ "/" + ui->slider_local->whatsThis()); +} + +void MainUI::LocalVolumeChanged(int vol){ + qDebug() << "Local Volume Changed:" << vol; +} + //Pandora Options void MainUI::showPandoraSongInfo(){ diff --git a/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.h b/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.h index 0024cef3..6128f5f7 100644 --- a/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.h +++ b/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.h @@ -14,6 +14,11 @@ #include <QSystemTrayIcon> #include <QCloseEvent> +//QMultimedia classes +#include <QMediaPlayer> +#include <QMediaPlaylist> +#include <QVideoWidget> + #include "PianoBarProcess.h" namespace Ui{ @@ -31,9 +36,13 @@ public: private: Ui::MainUI *ui; PianoBarProcess *PANDORA; + QMediaPlayer *PLAYER; + QVideoWidget *VIDEO; + QMediaPlaylist *PLAYLIST; QSystemTrayIcon *SYSTRAY; bool closing; + void setupPlayer(); void setupPandora(); void setupConnections(); void setupIcons(); @@ -53,6 +62,31 @@ private slots: void volupToggled(); void voldownToggled(); + //Local Playback UI slots + void setLocalPosition(int pos){ PLAYER->setPosition(pos); } + void addLocalMedia(); + void rmLocalMedia(); + void localPlaybackSettingsChanged(); + + //Local Playlist Feedback + void LocalListIndexChanged(int); //item being played just changed + void LocalListMediaChanged(int,int); + void LocalListMediaInserted(int,int); + void LocalListMediaRemoved(int,int); + + //Local Player Feedback + //void LocalAudioAvailable(bool); + void LocalVideoAvailable(bool); + void LocalIsSeekable(bool); + void LocalNowMuted(bool); + void LocalError(QMediaPlayer::Error); + void LocalMediaChanged(const QMediaContent&); + void LocalMediaStatusChanged(QMediaPlayer::MediaStatus); + void LocalStateChanged(QMediaPlayer::State); + void LocalDurationChanged(qint64); + void LocalPositionChanged(qint64); + void LocalVolumeChanged(int); + //Pandora Options void showPandoraSongInfo(); void changePandoraStation(QString); diff --git a/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.ui b/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.ui index 0b567aae..f0bbef0e 100644 --- a/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.ui +++ b/src-qt5/desktop-utils/lumina-mediaplayer/mainUI.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>385</width> - <height>410</height> + <height>416</height> </rect> </property> <property name="windowTitle"> @@ -89,7 +89,7 @@ <widget class="QWidget" name="page_local"> <layout class="QVBoxLayout" name="verticalLayout_6"> <item> - <widget class="QTabWidget" name="tabWidget"> + <widget class="QTabWidget" name="tabWidget_local"> <property name="currentIndex"> <number>0</number> </property> @@ -99,9 +99,9 @@ </attribute> <layout class="QVBoxLayout" name="verticalLayout_7"> <item> - <layout class="QHBoxLayout" name="videoLayout_2"> + <layout class="QHBoxLayout" name="videoLayout"> <item> - <widget class="QLabel" name="label_player_novideo_2"> + <widget class="QLabel" name="label_player_novideo"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> @@ -129,46 +129,121 @@ </layout> </item> <item> - <layout class="QHBoxLayout" name="videoControlLayout_2"> + <layout class="QHBoxLayout" name="videoControlLayout"> <item> - <widget class="QToolButton" name="toolButton"> + <widget class="QLabel" name="label_local_runstats"> <property name="text"> - <string>...</string> + <string notr="true">?/?</string> </property> </widget> </item> <item> - <widget class="QToolButton" name="toolButton_2"> + <widget class="QSlider" name="slider_local"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_local_playlist"> + <attribute name="title"> + <string>Playlist</string> + </attribute> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QListWidget" name="list_local"/> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_8"> + <item> + <widget class="QToolButton" name="tool_local_addFiles"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="text"> - <string>...</string> + <string notr="true">add</string> + </property> + <property name="autoRaise"> + <bool>true</bool> </property> </widget> </item> <item> - <widget class="QLabel" name="label_player_runstats_2"> + <widget class="QToolButton" name="tool_local_rm"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="text"> - <string notr="true">?/?</string> + <string notr="true">rm</string> + </property> + <property name="autoRaise"> + <bool>true</bool> </property> </widget> </item> <item> - <widget class="QSlider" name="playerSlider_2"> + <spacer name="verticalSpacer_3"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="tool_local_shuffle"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string notr="true">shfl</string> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_local_repeat"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string notr="true">rpt</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> </property> </widget> </item> </layout> </item> </layout> - <zorder>label_player_novideo</zorder> - <zorder>layoutWidget</zorder> - <zorder>layoutWidget_2</zorder> - </widget> - <widget class="QWidget" name="tab_local_playlist"> - <attribute name="title"> - <string>Playlist</string> - </attribute> </widget> </widget> </item> @@ -368,47 +443,67 @@ </spacer> </item> <item> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <item> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string>Current Station</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="combo_pandora_station"/> - </item> - <item> - <widget class="QToolButton" name="tool_pandora_stationrm"> - <property name="statusTip"> - <string>Delete current station</string> - </property> - <property name="text"> - <string>rm</string> - </property> - <property name="autoRaise"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="tool_pandora_stationadd"> - <property name="statusTip"> - <string>Create new station</string> - </property> - <property name="text"> - <string>add</string> - </property> - <property name="popupMode"> - <enum>QToolButton::InstantPopup</enum> - </property> - <property name="autoRaise"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> + <widget class="QGroupBox" name="groupBox_3"> + <property name="title"> + <string>Current Station</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>1</number> + </property> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <item> + <widget class="QComboBox" name="combo_pandora_station"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="sizeAdjustPolicy"> + <enum>QComboBox::AdjustToMinimumContentsLength</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_pandora_stationrm"> + <property name="statusTip"> + <string>Delete current station</string> + </property> + <property name="text"> + <string>rm</string> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_pandora_stationadd"> + <property name="statusTip"> + <string>Create new station</string> + </property> + <property name="text"> + <string>add</string> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> </item> </layout> </widget> @@ -568,7 +663,7 @@ <x>0</x> <y>0</y> <width>385</width> - <height>20</height> + <height>23</height> </rect> </property> <widget class="QMenu" name="menuFile"> @@ -611,8 +706,8 @@ <addaction name="actionPlay"/> <addaction name="actionPause"/> <addaction name="actionStop"/> - <addaction name="actionNext"/> <addaction name="actionBack"/> + <addaction name="actionNext"/> <addaction name="actionVolDown"/> <addaction name="actionVolUp"/> </widget> |