summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-03-20 05:07:26 +0100
committerArno <arno@disconnect.de>2017-03-20 05:07:26 +0100
commit18a94d2e4829f378bba7aaf97e2056b45b5ea7a8 (patch)
tree7f21dee643853cfbad2c4e9f37b77d09b1ee7e5e
parent67063f009c4c5d1a313bcaa79a386a32e0e317fe (diff)
downloadBeetPlayer-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.qrc1
-rw-r--r--bizarre_amputee.pngbin0 -> 688 bytes
-rw-r--r--playerwidget.cpp71
-rw-r--r--playerwidget.h8
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
new file mode 100644
index 0000000..0b1d62a
--- /dev/null
+++ b/bizarre_amputee.png
Binary files differ
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;