annotate widgets/QueryResultsWidget.cpp @ 148:9f16a77107bd

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