annotate widgets/QueryResultsWidget.cpp @ 250:c12986afc03c

patch for the EasaierTB rdf storage format
author lbajardsilogic
date Tue, 10 Jun 2008 16:06:57 +0000
parents ec2ca3fbd957
children ee047fc1a552
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 {
lbajardsilogic@242 134 if ((*iterOnInfo).name == "signal")
benoitrigolleau@144 135 {
benoitrigolleau@144 136 uri = (*iterOnInfo).value;
lbajardsilogic@242 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 {
lbajardsilogic@242 143 if ((*iterOnInfo).name != "signal")
benoitrigolleau@144 144 {
lbajardsilogic@250 145 //if((*iterOnInfo).name == "composer"){
lbajardsilogic@250 146 if((*iterOnInfo).name == "author"){
benoitrigolleau@144 147 author = (*iterOnInfo).value;
benoitrigolleau@144 148 }
lbajardsilogic@250 149 //if ((*iterOnInfo).name == "performance_title")
lbajardsilogic@250 150 if ((*iterOnInfo).name == "title")
benoitrigolleau@144 151 {
benoitrigolleau@144 152 title += (*iterOnInfo).value;
benoitrigolleau@144 153 }
benoitrigolleau@144 154 }
benoitrigolleau@144 155 }
lbajardsilogic@160 156 if (author == "Django")
lbajardsilogic@160 157 type = 2;
lbajardsilogic@160 158 addResultWidget(author,title,uri,type);
benoitrigolleau@144 159 m_currentRow=m_currentRow+3;
benoitrigolleau@144 160 rank++;
benoitrigolleau@145 161
lbajardsilogic@90 162 }
lbajardsilogic@90 163
benoitrigolleau@144 164 addFoot();
benoitrigolleau@144 165 }
benoitrigolleau@144 166
benoitrigolleau@144 167 void QueryResultsWidget::addResultWidget(QString author,QString title, QString uri, int type)
benoitrigolleau@144 168 {
benoitrigolleau@144 169 // add rank label
benoitrigolleau@144 170 QLabel *labelRank = new QLabel(QString().setNum(rank));
benoitrigolleau@144 171 labelRank->setMaximumWidth(20);
benoitrigolleau@144 172 labelRank->setMinimumWidth(20);
benoitrigolleau@144 173 m_resultsLayout->addWidget(labelRank,m_currentRow,0,1,1);
benoitrigolleau@144 174
benoitrigolleau@144 175 //add the type
benoitrigolleau@144 176 QLabel *labelIcon = new QLabel();
benoitrigolleau@144 177 labelIcon->setMaximumWidth(25);
benoitrigolleau@144 178 labelIcon->setMinimumWidth(25);
benoitrigolleau@144 179 QString pixmapName;
benoitrigolleau@144 180 switch(type){
benoitrigolleau@144 181 case 0:
benoitrigolleau@144 182 pixmapName.append(":icons/musicIcon.png");
benoitrigolleau@144 183 break;
benoitrigolleau@144 184 case 1:
benoitrigolleau@144 185 pixmapName.append(":icons/speechIcon.png");
benoitrigolleau@144 186 break;
lbajardsilogic@160 187 case 2:
lbajardsilogic@160 188 pixmapName.append(":icons/videoIcon.png");
lbajardsilogic@160 189 break;
benoitrigolleau@144 190 default:
benoitrigolleau@144 191 break;
lbajardsilogic@7 192 }
benoitrigolleau@144 193 labelIcon->setPixmap(QPixmap(pixmapName));
benoitrigolleau@144 194 m_resultsLayout->addWidget(labelIcon,m_currentRow,2,1,1);
lbajardsilogic@7 195
benoitrigolleau@144 196 //add the author and title label
benoitrigolleau@144 197 QLabel *labelTitleArtist = new QLabel();
benoitrigolleau@149 198 QString auxAuthor = author;
benoitrigolleau@149 199 //auxAuthor.replace("Mac","<b>Mac</b>");
benoitrigolleau@144 200 QString label;
benoitrigolleau@149 201 label = auxAuthor+" - \"";
benoitrigolleau@144 202 label += "<a href=\"";
benoitrigolleau@144 203 label += uri;
benoitrigolleau@144 204 label += "\">";
benoitrigolleau@148 205 label += title;
benoitrigolleau@148 206 label += "</a>\"";
benoitrigolleau@144 207 labelTitleArtist->setText(label);
benoitrigolleau@144 208 labelTitleArtist->setWordWrap(true);
lbajardsilogic@7 209
benoitrigolleau@144 210 labelTitleArtist->setToolTip(title);
benoitrigolleau@144 211 connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString)));
benoitrigolleau@216 212 connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(lockWindow()));
benoitrigolleau@144 213 m_resultsLayout->addWidget(labelTitleArtist,m_currentRow,4,1,1);
benoitrigolleau@126 214
benoitrigolleau@144 215 //add the confidence
benoitrigolleau@144 216 ConfidenceListWidget *confidenceListWidget= new ConfidenceListWidget();
benoitrigolleau@144 217 confidenceListWidget->setMaximumWidth(180);
benoitrigolleau@144 218 confidenceListWidget->addConfidence(100,"confidence");
benoitrigolleau@149 219 //confidenceListWidget->addConfidence(10,"confidence");
benoitrigolleau@149 220 //confidenceListWidget->addConfidence(65,"confidence");
benoitrigolleau@144 221 m_resultsLayout->addWidget(confidenceListWidget,m_currentRow,6,1,1);
benoitrigolleau@144 222
benoitrigolleau@144 223 //TODO add metadatas
benoitrigolleau@144 224
benoitrigolleau@144 225 //add preview button
benoitrigolleau@144 226 QPushButton *buttonPrev = new QPushButton();
benoitrigolleau@151 227 // TODO remove this line
benoitrigolleau@149 228 buttonPrev->setEnabled(false);
benoitrigolleau@144 229 buttonPrev->setMaximumSize(68,34);
benoitrigolleau@144 230 buttonPrev->setMinimumSize(68,34);
benoitrigolleau@144 231 QSize prevIconSize;
benoitrigolleau@144 232 prevIconSize.setHeight(34);
benoitrigolleau@144 233 prevIconSize.setWidth(68);
benoitrigolleau@144 234 buttonPrev->setIconSize(prevIconSize);
benoitrigolleau@144 235 buttonPrev->setIcon(QIcon(":icons/prev.png"));
benoitrigolleau@144 236 buttonPrev->setFlat(true);
benoitrigolleau@144 237 m_resultsLayout->addWidget(buttonPrev,m_currentRow,10,1,1);
benoitrigolleau@144 238
benoitrigolleau@144 239
benoitrigolleau@144 240 // search similar boutton
benoitrigolleau@144 241 QPushButton *buttonSimilar = new QPushButton();
benoitrigolleau@151 242 // TODO remove this line
benoitrigolleau@149 243 buttonSimilar->setEnabled(false);
benoitrigolleau@144 244 buttonSimilar->setMaximumSize(64,34);
benoitrigolleau@144 245 buttonSimilar->setMinimumSize(64,34);
benoitrigolleau@144 246 QSize similarIconSize;
benoitrigolleau@144 247 similarIconSize.setHeight(34);
benoitrigolleau@144 248 similarIconSize.setWidth(64);
benoitrigolleau@144 249 buttonSimilar->setIconSize(similarIconSize);
benoitrigolleau@144 250 buttonSimilar->setIcon(QIcon(":icons/similar.png"));
benoitrigolleau@144 251 buttonSimilar->setFlat(true);
benoitrigolleau@144 252 m_resultsLayout->addWidget(buttonSimilar,m_currentRow,12,1,1);
benoitrigolleau@144 253
benoitrigolleau@144 254 //TODO add here the others informations
benoitrigolleau@144 255 //m_resultsLayout->addWidget(X,m_currentRow+1,4,1,9);
benoitrigolleau@144 256
benoitrigolleau@144 257 // add the separator
benoitrigolleau@144 258 QFrame *hLine = new QFrame();
benoitrigolleau@144 259 hLine->setFrameStyle(QFrame::HLine | QFrame::Raised);
benoitrigolleau@144 260 hLine->setMaximumHeight(1);
benoitrigolleau@144 261 hLine->setMinimumHeight(1);
benoitrigolleau@144 262 m_resultsLayout->setRowMinimumHeight(m_currentRow+2,1);
benoitrigolleau@144 263 m_resultsLayout->addWidget(hLine,m_currentRow+2,1,1,12);
lbajardsilogic@7 264 }
benoitrigolleau@144 265
benoitrigolleau@144 266
benoitrigolleau@144 267