forked from openkylin/kylin-music
255 lines
8.6 KiB
C++
255 lines
8.6 KiB
C++
/*
|
|
* Copyright (C) 2020 ~ 2021 Uniontech Software Technology Co., Ltd.
|
|
*
|
|
* Author: ZouYa <zouya@uniontech.com>
|
|
*
|
|
* Maintainer: WangYu <wangyu@uniontech.com>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "musicsearchlistview.h"
|
|
#include "musicsearchlistmodel.h"
|
|
#include "musicsearchlistdelegate.h"
|
|
|
|
#include <QTouchEvent>
|
|
#include <QDebug>
|
|
#include <QFileInfo>
|
|
|
|
#define NUM 10000
|
|
//DWIDGET_USE_NAMESPACE
|
|
|
|
MusicSearchListview::MusicSearchListview(QWidget *parent)
|
|
: QListView(parent)
|
|
{
|
|
setAttribute(Qt::WA_AcceptTouchEvents);
|
|
setFrameShape(QListView::NoFrame);
|
|
m_model = new MusicSearchListModel(3, 3, this);
|
|
setModel(m_model);
|
|
m_delegate = new MusicSearchListDelegate(this);
|
|
setItemDelegate(m_delegate);
|
|
setUniformItemSizes(true);
|
|
|
|
this->setFocusPolicy(Qt::NoFocus);
|
|
setViewMode(QListView::ListMode);
|
|
setResizeMode(QListView::Adjust);
|
|
setMovement(QListView::Static);
|
|
setLayoutMode(QListView::Batched);
|
|
setBatchSize(2000);
|
|
|
|
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
|
|
connect(m_delegate, &MusicSearchListDelegate::SearchClear, this, &MusicSearchListview::SearchClear);
|
|
connect(this, SIGNAL(clicked(const QModelIndex &)), this, SLOT(slotOnClicked(const QModelIndex &)));
|
|
}
|
|
|
|
|
|
MusicSearchListview::~MusicSearchListview()
|
|
{
|
|
|
|
}
|
|
|
|
SearchType MusicSearchListview::getSearchType() const
|
|
{
|
|
return m_searchType;
|
|
}
|
|
|
|
void MusicSearchListview::setSearchResultWidget(SearchResult *result)
|
|
{
|
|
m_SearchResultWidget = result;
|
|
}
|
|
|
|
void MusicSearchListview::setSearchType(SearchType type)
|
|
{
|
|
m_searchType = type;
|
|
}
|
|
|
|
void MusicSearchListview::setSearchText(QString text)
|
|
{
|
|
m_CurrentIndex = -1;
|
|
m_searchText = text;
|
|
Q_EMIT signalSearchTexts(m_searchText);
|
|
|
|
QList<musicDataStruct> musicDataInfos;
|
|
QList<musicDataStruct> singerInfos;
|
|
QList<musicDataStruct> albumInfos;
|
|
g_db->getCurtEstimatedListByKeyword(text,NUM,musicDataInfos,singerInfos,albumInfos);
|
|
if (m_searchType == SearchType::TitleType) {
|
|
m_MusicDataStruct.clear();
|
|
for (int i = 0; i < musicDataInfos.count(); i++) {
|
|
musicDataStruct titleList = musicDataInfos.at(i);
|
|
m_MusicDataStruct.append(titleList);
|
|
}
|
|
|
|
m_model->clear();
|
|
for (musicDataStruct musicData : m_MusicDataStruct) {
|
|
QStandardItem *item = new QStandardItem;
|
|
QString Str = musicData.title + "-" + musicData.singer;
|
|
item->setData(Str,Qt::ToolTipRole);
|
|
m_model->appendRow(item);
|
|
|
|
auto row = m_model->rowCount() - 1;
|
|
QModelIndex index = m_model->index(row, 0, QModelIndex());
|
|
|
|
QVariant mediaMeta;
|
|
mediaMeta.setValue(musicData);
|
|
m_model->setData(index, mediaMeta, Qt::UserRole + SearchType::TitleType);
|
|
|
|
// QFont sizeFont;
|
|
// sizeFont.setPixelSize(12);
|
|
// QFontMetrics fm(sizeFont);
|
|
// QString Str = musicData.title + "-" + musicData.singer;
|
|
// QString displayStr = fm.elidedText(Str,Qt::ElideRight,136);
|
|
// item->setData(displayStr, Qt::DisplayRole);
|
|
// item->setData(Str,Qt::ToolTipRole);
|
|
// m_model->appendRow(item);
|
|
}
|
|
} else if (m_searchType == SearchType::SingerType) {
|
|
m_SingerInfos.clear();
|
|
for (int i = 0; i < singerInfos.count(); i++) {
|
|
musicDataStruct singerList = singerInfos.at(i);
|
|
m_SingerInfos.append(singerList);
|
|
}
|
|
|
|
m_model->clear();
|
|
for (musicDataStruct singerData : m_SingerInfos) {
|
|
QStandardItem *item = new QStandardItem;
|
|
QString Str = singerData.title + "-" + singerData.singer;
|
|
item->setData(Str,Qt::ToolTipRole);
|
|
m_model->appendRow(item);
|
|
|
|
auto row = m_model->rowCount() - 1;
|
|
QModelIndex index = m_model->index(row, 0, QModelIndex());
|
|
|
|
QVariant mediaMeta;
|
|
mediaMeta.setValue(singerData);
|
|
m_model->setData(index, mediaMeta, Qt::UserRole + SearchType::SingerType);
|
|
// QFont sizeFont;
|
|
// sizeFont.setPixelSize(12);
|
|
// QFontMetrics fm(sizeFont);
|
|
// QString Str = singerData.title + "-" + singerData.singer;
|
|
// QString displayStr = fm.elidedText(Str,Qt::ElideRight,136);
|
|
// item->setData(displayStr, Qt::DisplayRole);
|
|
// item->setData(Str,Qt::ToolTipRole);
|
|
// m_model->appendRow(item);
|
|
}
|
|
} else if (m_searchType == SearchType::AlbumType) {
|
|
m_AlbumInfos.clear();
|
|
for (int i = 0; i < albumInfos.count(); i++) {
|
|
musicDataStruct albumList = albumInfos.at(i);
|
|
m_AlbumInfos.append(albumList);
|
|
}
|
|
|
|
m_model->clear();
|
|
for (musicDataStruct albumData : m_AlbumInfos) {
|
|
QStandardItem *item = new QStandardItem;
|
|
QString Str = albumData.album + "-" + albumData.singer;
|
|
item->setData(Str,Qt::ToolTipRole);
|
|
m_model->appendRow(item);
|
|
|
|
auto row = m_model->rowCount() - 1;
|
|
QModelIndex index = m_model->index(row, 0, QModelIndex());
|
|
|
|
QVariant mediaMeta;
|
|
mediaMeta.setValue(albumData);
|
|
m_model->setData(index, mediaMeta, Qt::UserRole + SearchType::AlbumType);
|
|
// QFont sizeFont;
|
|
// sizeFont.setPixelSize(12);
|
|
// QFontMetrics fm(sizeFont);
|
|
// QString Str = albumData.album + "-" + albumData.singer;
|
|
// QString displayStr = fm.elidedText(Str,Qt::ElideRight,136);
|
|
// item->setData(displayStr, Qt::DisplayRole);
|
|
// item->setData(Str,Qt::ToolTipRole);
|
|
// m_model->appendRow(item);
|
|
}
|
|
}
|
|
}
|
|
|
|
int MusicSearchListview::rowCount()
|
|
{
|
|
return m_model->rowCount();
|
|
}
|
|
|
|
int MusicSearchListview::getIndexInt()const
|
|
{
|
|
return m_CurrentIndex;
|
|
}
|
|
|
|
QString MusicSearchListview::getSearchText()const
|
|
{
|
|
return m_searchText;
|
|
}
|
|
|
|
void MusicSearchListview::setCurrentIndexInt(int row)
|
|
{
|
|
m_CurrentIndex = row;
|
|
}
|
|
|
|
void MusicSearchListview::switchToSearchResultTab(const QModelIndex &index)
|
|
{
|
|
// if (m_SearchType == SearchType::SearchMusic) {
|
|
// MediaMeta mediaMeta = index.data(Qt::UserRole + SearchType::SearchMusic).value<MediaMeta>();
|
|
// Q_EMIT CommonService::getInstance()->signalSwitchToView(SearchMusicResultType, mediaMeta.title);
|
|
// if (m_SearchResultWidget) {
|
|
// m_SearchResultWidget->setLineEditSearchString(mediaMeta.title);
|
|
// }
|
|
// } else if (m_SearchType == SearchType::SearchSinger) {
|
|
// SingerInfo singerInfo = index.data(Qt::UserRole + SearchType::SearchSinger).value<SingerInfo>();
|
|
// Q_EMIT CommonService::getInstance()->signalSwitchToView(SearchSingerResultType, singerInfo.singerName);
|
|
// if (m_SearchResultWidget) {
|
|
// m_SearchResultWidget->setLineEditSearchString(singerInfo.singerName);
|
|
// }
|
|
// } else if (m_SearchType == SearchType::SearchAlbum) {
|
|
// AlbumInfo albumInfo = index.data(Qt::UserRole + SearchType::SearchAlbum).value<AlbumInfo>();
|
|
// Q_EMIT CommonService::getInstance()->signalSwitchToView(SearchAlbumResultType, albumInfo.albumName);
|
|
// if (m_SearchResultWidget) {
|
|
// m_SearchResultWidget->setLineEditSearchString(albumInfo.albumName);
|
|
// }
|
|
// }
|
|
}
|
|
|
|
void MusicSearchListview::SearchClear()
|
|
{
|
|
Q_EMIT this->sigSearchClear();
|
|
}
|
|
|
|
void MusicSearchListview::slotOnClicked(const QModelIndex &index)
|
|
{
|
|
switchToSearchResultTab(index);
|
|
}
|
|
|
|
void MusicSearchListview::onReturnPressed()
|
|
{
|
|
qDebug() << "------MusicSearchListview::onReturnPressed";
|
|
slotOnClicked(m_model->index(m_CurrentIndex, 0));
|
|
}
|
|
|
|
void MusicSearchListview::mouseMoveEvent(QMouseEvent *event)
|
|
{
|
|
Q_UNUSED(event)
|
|
qDebug() << "MusicSearchListview::mouseMoveEvent";
|
|
}
|
|
|
|
bool MusicSearchListview::event(QEvent *event)
|
|
{
|
|
if (event->type() == QEvent::TouchBegin) {
|
|
QTouchEvent *touch = static_cast<QTouchEvent *>(event);
|
|
if (touch && touch->touchPoints().size() > 0) {
|
|
QModelIndex index = this->indexAt(touch->touchPoints().at(0).pos().toPoint());
|
|
switchToSearchResultTab(index);
|
|
}
|
|
}
|
|
return QListView::event(event);
|
|
}
|