diff options
author | Arno <arno@disconnect.de> | 2017-03-20 05:07:26 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-03-20 05:07:26 +0100 |
commit | 18a94d2e4829f378bba7aaf97e2056b45b5ea7a8 (patch) | |
tree | 7f21dee643853cfbad2c4e9f37b77d09b1ee7e5e | |
parent | 67063f009c4c5d1a313bcaa79a386a32e0e317fe (diff) | |
download | BeetPlayer-18a94d2e4829f378bba7aaf97e2056b45b5ea7a8.tar.gz BeetPlayer-18a94d2e4829f378bba7aaf97e2056b45b5ea7a8.tar.bz2 BeetPlayer-18a94d2e4829f378bba7aaf97e2056b45b5ea7a8.zip |
Implement select, deselect all and delete for folder view
CTRL++ -> select pattern
CTRL+- -> deselect all
Delete -> Delete selected files
-rw-r--r-- | beetplayer.qrc | 1 | ||||
-rw-r--r-- | bizarre_amputee.png | bin | 0 -> 688 bytes | |||
-rw-r--r-- | playerwidget.cpp | 71 | ||||
-rw-r--r-- | playerwidget.h | 8 |
4 files changed, 80 insertions, 0 deletions
diff --git a/beetplayer.qrc b/beetplayer.qrc index 9f495ac..5525157 100644 --- a/beetplayer.qrc +++ b/beetplayer.qrc @@ -25,5 +25,6 @@ <file>splash.png</file> <file>gaping_ass.png</file> <file>fill-color.png</file> + <file>bizarre_amputee.png</file> </qresource> </RCC> diff --git a/bizarre_amputee.png b/bizarre_amputee.png Binary files differnew file mode 100644 index 0000000..0b1d62a --- /dev/null +++ b/bizarre_amputee.png diff --git a/playerwidget.cpp b/playerwidget.cpp index 3645442..5a69744 100644 --- a/playerwidget.cpp +++ b/playerwidget.cpp @@ -19,6 +19,7 @@ #include <QSettings> #include <QMenu> #include <QMessageBox> +#include <QInputDialog> #include <QApplication> #include <algorithm> @@ -93,6 +94,15 @@ void PlayerWidget::setupGui(){ viewAG->addAction(mSearchA); connect(mSearchA, SIGNAL(triggered()), this, SLOT(doFilter())); viewTB->addActions(viewAG->actions()); + mSelectFilesA = new QAction(QIcon(":/bizarre_amputee.png"), tr("Select files..."), this); + mSelectFilesA->setShortcut(tr("CTRL++")); + connect(mSelectFilesA, SIGNAL(triggered()), this, SLOT(doSelectFiles())); + mDeselectAllA = new QAction(QIcon(":/gaping_ass.png"), tr("Clear Selection"), this); + mDeselectAllA->setShortcut(tr("CTRL+-")); + connect(mDeselectAllA, SIGNAL(triggered()), this, SLOT(doDeselect())); + mDeleteFilesA = new QAction(QIcon(":/delete.png"), tr("Delete files..."), this); + mDeleteFilesA->setShortcut(QKeySequence::Delete); + connect(mDeleteFilesA, SIGNAL(triggered()), this, SLOT(doDeleteFiles())); //filter QGroupBox *filterGB = new QGroupBox(tr("Search")); @@ -122,6 +132,7 @@ void PlayerWidget::setupGui(){ selViewL->addStretch(); leftWidgetL->addLayout(selViewL); leftWidget->setLayout(leftWidgetL); + connect(this, SIGNAL(modelChanged()), this, SLOT(doModelChanged())); //now playing label mNowPlayingL = new QLabel; @@ -282,6 +293,10 @@ void PlayerWidget::createActions(){ mView->addAction(expandA); mView->addAction(collapseAllA); mView->addAction(Helper::createSeparator(this)); + mView->addAction(mSelectFilesA); + mView->addAction(mDeselectAllA); + mView->addAction(mDeleteFilesA); + mView->addAction(Helper::createSeparator(this)); mView->addAction(randomPlayA); mPlayListView->addAction(removeFromPlayListA); mPlayListView->addAction(shufflePlayistA); @@ -578,6 +593,19 @@ void PlayerWidget::doPopulateByFolder(QString dir){ } mView->setModel(mFolderModel); emit viewModeChanged(tr("Folder")); + emit modelChanged(); +} + +void PlayerWidget::doModelChanged(){ + if(mCurrentModel == mFolderModel){ + mSelectFilesA->setEnabled(true); + mDeselectAllA->setEnabled(true); + mDeleteFilesA->setEnabled(true); + }else{ + mSelectFilesA->setEnabled(false); + mDeselectAllA->setEnabled(false); + mDeleteFilesA->setEnabled(false); + } } void PlayerWidget::viewDoubleClicked(const QModelIndex &idx){ @@ -648,6 +676,44 @@ void PlayerWidget::doPlayOrPause(){ } } +void PlayerWidget::doSelectFiles(){ + bool ok; + QString pattern = QInputDialog::getText(this, tr("Select files..."), tr("Pattern:"), QLineEdit::Normal, QString(), &ok); + if(ok && !pattern.isEmpty()){ + QList<QStandardItem*> items = mFolderModel->findItems(pattern, Qt::MatchWildcard); + mView->selectionModel()->clear(); + foreach(QStandardItem *i, items){ + QModelIndex idx = mFolderModel->indexFromItem(i); + mView->selectionModel()->select(idx, QItemSelectionModel::Rows | QItemSelectionModel::Toggle); + } + } +} + +void PlayerWidget::doDeselect(){ + mView->selectionModel()->clearSelection(); +} + +void PlayerWidget::doDeleteFiles(){ + QModelIndexList sel = mView->selectionModel()->selectedRows(); + if(!sel.isEmpty()){ + QString msg = QString(tr("Really delete %1 file(s)?")).arg(QString::number(sel.count())); + int r = QMessageBox::question(this, tr("Delete files..."), msg); + if(r == QMessageBox::Yes){ + foreach(QModelIndex i, sel){ + QString cur = i.data(FullPathRole).toString(); + QFileInfo file(cur); + if(file.isFile()){ + QFile::remove(cur); + } + if(file.isDir()){ + file.dir().removeRecursively(); + } + } + doPopulateByFolder(); + } + } +} + void PlayerWidget::volumeUp(){ adjustVolume(2); } @@ -721,6 +787,7 @@ void PlayerWidget::doPopulateByArtist(){ mViewByArtistA->setChecked(true); emit viewModeChanged(tr("Artist")); emit message(QString(tr("Done!"))); + emit modelChanged(); } void PlayerWidget::doPopulateByAlbum(){ @@ -736,6 +803,7 @@ void PlayerWidget::doPopulateByAlbum(){ qApp->restoreOverrideCursor(); emit viewModeChanged(tr("Album")); emit message(QString(tr("Done!"))); + emit modelChanged(); } void PlayerWidget::doPopulateByGenre(){ @@ -751,6 +819,7 @@ void PlayerWidget::doPopulateByGenre(){ qApp->restoreOverrideCursor(); emit viewModeChanged(tr("Genre")); emit message(QString(tr("Done!"))); + emit modelChanged(); } void PlayerWidget::doPopulateBySong(){ @@ -766,6 +835,7 @@ void PlayerWidget::doPopulateBySong(){ qApp->restoreOverrideCursor(); emit viewModeChanged(tr("Song")); emit message(QString(tr("Done!"))); + emit modelChanged(); } void PlayerWidget::doFilter(){ @@ -790,6 +860,7 @@ void PlayerWidget::doFilter(){ populateBySong(root, filter, FilterType); qApp->restoreOverrideCursor(); emit viewModeChanged(tr("Search")); + emit modelChanged(); } void PlayerWidget::clearFilter(){ diff --git a/playerwidget.h b/playerwidget.h index 2c5542b..0a1a9c2 100644 --- a/playerwidget.h +++ b/playerwidget.h @@ -33,11 +33,15 @@ class PlayerWidget : public QWidget { void doPopulateByGenre(); void doPopulateBySong(); void doPopulateByFolder(QString dir = QString()); + void doModelChanged(); void viewDoubleClicked(const QModelIndex &idx); void doPlay(); void doStop(); void doPause(); void doPlayOrPause(); + void doSelectFiles(); + void doDeselect(); + void doDeleteFiles(); void volumeUp(); void volumeDown(); void doFilter(); @@ -68,6 +72,7 @@ class PlayerWidget : public QWidget { void numFilesChanged(int numFiles); void playListLengthChanged(quint64 secs); void message(const QString &msg); + void modelChanged(); void setWinTitle(const QString &title); private: @@ -104,6 +109,9 @@ class PlayerWidget : public QWidget { QAction *mPauseA; QAction *mSearchA; QAction *mViewByArtistA; + QAction *mSelectFilesA; + QAction *mDeselectAllA; + QAction *mDeleteFilesA; qint64 mDurSecs; quint64 mPlayListLength; QString mCurDir; |