From kde-commits Wed May 31 19:28:25 2017 From: Camilo Higuita Date: Wed, 31 May 2017 19:28:25 +0000 To: kde-commits Subject: [babe] /: preview feature for collection views and toolbar icon size fixes Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=149625891925490 Git commit 69fedbf0dadd8aa776258984ec93ea6304d474bd by Camilo Higuita. Committed on 31/05/2017 at 19:28. Pushed by camiloh into branch 'master'. preview feature for collection views and toolbar icon size fixes M +1 -1 Babe.pro.user M +54 -2 babetable.cpp M +11 -2 babetable.h M +1 -0 data.qrc M +2 -2 data/icons/.directory A +65 -0 data/media-playback-stop.svg M +124 -75 mainwindow.cpp M +15 -13 mainwindow.h M +57 -2 mainwindow.ui M +1 -1 settings.cpp M +2 -7 settings.ui https://commits.kde.org/babe/69fedbf0dadd8aa776258984ec93ea6304d474bd diff --git a/Babe.pro.user b/Babe.pro.user index f204226..baa4bce 100755 --- a/Babe.pro.user +++ b/Babe.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/babetable.cpp b/babetable.cpp index 24bf01f..82cb94b 100644 --- a/babetable.cpp +++ b/babetable.cpp @@ -22,7 +22,10 @@ BabeTable::BabeTable(QWidget *parent) : QTableWidget(parent) { = = + preview =3D new QMediaPlayer(this); + connect(this,&QTableWidget::doubleClicked, this, &BabeTable::on_tableW= idget_doubleClicked); + connect(this,&QTableWidget::itemSelectionChanged,[this](){this->stopPr= eview();}); // connect(this->selectionModel(),&QItemSelectionModel::selectionCh= anged,[this](){ this->setSelectionMode(QAbstractItemView::SingleSelectio= n); //qDebug()<<"a row got selected;";}); //connect(this, SIGNAL(customContextMenuRequested(const QPoint&)),SLOT= (setUpContextMenu(const QPoint&))); @@ -370,9 +373,20 @@ void BabeTable::populatePlaylist(const QStringList &ur= ls, const QString &playlis = void BabeTable::passPlaylists() {} = -void BabeTable::enterEvent(QEvent *event) { Q_UNUSED(event); } +void BabeTable::enterEvent(QEvent *event) +{ + + QTableWidget::enterEvent(event); + +} + +void BabeTable::leaveEvent(QEvent *event) +{ = -void BabeTable::leaveEvent(QEvent *event) { Q_UNUSED(event); } + this->stopPreview(); + QTableWidget::leaveEvent(event); + +} = void BabeTable::passStyle(QString style) { this->setStyleSheet(style); } = @@ -800,6 +814,20 @@ void BabeTable::keyPressEvent(QKeyEvent *event) { << this->model()->data(this->model()->index(row, LOCATION)= ).toString(); break; } + case Qt::Key_Space: + { + if(rowPreview) + { + if(preview->state()=3D=3DQMediaPlayer::PlayingState) this->sto= pPreview(); + else + { + previewRow=3D this->getIndex(); + this->startPreview(this->getRowData(previewRow)[LOCATION]); + } + } + + break; + } = default: { QTableWidget::keyPressEvent(event); @@ -826,6 +854,30 @@ void BabeTable::mousePressEvent(QMouseEvent *evt) = } = +void BabeTable::enablePreview(const bool state) +{ + this->rowPreview=3Dstate; +} + +void BabeTable::startPreview(const QString &url) +{ + preview->setMedia(QUrl::fromLocalFile(url)); + preview->play(); + this->item(this->getIndex(),BabeTable::TITLE)->setIcon(QIcon::fromThem= e("quickview")); + emit previewStarted(); +} + +void BabeTable::stopPreview() +{ + if(preview->state()=3D=3DQMediaPlayer::PlayingState) + { + preview->stop(); + this->item(this->previewRow,BabeTable::TITLE)->setIcon(QIcon::from= Theme("")); + emit previewFinished(); + } +} + + void BabeTable::rateGroup(int id) { qDebug() << "rated with: " << id; diff --git a/babetable.h b/babetable.h index 2b5b9df..93ec280 100644 --- a/babetable.h +++ b/babetable.h @@ -24,7 +24,8 @@ #include #include #include -#include +#include +#include = #include "settings.h" #include "notify.h" @@ -60,7 +61,7 @@ public: }; = = -// const QMap columnsNames{{TRACK, "track"}, {TITLE, "tit= le"}, {ARTIST, "artist"},{ALBUM,"album"},{GENRE,"genre"},{LOCATION,"locatio= n"},{STARS,"stars"},{BABE,"babe"},{ART,"art"},{PLAYED,"played"},{PLAYLIST,"= playlist"}}; + // const QMap columnsNames{{TRACK, "track"}, {TITLE, = "title"}, {ARTIST, "artist"},{ALBUM,"album"},{GENRE,"genre"},{LOCATION,"loc= ation"},{STARS,"stars"},{BABE,"babe"},{ART,"art"},{PLAYED,"played"},{PLAYLI= ST,"playlist"}}; QStringList playlistsMenus; QStringList colors =3D BaeUtils::MoodColors; void populateTableView(const QList> &mapList, const = bool &descriptiveTitle); @@ -76,6 +77,9 @@ public: void populatePlaylist(const QStringList &urls, const QString &playlist= ); void setAddMusicMsg(const QString &msg, const QString &icon); int getIndex(); + void enablePreview(const bool state); + void startPreview(const QString &url); + void stopPreview(); QString getStars(const int &value); void removeRepeated(); QList getSelectedRows(const bool &onRightClick=3Dtrue); @@ -124,6 +128,8 @@ private: = CollectionDB connection; = + QMediaPlayer *preview; + int previewRow=3D-1; Notify nof; QToolButton *fav1; QToolButton *fav2; @@ -135,6 +141,7 @@ private: int rColumn=3D0; bool rowColoring=3Dfalse; bool rowDragging=3Dfalse; + bool rowPreview=3Dtrue; QMenu *contextMenu; QMenu* playlistsMenu; QMenu* sendToMenu; @@ -165,6 +172,8 @@ signals: void infoIt_clicked(QString title, QString artist, QString album); void finishedPopulatingPlaylist(QString playlist); void indexesMoved(int track,int newRow); + void previewStarted(); + void previewFinished(); = }; = diff --git a/data.qrc b/data.qrc index 9989638..8862ef7 100644 --- a/data.qrc +++ b/data.qrc @@ -44,5 +44,6 @@ data/icons/youtube.svg data/pattern.png data/LilyScriptOne-Regular.ttf + data/media-playback-stop.svg diff --git a/data/icons/.directory b/data/icons/.directory index 8217790..32fa830 100644 --- a/data/icons/.directory +++ b/data/icons/.directory @@ -1,4 +1,4 @@ [Dolphin] PreviewsShown=3Dtrue -Timestamp=3D2017,3,1,15,43,50 -Version=3D3 +Timestamp=3D2017,5,31,12,35,54 +Version=3D4 diff --git a/data/media-playback-stop.svg b/data/media-playback-stop.svg new file mode 100644 index 0000000..75b65ef --- /dev/null +++ b/data/media-playback-stop.svg @@ -0,0 +1,65 @@ + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/mainwindow.cpp b/mainwindow.cpp index d2253f2..5159c08 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -27,31 +27,20 @@ MainWindow::MainWindow(const QStringList &files, QWidge= t *parent) : { ui->setupUi(this); = - this->setWindowTitle(" Babe ... \xe2\x99\xa1 \xe2\x99\xa1 \xe2\x99\xa= 1 "); this->setWindowIcon(QIcon(":Data/data/babe_48.svg")); this->setWindowIconText("Babe..."); this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + this->defaultWindowFlags =3D this->windowFlags(); = = album_art =3D new Album(":Data/data/babe.png",BaeUtils::BIG_ALBUM,0,fa= lse); ALBUM_SIZE =3D album_art->getSize(); = - ui->controls->installEventFilter(this); = - - // auto blurWidget =3D new QWidget(album_art); - // blurWidget->setGeometry(0,ALBUM_SIZE-static_cast(ALBUM_SIZE*= 0.25),ALBUM_SIZE,static_cast(ALBUM_SIZE*0.25)); - - // QGraphicsBlurEffect* effect =3D new QGraphicsBlurEffect(); - // effect->setBlurRadius(5); - // blurWidget->setGraphicsEffect(effect); - - this->setMinimumSize(ALBUM_SIZE*3,0); = - this->defaultGeometry =3D (QStyle::alignedRect( Qt::LeftToRight, Qt::AlignCenter, @@ -63,7 +52,6 @@ MainWindow::MainWindow(const QStringList &files, QWidget = *parent) : this->saveSettings("GEOMETRY",this->geometry(),"MAINWINDOW"); = player =3D new QMediaPlayer(); - defaultWindowFlags =3D this->windowFlags(); //mpris =3D new Mpris(this); = connect(this, &MainWindow::finishedPlayingSong, this, &MainWindow::add= ToPlayed); @@ -181,6 +169,9 @@ void MainWindow::setUpViews() //connect(playlistTable->table,SIGNAL(createPlaylist_clicked()),this,S= LOT(playlistsView())); connect(playlistTable->table,&BabeTable::queueIt_clicked,this,&MainWin= dow::addToQueue); connect(playlistTable->table,&BabeTable::infoIt_clicked,this,&MainWind= ow::infoIt); + connect(playlistTable->table,&BabeTable::previewStarted,this,&MainWind= ow::pause); + connect(playlistTable->table,&BabeTable::previewFinished,this,&MainWin= dow::play); + = collectionTable =3D new BabeTable(this); //connect(collectionTable, &BabeTable::tableWidget_doubleClicked, this= , &MainWindow::addToPlaylist); @@ -195,6 +186,8 @@ void MainWindow::setUpViews() connect(collectionTable,&BabeTable::babeIt_clicked,this,&MainWindow::b= abeIt); connect(collectionTable,&BabeTable::queueIt_clicked,this,&MainWindow::= addToQueue); connect(collectionTable,&BabeTable::infoIt_clicked,this,&MainWindow::i= nfoIt); + connect(collectionTable,&BabeTable::previewStarted,this,&MainWindow::p= ause); + connect(collectionTable,&BabeTable::previewFinished,this,&MainWindow::= play); = mainList =3D new BabeTable(this); mainList->hideColumn(BabeTable::ALBUM); @@ -202,6 +195,7 @@ void MainWindow::setUpViews() mainList->horizontalHeader()->setVisible(false); mainList->enableRowColoring(true); mainList->enableRowDragging(true); + mainList->enablePreview(false); = //mainList->setSelectionMode(QAbstractItemView::SingleSelection); = @@ -250,6 +244,8 @@ void MainWindow::setUpViews() connect(filterList,&BabeTable::queueIt_clicked,this,&MainWindow::addTo= Queue); connect(filterList,&BabeTable::moodIt_clicked,mainList,&BabeTable::col= orizeRow); connect(filterList,&BabeTable::infoIt_clicked,this,&MainWindow::infoIt= ); + connect(filterList,&BabeTable::previewStarted,this,&MainWindow::pause); + connect(filterList,&BabeTable::previewFinished,this,&MainWindow::play); = mainListView =3D new QStackedWidget(this); mainListView->setFrameShape(QFrame::NoFrame); @@ -268,6 +264,9 @@ void MainWindow::setUpViews() connect(resultsTable,&BabeTable::babeIt_clicked,this,&MainWindow::babe= It); connect(resultsTable,&BabeTable::queueIt_clicked,this,&MainWindow::add= ToQueue); connect(resultsTable,&BabeTable::infoIt_clicked,this,&MainWindow::info= It); + connect(resultsTable,&BabeTable::previewStarted,this,&MainWindow::paus= e); + connect(resultsTable,&BabeTable::previewFinished,this,&MainWindow::pla= y); + = rabbitTable =3D new RabbitView(this); connect(rabbitTable,&RabbitView::playAlbum,this,&MainWindow::putAlbumO= nPlay); @@ -275,6 +274,8 @@ void MainWindow::setUpViews() connect(rabbitTable->getTable(),&BabeTable::queueIt_clicked,this,&Main= Window::addToQueue); connect(rabbitTable->getTable(),&BabeTable::babeIt_clicked,this,&MainW= indow::babeIt); connect(rabbitTable->getTable(),&BabeTable::infoIt_clicked,this,&MainW= indow::infoIt); + connect(rabbitTable->getTable(),&BabeTable::previewStarted,this,&MainW= indow::pause); + connect(rabbitTable->getTable(),&BabeTable::previewFinished,this,&Main= Window::play); = albumsTable =3D new AlbumsView(false,this); connect(albumsTable,&AlbumsView::populateCoversFinished,[this](){qDebu= g()<<"finished populateHeadsFinished";}); @@ -286,7 +287,8 @@ void MainWindow::setUpViews() connect(albumsTable,&AlbumsView::playAlbum,this,&MainWindow::putAlbumO= nPlay); connect(albumsTable,&AlbumsView::babeAlbum_clicked,this,&MainWindow::b= abeAlbum); connect(albumsTable,&AlbumsView::albumDoubleClicked,this,&MainWindow::= albumDoubleClicked); - + connect(albumsTable->albumTable,&BabeTable::previewStarted,this,&MainW= indow::pause); + connect(albumsTable->albumTable,&BabeTable::previewFinished,this,&Main= Window::play); = artistsTable =3D new AlbumsView(true,this); artistsTable->albumTable->showColumn(BabeTable::ALBUM); @@ -299,6 +301,9 @@ void MainWindow::setUpViews() connect(artistsTable,&AlbumsView::playAlbum,this,&MainWindow::putAlbum= OnPlay); connect(artistsTable,&AlbumsView::babeAlbum_clicked,this,&MainWindow::= babeAlbum); connect(artistsTable,&AlbumsView::albumDoubleClicked,this,&MainWindow:= :albumDoubleClicked); + connect(artistsTable->albumTable,&BabeTable::previewStarted,this,&Main= Window::pause); + connect(artistsTable->albumTable,&BabeTable::previewFinished,this,&Mai= nWindow::play); + = infoTable =3D new InfoView(this); connect(infoTable,&InfoView::playAlbum,this,&MainWindow::putAlbumOnPla= y); @@ -940,21 +945,78 @@ void MainWindow::putPixmap(const QByteArray &array) = void MainWindow::setToolbarIconSize(const int &iconSize) //tofix { - // qDebug()<< "Toolbar icons size changed"<mainToolBar->setIconSize(QSize(iconSize,iconSize)); - //playback->setIconSize(QSize(iconSize,iconSize)); - //utilsBar->setIconSize(QSize(iconSize,iconSize)); - ui->mainToolBar->update(); - //this->utilsBar->setIconSize(QSize(iconSize,iconSize)); - /*for (auto obj : ui->collectionUtils->children()) - { - if(static_cast(obj)!=3D0) - { - //static_cast(obj)->setIconSize(QSize(iconSize,= iconSize)); - } - }*/ - //playback->update(); - // this->update(); + + + + for(auto obj: ui->controls->children()) + { + if(qobject_cast(obj)!=3DNULL) + { + qDebug()<< obj->objectName(); + qobject_cast(obj)->setIconSize(QSize(iconSize,ic= onSize)); + + //static_cast(obj)->setIconSize(QSize(iconSize,i= conSize)); + } + + } + + for(auto obj: ui->playlistUtils->children()) + { + if(qobject_cast(obj)!=3DNULL) + { + qDebug()<< obj->objectName(); + qobject_cast(obj)->setIconSize(QSize(iconSize,ic= onSize)); + + //static_cast(obj)->setIconSize(QSize(iconSize,i= conSize)); + } + + } + + for(auto obj: ui->collectionUtils->children()) + { + if(qobject_cast(obj)!=3DNULL) + { + qDebug()<< obj->objectName(); + qobject_cast(obj)->setIconSize(QSize(iconSize,ic= onSize)); + + //static_cast(obj)->setIconSize(QSize(iconSize,i= conSize)); + } + + } + + for(auto obj: infoTable->infoUtils->children()) + { + if(qobject_cast(obj)!=3DNULL) + { + qDebug()<< obj->objectName(); + qobject_cast(obj)->setIconSize(QSize(iconSize,ic= onSize)); + + //static_cast(obj)->setIconSize(QSize(iconSize,i= conSize)); + } + + } + + for(auto obj: playlistTable->btnContainer->children()) + { + if(qobject_cast(obj)!=3DNULL) + { + qDebug()<< obj->objectName(); + qobject_cast(obj)->setIconSize(QSize(iconSize,ic= onSize)); + + //static_cast(obj)->setIconSize(QSize(iconSize,i= conSize)); + } + + } + + + ui->mainToolBar->update(); + ui->controls->update(); + ui->playlistUtils->update(); + infoTable->infoUtils->update(); + playlistTable->btnContainer->update(); + ui->collectionUtils->update(); + } = void MainWindow::collectionView() @@ -1351,10 +1413,8 @@ void MainWindow::feedRabbit() = void MainWindow::loadTrack() { - if(stopped) updater->start(100); = - prev_song =3D current_song; prev_song_pos =3D current_song_pos; = @@ -1363,7 +1423,6 @@ void MainWindow::loadTrack() = calibrateBtn_menu->actions().at(3)->setEnabled(false); = - current_song_pos =3D mainList->getIndex(); current_song =3D mainList->getRowData(current_song_pos); = @@ -1377,15 +1436,10 @@ void MainWindow::loadTrack() if(BaeUtils::fileExists(current_song[BabeTable::LOCATION])) { player->setMedia(QUrl::fromLocalFile(current_song[BabeTable::LOCAT= ION])); - player->play(); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")= ); + this->play(); = - // timer->stop(); timer->start(3000); = - - this->setWindowTitle(current_song[BabeTable::TITLE]+" \xe2\x99\xa1= "+current_song[BabeTable::ARTIST]); - album_art->setTitle(current_song[BabeTable::ARTIST],current_song[B= abeTable::ALBUM]); = feedRabbit(); @@ -1526,26 +1580,12 @@ void MainWindow::on_seekBar_sliderMoved(const int &= position) player->setPosition(player->duration() / 1000 * position); } = -void MainWindow::stopPlayback() -{ - album_art->putDefaultPixmap(); - current_song.clear(); - prev_song =3D current_song; - current_song_pos =3D0; - prev_song_pos =3Dcurrent_song_pos; - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-start.svg")); = - player->stop(); - updater->stop(); - - this->setWindowTitle("Babe..."); - stopped =3D true; -} = void MainWindow::update() { = - if(mainList->rowCount()=3D=3D0) stopPlayback(); + if(mainList->rowCount()=3D=3D0) stop(); = if(!current_song.isEmpty()) { @@ -1603,18 +1643,6 @@ void MainWindow::removequeuedTracks() = } = -int MainWindow::firstQueuedTrack() -{ - int result=3D0; - for(auto row=3D0;rowmainList->rowCount();row++) - if(mainList->item(row,BabeTable::TITLE)->icon().name()=3D=3D"clock= ") - { - result =3D row; - break; - } - - return result; -} = void MainWindow::next() { @@ -1674,20 +1702,41 @@ void MainWindow::on_play_btn_clicked() { if(mainList->rowCount() > 0 || !current_song.isEmpty()) { - if(player->state() =3D=3D QMediaPlayer::PlayingState) - { - player->pause(); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-start.s= vg")); - } - else - { - player->play(); - //updater->start(); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.s= vg")); - } + if(player->state() =3D=3D QMediaPlayer::PlayingState) this->pause(= ); + else this->play(); } } = +void MainWindow::play() +{ + player->play(); + ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); + this->setWindowTitle(current_song[BabeTable::TITLE]+" \xe2\x99\xa1 "+c= urrent_song[BabeTable::ARTIST]); + +} + +void MainWindow::pause() +{ + player->pause(); + ui->play_btn->setIcon(QIcon(":Data/data/media-playback-start.svg")); +} + +void MainWindow::stop() +{ + album_art->putDefaultPixmap(); + current_song.clear(); + prev_song =3D current_song; + current_song_pos =3D0; + prev_song_pos =3Dcurrent_song_pos; + ui->play_btn->setIcon(QIcon(":Data/data/media-playback-stop.svg")); + + player->stop(); + updater->stop(); + + this->setWindowTitle(" Babe ... \xe2\x99\xa1 \xe2\x99\xa1 \xe2\x99\xa= 1 "); + stopped =3D true; +} + void MainWindow::on_backward_btn_clicked() { if(mainList->rowCount() > 0) diff --git a/mainwindow.h b/mainwindow.h index d5b67c7..84acebc 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -90,7 +90,7 @@ public: void loadTrack(); void loadTrackAt(const int &pos); bool babeTrack(const QMap &track); - + QList> searchFor(const QStringList &queries); = QStringList searchKeys =3D {"location:","artist:","album:","title:","g= enre:","online:","playlist:"}; = @@ -108,7 +108,17 @@ public slots: void addToPlaylist(const QList> &mapList, const bool= ¬Repeated=3Dfalse, const appendPos &pos =3D APPENDBOTTOM); void putPixmap(const QByteArray &array); void populateResultsTable(const QList> &mapList); - QList> searchFor(const QStringList &queries); + void addToQueue(const QList > &tracks); + + void pause(); + void play(); + void stop(); + void next(); + void back(); + + void expand(); + void go_mini(); + void go_playlistMode(); void dummy(); = private slots: @@ -165,7 +175,6 @@ private slots: void loadMood(); bool removeQueuedTrack(const QMap &track, const int &pos= ); void removequeuedTracks(); - void addToQueue(const QList > &tracks); void on_filterBtn_clicked(); void on_filter_textChanged(const QString &arg1); void infoIt(const QString &title, const QString &artist, const QString= &album); @@ -228,22 +237,17 @@ private: void setUpPlaylist(); void setUpRightFrame(); = - void next(); - void back(); int shuffleNumber(); - void expand(); - void go_mini(); - void go_playlistMode(); - void stopPlayback(); - int firstQueuedTrack(); = void clearMainList(); + void clearCurrentList(); void calibrateMainList(); + void updateList(); void populateMainList(); - void clearCurrentList(); bool isBabed(const QMap &track); void feedRabbit(); + void saveSettings(const QString &key, const QVariant &value,const QStr= ing &group); QVariant loadSettings(const QString &key, const QString &group, const = QVariant &defaultValue =3D QVariant()); = @@ -273,8 +277,6 @@ private: bool shuffle =3D false; bool stopped =3D false; = - - signals: void finishedPlayingSong(QString url); void collectionChecked(); diff --git a/mainwindow.ui b/mainwindow.ui index 9db177b..0eb8602 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -37,6 +37,14 @@ + + + 0 + 10 + 34 + 34 + + 0 @@ -76,6 +84,14 @@ + + + 0 + 240 + 34 + 34 + + 0 @@ -115,6 +131,14 @@ + + + 0 + 200 + 34 + 34 + + 0 @@ -157,6 +181,14 @@ + + + 0 + 160 + 34 + 34 + + 0 @@ -199,6 +231,14 @@ + + + 0 + 120 + 34 + 34 + + 0 @@ -241,6 +281,14 @@ + + + 0 + 90 + 34 + 34 + + 0 @@ -280,6 +328,14 @@ + + + 0 + 50 + 34 + 34 + + 0 @@ -447,8 +503,7 @@ ... - - .. + true diff --git a/settings.cpp b/settings.cpp index 584248c..43f7c59 100644 --- a/settings.cpp +++ b/settings.cpp @@ -399,7 +399,7 @@ void settings::setToolbarIconSize(const int &iconSize) case 22: ui->toolbarIconSize->setCurrentIndex(1); break; - case 24: + case 32: ui->toolbarIconSize->setCurrentIndex(2); break; default: diff --git a/settings.ui b/settings.ui index cd281e9..9c30063 100644 --- a/settings.ui +++ b/settings.ui @@ -440,7 +440,7 @@ - 22 + 16 @@ -454,12 +454,7 @@ - 24 - - - - - 48 + 32