lbajardsilogic@7: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@7: lbajardsilogic@7: /* Sound Access lbajardsilogic@7: EASAIER client application. lbajardsilogic@7: Silogic 2007. Laure Bajard. lbajardsilogic@7: lbajardsilogic@7: This program is free software; you can redistribute it and/or lbajardsilogic@7: modify it under the terms of the GNU General Public License as lbajardsilogic@7: published by the Free Software Foundation; either version 2 of the lbajardsilogic@7: License, or (at your option) any later version. See the file lbajardsilogic@7: COPYING included with this distribution for more information. lbajardsilogic@7: */ lbajardsilogic@7: lbajardsilogic@7: #include "QueryResultsWidget.h" benoitrigolleau@144: #include "ConfidenceListWidget.h" lbajardsilogic@7: lbajardsilogic@7: #include benoitrigolleau@88: #include lbajardsilogic@7: lbajardsilogic@7: #include lbajardsilogic@7: lbajardsilogic@7: #include "sv/main/MainWindow.h" benoitrigolleau@144: benoitrigolleau@144: int rank = 1; lbajardsilogic@7: lbajardsilogic@7: QueryResultsWidget::QueryResultsWidget() : QWidget(), benoitrigolleau@144: m_currentRow(0) lbajardsilogic@7: { lbajardsilogic@7: m_resultsLayout = new QGridLayout; benoitrigolleau@144: m_curResult = new std::vector; lbajardsilogic@7: lbajardsilogic@7: QWidget *resultsWidget = new QWidget; lbajardsilogic@7: resultsWidget->setLayout(m_resultsLayout); lbajardsilogic@7: benoitrigolleau@126: m_scrollArea = new QScrollArea; benoitrigolleau@126: m_scrollArea->setWidget(resultsWidget); benoitrigolleau@126: m_scrollArea->setWidgetResizable(true); benoitrigolleau@144: m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); lbajardsilogic@7: lbajardsilogic@7: QVBoxLayout *mainLayout = new QVBoxLayout; benoitrigolleau@126: mainLayout->addWidget(m_scrollArea); lbajardsilogic@7: lbajardsilogic@7: setLayout(mainLayout); lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: QueryResultsWidget::~QueryResultsWidget() lbajardsilogic@7: {} lbajardsilogic@7: benoitrigolleau@144: void QueryResultsWidget::addTop() benoitrigolleau@144: { benoitrigolleau@144: QLabel *rankLabel = new QLabel("#"); benoitrigolleau@144: rankLabel->setAlignment(Qt::AlignHCenter); benoitrigolleau@144: m_resultsLayout->addWidget(rankLabel,0,0,1,1); benoitrigolleau@144: m_resultsLayout->setColumnMinimumWidth(0,15); benoitrigolleau@144: m_resultsLayout->setColumnMinimumWidth(1,5); benoitrigolleau@144: benoitrigolleau@144: QLabel *typeLabel = new QLabel(tr("Type")); benoitrigolleau@144: typeLabel->setAlignment(Qt::AlignHCenter); benoitrigolleau@144: m_resultsLayout->addWidget(typeLabel,0,2,1,1); benoitrigolleau@144: m_resultsLayout->setColumnMinimumWidth(3,5); benoitrigolleau@144: m_resultsLayout->setColumnStretch(4,1); benoitrigolleau@144: m_resultsLayout->setColumnMinimumWidth(5,5); benoitrigolleau@144: benoitrigolleau@144: QLabel *confidenceLabel = new QLabel(tr("Confidence")); benoitrigolleau@144: confidenceLabel->setAlignment(Qt::AlignHCenter); benoitrigolleau@144: m_resultsLayout->addWidget(confidenceLabel,0,6,1,1); benoitrigolleau@144: m_resultsLayout->setColumnMinimumWidth(7,5); benoitrigolleau@144: benoitrigolleau@144: QLabel *metadataLabel = new QLabel(tr("Meta-Data")); benoitrigolleau@144: confidenceLabel->setAlignment(Qt::AlignHCenter); benoitrigolleau@144: m_resultsLayout->addWidget(metadataLabel,0,8,1,1); benoitrigolleau@144: m_resultsLayout->setColumnMinimumWidth(9,5); benoitrigolleau@144: m_resultsLayout->setColumnMinimumWidth(11,5); benoitrigolleau@145: benoitrigolleau@144: m_currentRow++; benoitrigolleau@144: } benoitrigolleau@144: benoitrigolleau@144: void QueryResultsWidget::addFoot() benoitrigolleau@144: { benoitrigolleau@144: m_resultsLayout->setRowStretch(m_currentRow,1); benoitrigolleau@144: } benoitrigolleau@144: lbajardsilogic@7: void QueryResultsWidget::reset() lbajardsilogic@7: { lbajardsilogic@7: QLayoutItem *child; lbajardsilogic@7: while ((child = m_resultsLayout->takeAt(0)) != 0) { lbajardsilogic@7: delete child->widget(); lbajardsilogic@7: } benoitrigolleau@144: m_allresults.clear(); benoitrigolleau@144: lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: void QueryResultsWidget::newResult() lbajardsilogic@7: { benoitrigolleau@144: m_curResult->clear(); lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: void QueryResultsWidget::addInfo(const QString& name, const QString& value) lbajardsilogic@7: { lbajardsilogic@7: Info info; lbajardsilogic@7: info.name = name; lbajardsilogic@7: info.value = value; lbajardsilogic@7: benoitrigolleau@144: m_curResult->push_back(info); benoitrigolleau@144: } benoitrigolleau@144: benoitrigolleau@144: void QueryResultsWidget::saveCurResult() benoitrigolleau@144: { benoitrigolleau@280: m_allresults.push_back(m_curResult); benoitrigolleau@280: m_curResult = new std::vector; benoitrigolleau@276: lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: void QueryResultsWidget::displayResult() lbajardsilogic@7: { benoitrigolleau@280: m_currentRow = 0; benoitrigolleau@280: rank = 1; benoitrigolleau@280: addTop(); benoitrigolleau@280: int type = 0; benoitrigolleau@280: benoitrigolleau@280: std::vector*>::iterator iterOnResults; benoitrigolleau@280: int size = m_allresults.size(); benoitrigolleau@280: benoitrigolleau@280: for (iterOnResults = m_allresults.begin(); iterOnResults != m_allresults.end();iterOnResults++) benoitrigolleau@280: { benoitrigolleau@280: std::vector* onInfo = *iterOnResults; benoitrigolleau@280: std::vector::iterator iterOnInfo; benoitrigolleau@280: QString author = ""; benoitrigolleau@280: QString title = ""; benoitrigolleau@280: QString uri = ""; benoitrigolleau@280: QString confidence = "1"; benoitrigolleau@280: benoitrigolleau@280: for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++) benoitrigolleau@280: { benoitrigolleau@280: if ((*iterOnInfo).name == "signal") benoitrigolleau@280: { benoitrigolleau@280: uri = (*iterOnInfo).value; benoitrigolleau@280: //uri = uri.right(uri.length() - uri.lastIndexOf("#") - 1); benoitrigolleau@280: } benoitrigolleau@280: } benoitrigolleau@280: benoitrigolleau@280: for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++) benoitrigolleau@280: { benoitrigolleau@280: if ((*iterOnInfo).name != "signal") benoitrigolleau@280: { benoitrigolleau@280: //if((*iterOnInfo).name == "composer"){ benoitrigolleau@280: if((*iterOnInfo).name == "author"){ benoitrigolleau@280: author = (*iterOnInfo).value; benoitrigolleau@280: } benoitrigolleau@280: //if ((*iterOnInfo).name == "performance_title") benoitrigolleau@280: if ((*iterOnInfo).name == "title") benoitrigolleau@280: { benoitrigolleau@280: title += (*iterOnInfo).value; benoitrigolleau@280: } benoitrigolleau@280: if ((*iterOnInfo).name == "confidence") benoitrigolleau@280: { benoitrigolleau@280: confidence = (*iterOnInfo).value; benoitrigolleau@280: } benoitrigolleau@280: } benoitrigolleau@280: } benoitrigolleau@280: if (author == "Django") benoitrigolleau@280: type = 2; benoitrigolleau@280: addResultWidget(author,title,uri,type,confidence); benoitrigolleau@280: m_currentRow=m_currentRow+3; benoitrigolleau@280: rank++; benoitrigolleau@280: benoitrigolleau@280: } benoitrigolleau@280: benoitrigolleau@144: addFoot(); benoitrigolleau@144: } benoitrigolleau@144: lbajardsilogic@272: void QueryResultsWidget::addResultWidget(QString author,QString title, QString uri, int type, QString confidence) benoitrigolleau@144: { benoitrigolleau@144: // add rank label benoitrigolleau@144: QLabel *labelRank = new QLabel(QString().setNum(rank)); benoitrigolleau@144: labelRank->setMaximumWidth(20); benoitrigolleau@144: labelRank->setMinimumWidth(20); benoitrigolleau@144: m_resultsLayout->addWidget(labelRank,m_currentRow,0,1,1); benoitrigolleau@144: benoitrigolleau@144: //add the type benoitrigolleau@144: QLabel *labelIcon = new QLabel(); benoitrigolleau@144: labelIcon->setMaximumWidth(25); benoitrigolleau@280: labelIcon->setMinimumWidth(25); benoitrigolleau@144: QString pixmapName; benoitrigolleau@144: switch(type){ benoitrigolleau@144: case 0: benoitrigolleau@144: pixmapName.append(":icons/musicIcon.png"); benoitrigolleau@144: break; benoitrigolleau@144: case 1: benoitrigolleau@144: pixmapName.append(":icons/speechIcon.png"); benoitrigolleau@144: break; lbajardsilogic@160: case 2: lbajardsilogic@160: pixmapName.append(":icons/videoIcon.png"); lbajardsilogic@160: break; benoitrigolleau@144: default: benoitrigolleau@144: break; lbajardsilogic@7: } benoitrigolleau@144: labelIcon->setPixmap(QPixmap(pixmapName)); benoitrigolleau@144: m_resultsLayout->addWidget(labelIcon,m_currentRow,2,1,1); lbajardsilogic@7: benoitrigolleau@144: //add the author and title label benoitrigolleau@144: QLabel *labelTitleArtist = new QLabel(); benoitrigolleau@149: QString auxAuthor = author; benoitrigolleau@149: //auxAuthor.replace("Mac","Mac"); benoitrigolleau@144: QString label; benoitrigolleau@149: label = auxAuthor+" - \""; benoitrigolleau@144: label += ""; lbajardsilogic@268: if (title != "") lbajardsilogic@268: label += title; lbajardsilogic@268: else lbajardsilogic@268: label += "unknown"; benoitrigolleau@148: label += "\""; benoitrigolleau@144: labelTitleArtist->setText(label); benoitrigolleau@144: labelTitleArtist->setWordWrap(true); lbajardsilogic@7: benoitrigolleau@144: labelTitleArtist->setToolTip(title); benoitrigolleau@144: connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString))); benoitrigolleau@216: connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(lockWindow())); benoitrigolleau@144: m_resultsLayout->addWidget(labelTitleArtist,m_currentRow,4,1,1); benoitrigolleau@126: benoitrigolleau@144: //add the confidence benoitrigolleau@144: ConfidenceListWidget *confidenceListWidget= new ConfidenceListWidget(); benoitrigolleau@144: confidenceListWidget->setMaximumWidth(180); lbajardsilogic@272: float fconfidence = confidence.toFloat(); lbajardsilogic@272: if (fconfidence < 0) lbajardsilogic@272: fconfidence = 0; lbajardsilogic@272: else if (fconfidence > 1) lbajardsilogic@272: fconfidence = 100; lbajardsilogic@272: else lbajardsilogic@272: fconfidence = fconfidence * 100; lbajardsilogic@272: confidenceListWidget->addConfidence(fconfidence,"confidence"); benoitrigolleau@144: m_resultsLayout->addWidget(confidenceListWidget,m_currentRow,6,1,1); benoitrigolleau@144: benoitrigolleau@144: //TODO add metadatas benoitrigolleau@144: benoitrigolleau@144: //add preview button benoitrigolleau@144: QPushButton *buttonPrev = new QPushButton(); benoitrigolleau@151: // TODO remove this line benoitrigolleau@149: buttonPrev->setEnabled(false); benoitrigolleau@144: buttonPrev->setMaximumSize(68,34); benoitrigolleau@144: buttonPrev->setMinimumSize(68,34); benoitrigolleau@144: QSize prevIconSize; benoitrigolleau@144: prevIconSize.setHeight(34); benoitrigolleau@144: prevIconSize.setWidth(68); benoitrigolleau@144: buttonPrev->setIconSize(prevIconSize); benoitrigolleau@144: buttonPrev->setIcon(QIcon(":icons/prev.png")); benoitrigolleau@144: buttonPrev->setFlat(true); benoitrigolleau@144: m_resultsLayout->addWidget(buttonPrev,m_currentRow,10,1,1); benoitrigolleau@144: benoitrigolleau@144: benoitrigolleau@144: // search similar boutton benoitrigolleau@144: QPushButton *buttonSimilar = new QPushButton(); benoitrigolleau@151: // TODO remove this line benoitrigolleau@149: buttonSimilar->setEnabled(false); benoitrigolleau@144: buttonSimilar->setMaximumSize(64,34); benoitrigolleau@144: buttonSimilar->setMinimumSize(64,34); benoitrigolleau@144: QSize similarIconSize; benoitrigolleau@144: similarIconSize.setHeight(34); benoitrigolleau@144: similarIconSize.setWidth(64); benoitrigolleau@144: buttonSimilar->setIconSize(similarIconSize); benoitrigolleau@144: buttonSimilar->setIcon(QIcon(":icons/similar.png")); benoitrigolleau@144: buttonSimilar->setFlat(true); benoitrigolleau@144: m_resultsLayout->addWidget(buttonSimilar,m_currentRow,12,1,1); benoitrigolleau@144: benoitrigolleau@144: //TODO add here the others informations benoitrigolleau@144: //m_resultsLayout->addWidget(X,m_currentRow+1,4,1,9); benoitrigolleau@144: benoitrigolleau@144: // add the separator benoitrigolleau@144: QFrame *hLine = new QFrame(); benoitrigolleau@144: hLine->setFrameStyle(QFrame::HLine | QFrame::Raised); benoitrigolleau@144: hLine->setMaximumHeight(1); benoitrigolleau@144: hLine->setMinimumHeight(1); benoitrigolleau@144: m_resultsLayout->setRowMinimumHeight(m_currentRow+2,1); benoitrigolleau@144: m_resultsLayout->addWidget(hLine,m_currentRow+2,1,1,12); lbajardsilogic@7: } benoitrigolleau@144: benoitrigolleau@144: benoitrigolleau@144: