annotate widgets/QueryResultsWidget.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 8bdfbd9ad418
children
rev   line source
lbajardsilogic@7 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@7 2
lbajardsilogic@7 3 /* Sound Access
lbajardsilogic@7 4 EASAIER client application.
lbajardsilogic@7 5 Silogic 2007. Laure Bajard.
lbajardsilogic@7 6
lbajardsilogic@7 7 This program is free software; you can redistribute it and/or
lbajardsilogic@7 8 modify it under the terms of the GNU General Public License as
lbajardsilogic@7 9 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@7 10 License, or (at your option) any later version. See the file
lbajardsilogic@7 11 COPYING included with this distribution for more information.
lbajardsilogic@7 12 */
lbajardsilogic@7 13
lbajardsilogic@7 14 #include "QueryResultsWidget.h"
benoitrigolleau@144 15 #include "ConfidenceListWidget.h"
lbajardsilogic@7 16
lbajardsilogic@7 17 #include <QLabel>
benoitrigolleau@88 18 #include <QApplication>
lbajardsilogic@7 19
lbajardsilogic@7 20 #include <iostream>
lbajardsilogic@7 21
lbajardsilogic@7 22 #include "sv/main/MainWindow.h"
benoitrigolleau@144 23
benoitrigolleau@144 24 int rank = 1;
lbajardsilogic@7 25
lbajardsilogic@7 26 QueryResultsWidget::QueryResultsWidget() : QWidget(),
benoitrigolleau@144 27 m_currentRow(0)
lbajardsilogic@7 28 {
lbajardsilogic@7 29 m_resultsLayout = new QGridLayout;
benoitrigolleau@144 30 m_curResult = new std::vector<Info>;
lbajardsilogic@7 31
lbajardsilogic@7 32 QWidget *resultsWidget = new QWidget;
lbajardsilogic@7 33 resultsWidget->setLayout(m_resultsLayout);
lbajardsilogic@7 34
benoitrigolleau@126 35 m_scrollArea = new QScrollArea;
benoitrigolleau@126 36 m_scrollArea->setWidget(resultsWidget);
benoitrigolleau@126 37 m_scrollArea->setWidgetResizable(true);
benoitrigolleau@144 38 m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
lbajardsilogic@7 39
lbajardsilogic@7 40 QVBoxLayout *mainLayout = new QVBoxLayout;
benoitrigolleau@126 41 mainLayout->addWidget(m_scrollArea);
lbajardsilogic@7 42
lbajardsilogic@7 43 setLayout(mainLayout);
lbajardsilogic@7 44 }
lbajardsilogic@7 45
lbajardsilogic@7 46 QueryResultsWidget::~QueryResultsWidget()
lbajardsilogic@7 47 {}
lbajardsilogic@7 48
benoitrigolleau@144 49 void QueryResultsWidget::addTop()
benoitrigolleau@144 50 {
benoitrigolleau@144 51 QLabel *rankLabel = new QLabel("#");
benoitrigolleau@144 52 rankLabel->setAlignment(Qt::AlignHCenter);
benoitrigolleau@144 53 m_resultsLayout->addWidget(rankLabel,0,0,1,1);
benoitrigolleau@144 54 m_resultsLayout->setColumnMinimumWidth(0,15);
benoitrigolleau@144 55 m_resultsLayout->setColumnMinimumWidth(1,5);
benoitrigolleau@144 56
benoitrigolleau@144 57 QLabel *typeLabel = new QLabel(tr("Type"));
benoitrigolleau@144 58 typeLabel->setAlignment(Qt::AlignHCenter);
benoitrigolleau@144 59 m_resultsLayout->addWidget(typeLabel,0,2,1,1);
benoitrigolleau@144 60 m_resultsLayout->setColumnMinimumWidth(3,5);
benoitrigolleau@144 61 m_resultsLayout->setColumnStretch(4,1);
benoitrigolleau@144 62 m_resultsLayout->setColumnMinimumWidth(5,5);
benoitrigolleau@144 63
benoitrigolleau@144 64 QLabel *confidenceLabel = new QLabel(tr("Confidence"));
benoitrigolleau@144 65 confidenceLabel->setAlignment(Qt::AlignHCenter);
benoitrigolleau@144 66 m_resultsLayout->addWidget(confidenceLabel,0,6,1,1);
benoitrigolleau@144 67 m_resultsLayout->setColumnMinimumWidth(7,5);
benoitrigolleau@144 68
benoitrigolleau@144 69 QLabel *metadataLabel = new QLabel(tr("Meta-Data"));
benoitrigolleau@144 70 confidenceLabel->setAlignment(Qt::AlignHCenter);
benoitrigolleau@144 71 m_resultsLayout->addWidget(metadataLabel,0,8,1,1);
benoitrigolleau@144 72 m_resultsLayout->setColumnMinimumWidth(9,5);
benoitrigolleau@144 73 m_resultsLayout->setColumnMinimumWidth(11,5);
benoitrigolleau@145 74
benoitrigolleau@144 75 m_currentRow++;
benoitrigolleau@144 76 }
benoitrigolleau@144 77
benoitrigolleau@144 78 void QueryResultsWidget::addFoot()
benoitrigolleau@144 79 {
benoitrigolleau@144 80 m_resultsLayout->setRowStretch(m_currentRow,1);
benoitrigolleau@144 81 }
benoitrigolleau@144 82
lbajardsilogic@7 83 void QueryResultsWidget::reset()
lbajardsilogic@7 84 {
lbajardsilogic@7 85 QLayoutItem *child;
lbajardsilogic@7 86 while ((child = m_resultsLayout->takeAt(0)) != 0) {
lbajardsilogic@7 87 delete child->widget();
lbajardsilogic@7 88 }
benoitrigolleau@144 89 m_allresults.clear();
benoitrigolleau@144 90
lbajardsilogic@7 91 }
lbajardsilogic@7 92
lbajardsilogic@7 93 void QueryResultsWidget::newResult()
lbajardsilogic@7 94 {
benoitrigolleau@144 95 m_curResult->clear();
lbajardsilogic@7 96 }
lbajardsilogic@7 97
lbajardsilogic@7 98 void QueryResultsWidget::addInfo(const QString& name, const QString& value)
lbajardsilogic@7 99 {
lbajardsilogic@7 100 Info info;
lbajardsilogic@7 101 info.name = name;
lbajardsilogic@7 102 info.value = value;
lbajardsilogic@7 103
benoitrigolleau@144 104 m_curResult->push_back(info);
benoitrigolleau@144 105 }
benoitrigolleau@144 106
benoitrigolleau@144 107 void QueryResultsWidget::saveCurResult()
benoitrigolleau@144 108 {
benoitrigolleau@280 109 m_allresults.push_back(m_curResult);
benoitrigolleau@280 110 m_curResult = new std::vector<Info>;
benoitrigolleau@276 111
lbajardsilogic@7 112 }
lbajardsilogic@7 113
lbajardsilogic@7 114 void QueryResultsWidget::displayResult()
lbajardsilogic@7 115 {
benoitrigolleau@280 116 m_currentRow = 0;
benoitrigolleau@280 117 rank = 1;
benoitrigolleau@280 118 addTop();
benoitrigolleau@280 119 int type = 0;
benoitrigolleau@280 120
benoitrigolleau@280 121 std::vector<std::vector<Info>*>::iterator iterOnResults;
benoitrigolleau@280 122 int size = m_allresults.size();
benoitrigolleau@280 123
benoitrigolleau@280 124 for (iterOnResults = m_allresults.begin(); iterOnResults != m_allresults.end();iterOnResults++)
benoitrigolleau@280 125 {
benoitrigolleau@280 126 std::vector<Info>* onInfo = *iterOnResults;
benoitrigolleau@280 127 std::vector<Info>::iterator iterOnInfo;
benoitrigolleau@280 128 QString author = "";
benoitrigolleau@280 129 QString title = "";
benoitrigolleau@280 130 QString uri = "";
benoitrigolleau@280 131 QString confidence = "1";
benoitrigolleau@280 132
benoitrigolleau@280 133 for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
benoitrigolleau@280 134 {
benoitrigolleau@280 135 if ((*iterOnInfo).name == "signal")
benoitrigolleau@280 136 {
benoitrigolleau@280 137 uri = (*iterOnInfo).value;
benoitrigolleau@280 138 //uri = uri.right(uri.length() - uri.lastIndexOf("#") - 1);
benoitrigolleau@280 139 }
benoitrigolleau@280 140 }
benoitrigolleau@280 141
benoitrigolleau@280 142 for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
benoitrigolleau@280 143 {
benoitrigolleau@280 144 if ((*iterOnInfo).name != "signal")
benoitrigolleau@280 145 {
benoitrigolleau@280 146 //if((*iterOnInfo).name == "composer"){
benoitrigolleau@280 147 if((*iterOnInfo).name == "author"){
benoitrigolleau@280 148 author = (*iterOnInfo).value;
benoitrigolleau@280 149 }
benoitrigolleau@280 150 //if ((*iterOnInfo).name == "performance_title")
benoitrigolleau@280 151 if ((*iterOnInfo).name == "title")
benoitrigolleau@280 152 {
benoitrigolleau@280 153 title += (*iterOnInfo).value;
benoitrigolleau@280 154 }
benoitrigolleau@280 155 if ((*iterOnInfo).name == "confidence")
benoitrigolleau@280 156 {
benoitrigolleau@280 157 confidence = (*iterOnInfo).value;
benoitrigolleau@280 158 }
benoitrigolleau@280 159 }
benoitrigolleau@280 160 }
benoitrigolleau@280 161 if (author == "Django")
benoitrigolleau@280 162 type = 2;
benoitrigolleau@280 163 addResultWidget(author,title,uri,type,confidence);
benoitrigolleau@280 164 m_currentRow=m_currentRow+3;
benoitrigolleau@280 165 rank++;
benoitrigolleau@280 166
benoitrigolleau@280 167 }
benoitrigolleau@280 168
benoitrigolleau@144 169 addFoot();
benoitrigolleau@144 170 }
benoitrigolleau@144 171
lbajardsilogic@272 172 void QueryResultsWidget::addResultWidget(QString author,QString title, QString uri, int type, QString confidence)
benoitrigolleau@144 173 {
benoitrigolleau@144 174 // add rank label
benoitrigolleau@144 175 QLabel *labelRank = new QLabel(QString().setNum(rank));
benoitrigolleau@144 176 labelRank->setMaximumWidth(20);
benoitrigolleau@144 177 labelRank->setMinimumWidth(20);
benoitrigolleau@144 178 m_resultsLayout->addWidget(labelRank,m_currentRow,0,1,1);
benoitrigolleau@144 179
benoitrigolleau@144 180 //add the type
benoitrigolleau@144 181 QLabel *labelIcon = new QLabel();
benoitrigolleau@144 182 labelIcon->setMaximumWidth(25);
benoitrigolleau@280 183 labelIcon->setMinimumWidth(25);
benoitrigolleau@144 184 QString pixmapName;
benoitrigolleau@144 185 switch(type){
benoitrigolleau@144 186 case 0:
benoitrigolleau@144 187 pixmapName.append(":icons/musicIcon.png");
benoitrigolleau@144 188 break;
benoitrigolleau@144 189 case 1:
benoitrigolleau@144 190 pixmapName.append(":icons/speechIcon.png");
benoitrigolleau@144 191 break;
lbajardsilogic@160 192 case 2:
lbajardsilogic@160 193 pixmapName.append(":icons/videoIcon.png");
lbajardsilogic@160 194 break;
benoitrigolleau@144 195 default:
benoitrigolleau@144 196 break;
lbajardsilogic@7 197 }
benoitrigolleau@144 198 labelIcon->setPixmap(QPixmap(pixmapName));
benoitrigolleau@144 199 m_resultsLayout->addWidget(labelIcon,m_currentRow,2,1,1);
lbajardsilogic@7 200
benoitrigolleau@144 201 //add the author and title label
benoitrigolleau@144 202 QLabel *labelTitleArtist = new QLabel();
benoitrigolleau@149 203 QString auxAuthor = author;
benoitrigolleau@149 204 //auxAuthor.replace("Mac","<b>Mac</b>");
benoitrigolleau@144 205 QString label;
benoitrigolleau@149 206 label = auxAuthor+" - \"";
benoitrigolleau@144 207 label += "<a href=\"";
benoitrigolleau@144 208 label += uri;
benoitrigolleau@144 209 label += "\">";
lbajardsilogic@268 210 if (title != "")
lbajardsilogic@268 211 label += title;
lbajardsilogic@268 212 else
lbajardsilogic@268 213 label += "unknown";
benoitrigolleau@148 214 label += "</a>\"";
benoitrigolleau@144 215 labelTitleArtist->setText(label);
benoitrigolleau@144 216 labelTitleArtist->setWordWrap(true);
lbajardsilogic@7 217
benoitrigolleau@144 218 labelTitleArtist->setToolTip(title);
benoitrigolleau@144 219 connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString)));
benoitrigolleau@216 220 connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(lockWindow()));
benoitrigolleau@144 221 m_resultsLayout->addWidget(labelTitleArtist,m_currentRow,4,1,1);
benoitrigolleau@126 222
benoitrigolleau@144 223 //add the confidence
benoitrigolleau@144 224 ConfidenceListWidget *confidenceListWidget= new ConfidenceListWidget();
benoitrigolleau@144 225 confidenceListWidget->setMaximumWidth(180);
lbajardsilogic@272 226 float fconfidence = confidence.toFloat();
lbajardsilogic@272 227 if (fconfidence < 0)
lbajardsilogic@272 228 fconfidence = 0;
lbajardsilogic@272 229 else if (fconfidence > 1)
lbajardsilogic@272 230 fconfidence = 100;
lbajardsilogic@272 231 else
lbajardsilogic@272 232 fconfidence = fconfidence * 100;
lbajardsilogic@272 233 confidenceListWidget->addConfidence(fconfidence,"confidence");
benoitrigolleau@144 234 m_resultsLayout->addWidget(confidenceListWidget,m_currentRow,6,1,1);
benoitrigolleau@144 235
benoitrigolleau@144 236 //TODO add metadatas
benoitrigolleau@144 237
benoitrigolleau@144 238 //add preview button
benoitrigolleau@144 239 QPushButton *buttonPrev = new QPushButton();
benoitrigolleau@151 240 // TODO remove this line
benoitrigolleau@149 241 buttonPrev->setEnabled(false);
benoitrigolleau@144 242 buttonPrev->setMaximumSize(68,34);
benoitrigolleau@144 243 buttonPrev->setMinimumSize(68,34);
benoitrigolleau@144 244 QSize prevIconSize;
benoitrigolleau@144 245 prevIconSize.setHeight(34);
benoitrigolleau@144 246 prevIconSize.setWidth(68);
benoitrigolleau@144 247 buttonPrev->setIconSize(prevIconSize);
benoitrigolleau@144 248 buttonPrev->setIcon(QIcon(":icons/prev.png"));
benoitrigolleau@144 249 buttonPrev->setFlat(true);
benoitrigolleau@144 250 m_resultsLayout->addWidget(buttonPrev,m_currentRow,10,1,1);
benoitrigolleau@144 251
benoitrigolleau@144 252
benoitrigolleau@144 253 // search similar boutton
benoitrigolleau@144 254 QPushButton *buttonSimilar = new QPushButton();
benoitrigolleau@151 255 // TODO remove this line
benoitrigolleau@149 256 buttonSimilar->setEnabled(false);
benoitrigolleau@144 257 buttonSimilar->setMaximumSize(64,34);
benoitrigolleau@144 258 buttonSimilar->setMinimumSize(64,34);
benoitrigolleau@144 259 QSize similarIconSize;
benoitrigolleau@144 260 similarIconSize.setHeight(34);
benoitrigolleau@144 261 similarIconSize.setWidth(64);
benoitrigolleau@144 262 buttonSimilar->setIconSize(similarIconSize);
benoitrigolleau@144 263 buttonSimilar->setIcon(QIcon(":icons/similar.png"));
benoitrigolleau@144 264 buttonSimilar->setFlat(true);
benoitrigolleau@144 265 m_resultsLayout->addWidget(buttonSimilar,m_currentRow,12,1,1);
benoitrigolleau@144 266
benoitrigolleau@144 267 //TODO add here the others informations
benoitrigolleau@144 268 //m_resultsLayout->addWidget(X,m_currentRow+1,4,1,9);
benoitrigolleau@144 269
benoitrigolleau@144 270 // add the separator
benoitrigolleau@144 271 QFrame *hLine = new QFrame();
benoitrigolleau@144 272 hLine->setFrameStyle(QFrame::HLine | QFrame::Raised);
benoitrigolleau@144 273 hLine->setMaximumHeight(1);
benoitrigolleau@144 274 hLine->setMinimumHeight(1);
benoitrigolleau@144 275 m_resultsLayout->setRowMinimumHeight(m_currentRow+2,1);
benoitrigolleau@144 276 m_resultsLayout->addWidget(hLine,m_currentRow+2,1,1,12);
lbajardsilogic@7 277 }
benoitrigolleau@144 278
benoitrigolleau@144 279
benoitrigolleau@144 280