From a957512861065d700663ddd522de57925b878eae Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 26 Aug 2017 06:51:56 +0200 Subject: Implement view for WebRadio does nothing yet, doesn't crash, either :) --- beetplayer.qrc | 1 + dog_hood.png | Bin 0 -> 778 bytes playerwidget.cpp | 35 +++++++++++++++++++++++++++++++++++ playerwidget.h | 5 ++++- 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 dog_hood.png diff --git a/beetplayer.qrc b/beetplayer.qrc index 4c41d40..beb3cd5 100644 --- a/beetplayer.qrc +++ b/beetplayer.qrc @@ -29,5 +29,6 @@ home.png sissyd.png quadd.png + dog_hood.png diff --git a/dog_hood.png b/dog_hood.png new file mode 100644 index 0000000..d25fc5e Binary files /dev/null and b/dog_hood.png differ diff --git a/playerwidget.cpp b/playerwidget.cpp index 0810487..9d41b79 100644 --- a/playerwidget.cpp +++ b/playerwidget.cpp @@ -74,6 +74,7 @@ void PlayerWidget::setupGui(){ mView->setSelectionMode(QAbstractItemView::ExtendedSelection); connect(mView, &BeetView::doubleClicked, this, &PlayerWidget::viewDoubleClicked); mFolderModel = new QStandardItemModel; + mWebRadioModel = new QStandardItemModel; mCurrentModel = mViewModel; QToolBar *viewTB = new QToolBar; QActionGroup *viewAG = new QActionGroup(this); @@ -108,6 +109,11 @@ void PlayerWidget::setupGui(){ mSearchA->setCheckable(true); viewAG->addAction(mSearchA); connect(mSearchA, &QAction::triggered, this, &PlayerWidget::doFilter); + QAction *viewByWebradioA = new QAction(QIcon(":/dog_hood.png"), tr("Webradio"), this); + viewByWebradioA->setCheckable(true); + viewAG->addAction(Helper::createSeparator(this)); + viewAG->addAction(viewByWebradioA); + connect(viewByWebradioA, &QAction::triggered, this, &PlayerWidget::doPopulateByWebradio); viewTB->addActions(viewAG->actions()); mSelectFilesA = new QAction(QIcon(":/bizarre_amputee.png"), tr("Select files..."), this); mSelectFilesA->setShortcut(tr("CTRL++")); @@ -699,6 +705,24 @@ void PlayerWidget::populateByGenre(QStandardItem *parent, const QString &filter) } } +void PlayerWidget::populateByWebradio(QStandardItem *parent){ + QSqlDatabase db = QSqlDatabase::database("beetplayerdb"); + QStandardItem *root = parent; + QIcon wrIcon(":/dog_hood.png"); + QSqlQuery wrQ = QSqlQuery(db); + wrQ.prepare("SELECT tdescription, turl FROM webradio ORDER BY tdescription DESC"); + wrQ.exec(); + while(wrQ.next()){ + QStandardItem *curWr = new QStandardItem; + curWr->setEditable(false); + curWr->setFont(QFont("courier")); + curWr->setText(wrQ.value(0).toString()); + curWr->setIcon(wrIcon); + curWr->setData(wrQ.value(1), UrlRole); + root->appendRow(curWr); + } +} + void PlayerWidget::doPopulateByFolder(){ mCurrentModel = mFolderModel; mFolderModel->clear(); @@ -749,6 +773,17 @@ void PlayerWidget::doPopulateByFolder(){ emit modelChanged(); } +void PlayerWidget::doPopulateByWebradio(){ + mCurrentModel = mWebRadioModel; + mWebRadioModel->clear(); + mWebRadioModel->setHorizontalHeaderLabels(QStringList() << tr("Description")); + QStandardItem *root = mWebRadioModel->invisibleRootItem(); + populateByWebradio(root); + mView->setModel(mWebRadioModel); + emit viewModeChanged("WebRadio"); + emit modelChanged(); +} + void PlayerWidget::doModelChanged(){ if(mCurrentModel == mFolderModel){ mSelectFilesA->setEnabled(true); diff --git a/playerwidget.h b/playerwidget.h index 4e27293..9489306 100644 --- a/playerwidget.h +++ b/playerwidget.h @@ -29,7 +29,7 @@ class PlayerWidget : public QWidget { public: enum ItemType { Artist, Album, Song, Genre }; enum PopulateType { FilterType, IdType, EmptyType }; - enum CustomRoles { TypeRole = Qt::UserRole + 1, IdRole = Qt::UserRole + 2, FullPathRole = Qt::UserRole + 3, GenreRole = Qt::UserRole + 4, ArtistRole = Qt::UserRole + 5, TitleRole = Qt::UserRole + 6, AlbumRole = Qt::UserRole + 7, LengthRole = Qt::UserRole + 8 }; + enum CustomRoles { TypeRole = Qt::UserRole + 1, IdRole = Qt::UserRole + 2, FullPathRole = Qt::UserRole + 3, GenreRole = Qt::UserRole + 4, ArtistRole = Qt::UserRole + 5, TitleRole = Qt::UserRole + 6, AlbumRole = Qt::UserRole + 7, LengthRole = Qt::UserRole + 8, UrlRole = Qt::UserRole + 9 }; explicit PlayerWidget(QWidget *parent = 0); ~PlayerWidget(); const QMediaPlayer* player() const { return mPlayer; } @@ -41,6 +41,7 @@ class PlayerWidget : public QWidget { void doPopulateBySong(); void doPopulateByDate(); void doPopulateByFolder(); + void doPopulateByWebradio(); void doModelChanged(); void viewDoubleClicked(const QModelIndex &idx); void rightCurrentChanged(const QModelIndex &cur, const QModelIndex &prev); @@ -101,6 +102,7 @@ class PlayerWidget : public QWidget { void populateBySong(QStandardItem *parent, const QVariant &filter, int type); void populateByDate(QStandardItem *parent); void populateByGenre(QStandardItem *parent, const QString &filter); + void populateByWebradio(QStandardItem *parent); void recurse(const QModelIndex &parent); void addSong(const QModelIndex &idx); void play(const QString &fullPath); @@ -116,6 +118,7 @@ class PlayerWidget : public QWidget { QStandardItemModel *mSearchModel; QStandardItemModel *mCurrentModel; QStandardItemModel *mFolderModel; + QStandardItemModel *mWebRadioModel; QLabel *mNowPlayingL; QSlider *mSongSlider; QLabel *mPos; -- cgit v1.2.3-70-g09d2