annotate widgets/QueryResultsWidget.cpp @ 160:925b77f25cd9

add video icon for Django file (hard coded for demo, should come from the rdf database)
author lbajardsilogic
date Thu, 15 Nov 2007 15:03:58 +0000
parents f2d2c1084e7c
children 3045ced14a59
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@144 109 m_allresults.push_back(m_curResult);
benoitrigolleau@144 110 m_curResult = new std::vector<Info>;
benoitrigolleau@144 111
lbajardsilogic@7 112 }
lbajardsilogic@7 113
lbajardsilogic@7 114 void QueryResultsWidget::displayResult()
lbajardsilogic@7 115 {
benoitrigolleau@144 116 m_currentRow = 0;
benoitrigolleau@144 117 rank = 1;
benoitrigolleau@144 118 addTop();
lbajardsilogic@160 119 int type = 0;
benoitrigolleau@144 120
benoitrigolleau@144 121 std::vector<std::vector<Info>*>::iterator iterOnResults;
benoitrigolleau@144 122 int size = m_allresults.size();
lbajardsilogic@7 123
benoitrigolleau@144 124 for (iterOnResults = m_allresults.begin(); iterOnResults != m_allresults.end();iterOnResults++)
benoitrigolleau@144 125 {
benoitrigolleau@144 126 std::vector<Info>* onInfo = *iterOnResults;
benoitrigolleau@144 127 std::vector<Info>::iterator iterOnInfo;
benoitrigolleau@144 128 QString author = "";
benoitrigolleau@144 129 QString title = "";
benoitrigolleau@144 130 QString uri = "";
lbajardsilogic@7 131
benoitrigolleau@144 132 for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
lbajardsilogic@7 133 {
benoitrigolleau@144 134 if ((*iterOnInfo).name == "identification")
benoitrigolleau@144 135 {
benoitrigolleau@144 136 uri = (*iterOnInfo).value;
benoitrigolleau@144 137 uri = uri.right(uri.length() - uri.lastIndexOf("#") - 1);
benoitrigolleau@144 138 }
lbajardsilogic@90 139 }
benoitrigolleau@144 140
benoitrigolleau@144 141 for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
benoitrigolleau@144 142 {
benoitrigolleau@144 143 if ((*iterOnInfo).name != "identification")
benoitrigolleau@144 144 {
benoitrigolleau@144 145 if((*iterOnInfo).name == "author"){
benoitrigolleau@144 146 author = (*iterOnInfo).value;
benoitrigolleau@144 147 }
benoitrigolleau@144 148 if ((*iterOnInfo).name == "title")
benoitrigolleau@144 149 {
benoitrigolleau@144 150 title += (*iterOnInfo).value;
benoitrigolleau@144 151 }
benoitrigolleau@144 152 }
benoitrigolleau@144 153 }
lbajardsilogic@160 154 if (author == "Django")
lbajardsilogic@160 155 type = 2;
lbajardsilogic@160 156 addResultWidget(author,title,uri,type);
benoitrigolleau@144 157 m_currentRow=m_currentRow+3;
benoitrigolleau@144 158 rank++;
benoitrigolleau@145 159
lbajardsilogic@90 160 }
lbajardsilogic@90 161
benoitrigolleau@144 162 addFoot();
benoitrigolleau@144 163 }
benoitrigolleau@144 164
benoitrigolleau@144 165 void QueryResultsWidget::addResultWidget(QString author,QString title, QString uri, int type)
benoitrigolleau@144 166 {
benoitrigolleau@144 167 // add rank label
benoitrigolleau@144 168 QLabel *labelRank = new QLabel(QString().setNum(rank));
benoitrigolleau@144 169 labelRank->setMaximumWidth(20);
benoitrigolleau@144 170 labelRank->setMinimumWidth(20);
benoitrigolleau@144 171 m_resultsLayout->addWidget(labelRank,m_currentRow,0,1,1);
benoitrigolleau@144 172
benoitrigolleau@144 173 //add the type
benoitrigolleau@144 174 QLabel *labelIcon = new QLabel();
benoitrigolleau@144 175 labelIcon->setMaximumWidth(25);
benoitrigolleau@144 176 labelIcon->setMinimumWidth(25);
benoitrigolleau@144 177 QString pixmapName;
benoitrigolleau@144 178 switch(type){
benoitrigolleau@144 179 case 0:
benoitrigolleau@144 180 pixmapName.append(":icons/musicIcon.png");
benoitrigolleau@144 181 break;
benoitrigolleau@144 182 case 1:
benoitrigolleau@144 183 pixmapName.append(":icons/speechIcon.png");
benoitrigolleau@144 184 break;
lbajardsilogic@160 185 case 2:
lbajardsilogic@160 186 pixmapName.append(":icons/videoIcon.png");
lbajardsilogic@160 187 break;
benoitrigolleau@144 188 default:
benoitrigolleau@144 189 break;
lbajardsilogic@7 190 }
benoitrigolleau@144 191 labelIcon->setPixmap(QPixmap(pixmapName));
benoitrigolleau@144 192 m_resultsLayout->addWidget(labelIcon,m_currentRow,2,1,1);
lbajardsilogic@7 193
benoitrigolleau@144 194 //add the author and title label
benoitrigolleau@144 195 QLabel *labelTitleArtist = new QLabel();
benoitrigolleau@149 196 QString auxAuthor = author;
benoitrigolleau@149 197 //auxAuthor.replace("Mac","<b>Mac</b>");
benoitrigolleau@144 198 QString label;
benoitrigolleau@149 199 label = auxAuthor+" - \"";
benoitrigolleau@144 200 label += "<a href=\"";
benoitrigolleau@144 201 label += uri;
benoitrigolleau@144 202 label += "\">";
benoitrigolleau@148 203 label += title;
benoitrigolleau@148 204 label += "</a>\"";
benoitrigolleau@144 205 labelTitleArtist->setText(label);
benoitrigolleau@144 206 labelTitleArtist->setWordWrap(true);
lbajardsilogic@7 207
benoitrigolleau@144 208 labelTitleArtist->setToolTip(title);
benoitrigolleau@144 209 connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString)));
benoitrigolleau@144 210 m_resultsLayout->addWidget(labelTitleArtist,m_currentRow,4,1,1);
benoitrigolleau@126 211
benoitrigolleau@144 212 //add the confidence
benoitrigolleau@144 213 ConfidenceListWidget *confidenceListWidget= new ConfidenceListWidget();
benoitrigolleau@144 214 confidenceListWidget->setMaximumWidth(180);
benoitrigolleau@144 215 confidenceListWidget->addConfidence(100,"confidence");
benoitrigolleau@149 216 //confidenceListWidget->addConfidence(10,"confidence");
benoitrigolleau@149 217 //confidenceListWidget->addConfidence(65,"confidence");
benoitrigolleau@144 218 m_resultsLayout->addWidget(confidenceListWidget,m_currentRow,6,1,1);
benoitrigolleau@144 219
benoitrigolleau@144 220 //TODO add metadatas
benoitrigolleau@144 221
benoitrigolleau@144 222 //add preview button
benoitrigolleau@144 223 QPushButton *buttonPrev = new QPushButton();
benoitrigolleau@151 224 // TODO remove this line
benoitrigolleau@149 225 buttonPrev->setEnabled(false);
benoitrigolleau@144 226 buttonPrev->setMaximumSize(68,34);
benoitrigolleau@144 227 buttonPrev->setMinimumSize(68,34);
benoitrigolleau@144 228 QSize prevIconSize;
benoitrigolleau@144 229 prevIconSize.setHeight(34);
benoitrigolleau@144 230 prevIconSize.setWidth(68);
benoitrigolleau@144 231 buttonPrev->setIconSize(prevIconSize);
benoitrigolleau@144 232 buttonPrev->setIcon(QIcon(":icons/prev.png"));
benoitrigolleau@144 233 buttonPrev->setFlat(true);
benoitrigolleau@144 234 m_resultsLayout->addWidget(buttonPrev,m_currentRow,10,1,1);
benoitrigolleau@144 235
benoitrigolleau@144 236
benoitrigolleau@144 237 // search similar boutton
benoitrigolleau@144 238 QPushButton *buttonSimilar = new QPushButton();
benoitrigolleau@151 239 // TODO remove this line
benoitrigolleau@149 240 buttonSimilar->setEnabled(false);
benoitrigolleau@144 241 buttonSimilar->setMaximumSize(64,34);
benoitrigolleau@144 242 buttonSimilar->setMinimumSize(64,34);
benoitrigolleau@144 243 QSize similarIconSize;
benoitrigolleau@144 244 similarIconSize.setHeight(34);
benoitrigolleau@144 245 similarIconSize.setWidth(64);
benoitrigolleau@144 246 buttonSimilar->setIconSize(similarIconSize);
benoitrigolleau@144 247 buttonSimilar->setIcon(QIcon(":icons/similar.png"));
benoitrigolleau@144 248 buttonSimilar->setFlat(true);
benoitrigolleau@144 249 m_resultsLayout->addWidget(buttonSimilar,m_currentRow,12,1,1);
benoitrigolleau@144 250
benoitrigolleau@144 251 //TODO add here the others informations
benoitrigolleau@144 252 //m_resultsLayout->addWidget(X,m_currentRow+1,4,1,9);
benoitrigolleau@144 253
benoitrigolleau@144 254 // add the separator
benoitrigolleau@144 255 QFrame *hLine = new QFrame();
benoitrigolleau@144 256 hLine->setFrameStyle(QFrame::HLine | QFrame::Raised);
benoitrigolleau@144 257 hLine->setMaximumHeight(1);
benoitrigolleau@144 258 hLine->setMinimumHeight(1);
benoitrigolleau@144 259 m_resultsLayout->setRowMinimumHeight(m_currentRow+2,1);
benoitrigolleau@144 260 m_resultsLayout->addWidget(hLine,m_currentRow+2,1,1,12);
lbajardsilogic@7 261 }
benoitrigolleau@144 262
benoitrigolleau@144 263
benoitrigolleau@144 264