switched from QTreeWidget to QTreeView

This commit is contained in:
2017-02-22 18:32:56 +01:00
parent 8b9ba1856b
commit 3b5542d6fa
5 changed files with 98 additions and 83 deletions
+86 -70
View File
@@ -46,12 +46,15 @@ cMainWindow::cMainWindow(QWidget *parent) :
ui->setupUi(this);
m_lpSeriesListModel = new QStandardItemModel(0, 3);
initDB();
ui->m_lpSeriesList->setModel(m_lpSeriesListModel);
ui->m_lpSeriesList->setItemDelegate(new cSeasonDelegate(ui->m_lpSeriesList));
ui->m_lpSeriesList->setHeaderLabels(QStringList() << "Nr" << "Serie" << "Year");
ui->m_lpSeriesList->setColumnCount(3);
QStringList header;
header << "Nr" << "Serie" << "Year";
m_lpSeriesListModel->setHorizontalHeaderLabels(header);
loadDB();
displaySeries();
@@ -228,17 +231,20 @@ void cMainWindow::loadDB()
void cMainWindow::displaySeries()
{
ui->m_lpSeriesList->clear();
m_lpSeriesListModel->clear();
qint16 iMin = m_serieList.minSeason();
qint16 iMax = m_serieList.maxSeason();
ui->m_lpSeriesList->setColumnCount(iMax-iMin+2);
m_lpSeriesListModel->setColumnCount(iMax-iMin+2);
QTreeWidgetItem* lpHeader = ui->m_lpSeriesList->headerItem();
for(int z = iMin, x = 1;z < iMax;z++, x++)
lpHeader->setText(x+2, QString("Season %1").arg(z));
lpHeader->setData(0, Qt::UserRole, QVariant(iMin));
QStringList header;
header << "Nr" << "Serie" << "Year";
for(int z = 0;z <= iMax;z++)
header.append(QString("Season %1").arg(z));
m_lpSeriesListModel->setHorizontalHeaderLabels(header);
m_lpSeriesListModel->setHeaderData(0, Qt::Horizontal, QVariant(iMin), Qt::UserRole);
QFont font = ui->m_lpSeriesList->font();
QFont fontI = ui->m_lpSeriesList->font();
@@ -246,21 +252,25 @@ void cMainWindow::displaySeries()
font.setBold(true);
fontI.setItalic(true);
QIcon icon(":/128279.png");
QTreeWidgetItem* lpSelected = 0;
QIcon icon(":/128279.png");
QModelIndex selected;
for(int serie = 0;serie < m_serieList.count();serie++)
{
QList<QStandardItem*> lpItems;
for(int z = 0;z < header.count();z++)
lpItems.append(new QStandardItem);
cSerie* lpSerie = m_serieList.at(serie);
QTreeWidgetItem* lp0 = new QTreeWidgetItem(ui->m_lpSeriesList);
lp0->setText(0, QString("%1").arg(serie+1));
lp0->setTextAlignment(0, Qt::AlignRight);
lp0->setData(0, Qt::UserRole, QVariant::fromValue(lpSerie));
lpItems.at(0)->setText(QString("%1").arg(serie+1));
lpItems.at(0)->setTextAlignment(Qt::AlignRight);
lpItems.at(0)->setData(QVariant::fromValue(lpSerie), Qt::UserRole);
lp0->setText(1, lpSerie->seriesName());
lp0->setText(2, lpSerie->firstAired().toString("yyyy"));
lp0->setTextAlignment(2, Qt::AlignRight);
lpItems.at(1)->setText(lpSerie->seriesName());
lpItems.at(2)->setText(lpSerie->firstAired().toString("yyyy"));
lpItems.at(2)->setTextAlignment(Qt::AlignRight);
bool bHasInit = false;
bool bHasProg = false;
@@ -276,7 +286,7 @@ void cMainWindow::displaySeries()
QString szDone = "";
cSeason* lpSeason = seasonList.at(season);
lp0->setData(lpSeason->number()+3-iMin, Qt::UserRole, QVariant::fromValue(lpSeason));
lpItems.at(lpSeason->number()+3-iMin)->setData(QVariant::fromValue(lpSeason), Qt::UserRole);
for(int y = 0;y < lpSeason->episodeList().count();y++)
{
@@ -341,73 +351,73 @@ void cMainWindow::displaySeries()
szTooltip.append("done: " + szDone);
if(szTooltip.isEmpty())
lp0->setToolTip(lpSeason->number()+3-iMin, szTooltip);
lpItems.at(lpSeason->number()+3-iMin)->setToolTip(szTooltip);
else
lp0->setToolTip(lpSeason->number()+3-iMin, szTooltip);
lpItems.at(lpSeason->number()+3-iMin)->setToolTip(szTooltip);
}
if(lpSerie->status().compare("Ended", Qt::CaseInsensitive))
{
lp0->setFont(0, font);
lp0->setFont(1, font);
lp0->setFont(2, font);
lpItems.at(0)->setFont(font);
lpItems.at(1)->setFont(font);
lpItems.at(2)->setFont(font);
}
if(lpSerie->cliffhanger())
{
lp0->setFont(0, fontI);
lp0->setFont(1, fontI);
lp0->setFont(2, fontI);
lp0->setForeground(0, QBrush(Qt::red));
lp0->setForeground(1, QBrush(Qt::red));
lp0->setForeground(2, QBrush(Qt::red));
lpItems.at(0)->setFont(fontI);
lpItems.at(1)->setFont(fontI);
lpItems.at(2)->setFont(fontI);
lpItems.at(0)->setForeground(QBrush(Qt::red));
lpItems.at(1)->setForeground(QBrush(Qt::red));
lpItems.at(2)->setForeground(QBrush(Qt::red));
}
if(bHasProg)
{
lp0->setForeground(0, QBrush(Qt::white));
lp0->setForeground(1, QBrush(Qt::white));
lp0->setForeground(2, QBrush(Qt::white));
lp0->setBackground(0, QBrush(Qt::blue));
lp0->setBackground(1, QBrush(Qt::blue));
lp0->setBackground(2, QBrush(Qt::blue));
lpItems.at(0)->setForeground(QBrush(Qt::white));
lpItems.at(1)->setForeground(QBrush(Qt::white));
lpItems.at(2)->setForeground(QBrush(Qt::white));
lpItems.at(0)->setBackground(QBrush(Qt::blue));
lpItems.at(1)->setBackground(QBrush(Qt::blue));
lpItems.at(2)->setBackground(QBrush(Qt::blue));
}
else if(bHasInit)
{
lp0->setBackground(0, QBrush(Qt::lightGray));
lp0->setBackground(1, QBrush(Qt::lightGray));
lp0->setBackground(2, QBrush(Qt::lightGray));
lpItems.at(0)->setBackground(QBrush(Qt::lightGray));
lpItems.at(1)->setBackground(QBrush(Qt::lightGray));
lpItems.at(2)->setBackground(QBrush(Qt::lightGray));
}
else
{
lp0->setBackground(0, QBrush(Qt::green));
lp0->setBackground(1, QBrush(Qt::green));
lp0->setBackground(2, QBrush(Qt::green));
lpItems.at(0)->setBackground(QBrush(Qt::green));
lpItems.at(1)->setBackground(QBrush(Qt::green));
lpItems.at(2)->setBackground(QBrush(Qt::green));
}
if(lpSerie->download().length())
lp0->setIcon(0, icon);
ui->m_lpSeriesList->insertTopLevelItem(0, lp0);
lpItems.at(0)->setIcon(icon);
m_lpSeriesListModel->appendRow(lpItems);
if(!m_szOldSelected.isEmpty())
{
if(!m_szOldSelected.compare(lpSerie->seriesName()))
{
lp0->setSelected(true);
lpSelected = lp0;
selected = m_lpSeriesListModel->indexFromItem(lpItems.at(0));
ui->m_lpSeriesList->selectionModel()->select(selected, QItemSelectionModel::Select | QItemSelectionModel::Rows);
}
}
lp0->setToolTip(0, szOpen);
lp0->setToolTip(1, szOpen);
lp0->setToolTip(2, szOpen);
lpItems.at(0)->setToolTip(szOpen);
lpItems.at(1)->setToolTip(szOpen);
lpItems.at(2)->setToolTip(szOpen);
}
for(int z = 0;z < ui->m_lpSeriesList->columnCount();z++)
for(int z = 0;z < m_lpSeriesListModel->columnCount();z++)
ui->m_lpSeriesList->resizeColumnToContents(z);
if(lpSelected)
ui->m_lpSeriesList->scrollToItem(lpSelected);
if(selected.isValid())
ui->m_lpSeriesList->scrollTo(selected, QAbstractItemView::PositionAtCenter);
m_szOldSelected = "";
}
@@ -417,17 +427,20 @@ void cMainWindow::on_m_lpSeriesList_customContextMenuRequested(const QPoint &pos
QMenu* lpMenu = new QMenu(this);
lpMenu->addAction("add", this, SLOT(onActionAdd()));
if(ui->m_lpSeriesList->selectedItems().count() == 1)
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count() == 1)
{
cSerie* lpSerie = ui->m_lpSeriesList->selectedItems().at(0)->data(0, Qt::UserRole).value<cSerie*>();
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
if(lpSerie)
{
lpMenu->addAction("update", this, SLOT(onActionUpdate()));
lpMenu->addAction("delete", this, SLOT(onActionDelete()));
lpMenu->addAction("edit", this, SLOT(onActionEdit()));
lpMenu->addSeparator();
if(!lpSerie->imdbID().isEmpty())
lpMenu->addAction("open IMDB", this, SLOT(onActionGotoIMDB()));
if(!lpSerie->download().isEmpty())
{
lpMenu->addAction("open download link", this, SLOT(onActionGotoDownload()));
@@ -437,7 +450,7 @@ void cMainWindow::on_m_lpSeriesList_customContextMenuRequested(const QPoint &pos
lpMenu->addAction("load images", this, SLOT(onActionLoadPictures()));
}
}
else if(ui->m_lpSeriesList->selectedItems().count())
else if(ui->m_lpSeriesList->selectionModel()->selectedRows().count())
{
lpMenu->addAction("update", this, SLOT(onActionUpdate()));
lpMenu->addAction("delete", this, SLOT(onActionDelete()));
@@ -608,16 +621,19 @@ void cMainWindow::onActionAdd()
void cMainWindow::onActionUpdate()
{
if(ui->m_lpSeriesList->selectedItems().count())
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count())
{
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count() == 1)
m_szOldSelected = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedIndexes().at(1))->text();
m_lpMessageDialog = new cMessageDialog(this);
m_lpMessageDialog->setWindowTitle("Update");
m_lpMessageDialog->setMessage("Updating");
m_lpMessageDialog->setProgress(0, ui->m_lpSeriesList->selectedItems().count());
m_lpMessageDialog->setProgress(0, ui->m_lpSeriesList->selectionModel()->selectedRows().count());
m_lpMessageDialog->show();
m_lpUpdateThread = new cUpdateThread;
m_lpUpdateThread->setData(m_lpMessageDialog, ui->m_lpSeriesList->selectedItems(), m_db);
m_lpUpdateThread->setData(m_lpMessageDialog, ui->m_lpSeriesList->selectionModel()->selectedRows(), m_db);
connect(m_lpUpdateThread, SIGNAL(finished()), this, SLOT(updateDone()));
connect(m_lpUpdateThread, SIGNAL(updateMessage(QString,qint32)), this, SLOT(updateMessage(QString,qint32)));
@@ -657,7 +673,7 @@ void cMainWindow::onActionDelete()
if(QMessageBox::question(this, "Delete Serie", "Are you sure?") == QMessageBox::No)
return;
cSerie* lpSerie = ui->m_lpSeriesList->selectedItems().at(0)->data(0, Qt::UserRole).value<cSerie*>();
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
if(!lpSerie)
return;
@@ -676,7 +692,7 @@ void cMainWindow::onActionDelete()
void cMainWindow::onActionEdit()
{
cSerie* lpSerie = ui->m_lpSeriesList->selectedItems().at(0)->data(0, Qt::UserRole).value<cSerie*>();
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
if(!lpSerie)
return;
@@ -709,9 +725,9 @@ void cMainWindow::on_m_lpSeriesList_doubleClicked(const QModelIndex &/*index*/)
void cMainWindow::onActionGotoIMDB()
{
if(ui->m_lpSeriesList->selectedItems().count())
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count())
{
cSerie* lpSerie = ui->m_lpSeriesList->selectedItems().at(0)->data(0, Qt::UserRole).value<cSerie*>();
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
if(lpSerie)
{
QString link = QString("http://www.imdb.com/title/%1").arg(lpSerie->imdbID());
@@ -722,9 +738,9 @@ void cMainWindow::onActionGotoIMDB()
void cMainWindow::onActionGotoDownload()
{
if(ui->m_lpSeriesList->selectedItems().count())
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count())
{
cSerie* lpSerie = ui->m_lpSeriesList->selectedItems().at(0)->data(0, Qt::UserRole).value<cSerie*>();
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
if(lpSerie)
{
QString link = lpSerie->download();
@@ -735,9 +751,9 @@ void cMainWindow::onActionGotoDownload()
void cMainWindow::onActionCopyDownload()
{
if(ui->m_lpSeriesList->selectedItems().count())
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count())
{
cSerie* lpSerie = ui->m_lpSeriesList->selectedItems().at(0)->data(0, Qt::UserRole).value<cSerie*>();
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
if(lpSerie)
{
QString link = lpSerie->download();
@@ -751,10 +767,10 @@ void cMainWindow::onActionLoadPictures()
{
QList<cSerie*> serieList;
if(ui->m_lpSeriesList->selectedItems().count())
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count())
{
for(int z = 0;z < ui->m_lpSeriesList->selectedItems().count();z++)
serieList.append(ui->m_lpSeriesList->selectedItems().at(z)->data(0, Qt::UserRole).value<cSerie*>());
for(int z = 0;z < ui->m_lpSeriesList->selectionModel()->selectedRows().count();z++)
serieList.append(m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(z))->data(Qt::UserRole).value<cSerie*>());
}
if(!serieList.count())
@@ -812,9 +828,9 @@ void cMainWindow::on_m_lpSeriesList_pressed(const QModelIndex &index)
switch(QGuiApplication::mouseButtons())
{
case Qt::MiddleButton:
if(ui->m_lpSeriesList->selectedItems().count() == 1)
if(ui->m_lpSeriesList->selectionModel()->selectedRows().count() == 1)
{
cSerie* lpSerie = ui->m_lpSeriesList->selectedItems().at(0)->data(0, Qt::UserRole).value<cSerie*>();
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
if(lpSerie)
{
if(!lpSerie->download().isEmpty())