diff options
Diffstat (limited to 'playerwidget.cpp')
-rw-r--r-- | playerwidget.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
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(){ |