annotate widgets/QueryResultsWidget.cpp @ 144:f3dce7a985cf

result display is better now.
author benoitrigolleau
date Tue, 13 Nov 2007 11:09:57 +0000
parents c26c73ca6d37
children e63e8272dcb0
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@144 74 m_currentRow++;
benoitrigolleau@144 75 }
benoitrigolleau@144 76
benoitrigolleau@144 77 void QueryResultsWidget::addFoot()
benoitrigolleau@144 78 {
benoitrigolleau@144 79 m_resultsLayout->setRowStretch(m_currentRow,1);
benoitrigolleau@144 80 }
benoitrigolleau@144 81
lbajardsilogic@7 82 void QueryResultsWidget::reset()
lbajardsilogic@7 83 {
lbajardsilogic@7 84 QLayoutItem *child;
lbajardsilogic@7 85 while ((child = m_resultsLayout->takeAt(0)) != 0) {
lbajardsilogic@7 86 delete child->widget();
lbajardsilogic@7 87 }
benoitrigolleau@144 88 m_allresults.clear();
benoitrigolleau@144 89
lbajardsilogic@7 90 }
lbajardsilogic@7 91
lbajardsilogic@7 92 void QueryResultsWidget::newResult()
lbajardsilogic@7 93 {
benoitrigolleau@144 94 m_curResult->clear();
lbajardsilogic@7 95 }
lbajardsilogic@7 96
lbajardsilogic@7 97 void QueryResultsWidget::addInfo(const QString& name, const QString& value)
lbajardsilogic@7 98 {
lbajardsilogic@7 99 Info info;
lbajardsilogic@7 100 info.name = name;
lbajardsilogic@7 101 info.value = value;
lbajardsilogic@7 102
benoitrigolleau@144 103 m_curResult->push_back(info);
benoitrigolleau@144 104 }
benoitrigolleau@144 105
benoitrigolleau@144 106 void QueryResultsWidget::saveCurResult()
benoitrigolleau@144 107 {
benoitrigolleau@144 108 m_allresults.push_back(m_curResult);
benoitrigolleau@144 109 m_curResult = new std::vector<Info>;
benoitrigolleau@144 110
lbajardsilogic@7 111 }
lbajardsilogic@7 112
lbajardsilogic@7 113 void QueryResultsWidget::displayResult()
lbajardsilogic@7 114 {
benoitrigolleau@144 115 m_currentRow = 0;
benoitrigolleau@144 116 rank = 1;
benoitrigolleau@144 117 addTop();
benoitrigolleau@144 118
benoitrigolleau@144 119 std::vector<std::vector<Info>*>::iterator iterOnResults;
benoitrigolleau@144 120 int size = m_allresults.size();
lbajardsilogic@7 121
benoitrigolleau@144 122 for (iterOnResults = m_allresults.begin(); iterOnResults != m_allresults.end();iterOnResults++)
benoitrigolleau@144 123 {
benoitrigolleau@144 124 std::vector<Info>* onInfo = *iterOnResults;
benoitrigolleau@144 125 std::vector<Info>::iterator iterOnInfo;
benoitrigolleau@144 126 QString author = "";
benoitrigolleau@144 127 QString title = "";
benoitrigolleau@144 128 QString uri = "";
lbajardsilogic@7 129
benoitrigolleau@144 130 for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
lbajardsilogic@7 131 {
benoitrigolleau@144 132 if ((*iterOnInfo).name == "identification")
benoitrigolleau@144 133 {
benoitrigolleau@144 134 uri = (*iterOnInfo).value;
benoitrigolleau@144 135 uri = uri.right(uri.length() - uri.lastIndexOf("#") - 1);
benoitrigolleau@144 136 }
lbajardsilogic@90 137 }
benoitrigolleau@144 138
benoitrigolleau@144 139 for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
benoitrigolleau@144 140 {
benoitrigolleau@144 141 if ((*iterOnInfo).name != "identification")
benoitrigolleau@144 142 {
benoitrigolleau@144 143 if((*iterOnInfo).name == "author"){
benoitrigolleau@144 144 author = (*iterOnInfo).value;
benoitrigolleau@144 145 }
benoitrigolleau@144 146 if ((*iterOnInfo).name == "title")
benoitrigolleau@144 147 {
benoitrigolleau@144 148 title += (*iterOnInfo).value;
benoitrigolleau@144 149 }
benoitrigolleau@144 150 }
benoitrigolleau@144 151 }
benoitrigolleau@144 152 addResultWidget(author,title,uri,0);
benoitrigolleau@144 153 m_currentRow=m_currentRow+3;
benoitrigolleau@144 154 rank++;
lbajardsilogic@90 155 }
lbajardsilogic@90 156
benoitrigolleau@144 157 addFoot();
benoitrigolleau@144 158 }
benoitrigolleau@144 159
benoitrigolleau@144 160 void QueryResultsWidget::addResultWidget(QString author,QString title, QString uri, int type)
benoitrigolleau@144 161 {
benoitrigolleau@144 162 // add rank label
benoitrigolleau@144 163 QLabel *labelRank = new QLabel(QString().setNum(rank));
benoitrigolleau@144 164 labelRank->setMaximumWidth(20);
benoitrigolleau@144 165 labelRank->setMinimumWidth(20);
benoitrigolleau@144 166 m_resultsLayout->addWidget(labelRank,m_currentRow,0,1,1);
benoitrigolleau@144 167
benoitrigolleau@144 168 //add the type
benoitrigolleau@144 169 QLabel *labelIcon = new QLabel();
benoitrigolleau@144 170 labelIcon->setMaximumWidth(25);
benoitrigolleau@144 171 labelIcon->setMinimumWidth(25);
benoitrigolleau@144 172 QString pixmapName;
benoitrigolleau@144 173 switch(type){
benoitrigolleau@144 174 case 0:
benoitrigolleau@144 175 pixmapName.append(":icons/musicIcon.png");
benoitrigolleau@144 176 break;
benoitrigolleau@144 177 case 1:
benoitrigolleau@144 178 pixmapName.append(":icons/speechIcon.png");
benoitrigolleau@144 179 break;
benoitrigolleau@144 180
benoitrigolleau@144 181 default:
benoitrigolleau@144 182 break;
lbajardsilogic@7 183 }
benoitrigolleau@144 184 labelIcon->setPixmap(QPixmap(pixmapName));
benoitrigolleau@144 185 m_resultsLayout->addWidget(labelIcon,m_currentRow,2,1,1);
lbajardsilogic@7 186
benoitrigolleau@144 187 //add the author and title label
benoitrigolleau@144 188 QLabel *labelTitleArtist = new QLabel();
benoitrigolleau@144 189 QString aux = title;
benoitrigolleau@144 190 /* if(aux.length() > 50){
benoitrigolleau@144 191 aux.truncate(47);
benoitrigolleau@144 192 aux+="...";
benoitrigolleau@144 193 }*/
benoitrigolleau@144 194 QString label;
benoitrigolleau@144 195 label = author+" - \"";
benoitrigolleau@144 196 label += "<a href=\"";
benoitrigolleau@144 197 label += uri;
benoitrigolleau@144 198 label += "\">";
benoitrigolleau@144 199 label += aux;
benoitrigolleau@144 200 label += "</a>";
benoitrigolleau@144 201 labelTitleArtist->setText(label);
benoitrigolleau@144 202 labelTitleArtist->setWordWrap(true);
lbajardsilogic@7 203
benoitrigolleau@144 204 labelTitleArtist->setToolTip(title);
benoitrigolleau@144 205 connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString)));
benoitrigolleau@144 206 m_resultsLayout->addWidget(labelTitleArtist,m_currentRow,4,1,1);
benoitrigolleau@126 207
benoitrigolleau@144 208 //add the confidence
benoitrigolleau@144 209 ConfidenceListWidget *confidenceListWidget= new ConfidenceListWidget();
benoitrigolleau@144 210 confidenceListWidget->setMaximumWidth(180);
benoitrigolleau@144 211 confidenceListWidget->addConfidence(100,"confidence");
benoitrigolleau@144 212 confidenceListWidget->addConfidence(100,"confidence");
benoitrigolleau@144 213 confidenceListWidget->addConfidence(100,"confidence");
benoitrigolleau@144 214 m_resultsLayout->addWidget(confidenceListWidget,m_currentRow,6,1,1);
benoitrigolleau@144 215
benoitrigolleau@144 216 //TODO add metadatas
benoitrigolleau@144 217
benoitrigolleau@144 218 //add preview button
benoitrigolleau@144 219 QPushButton *buttonPrev = new QPushButton();
benoitrigolleau@144 220 buttonPrev->setMaximumSize(68,34);
benoitrigolleau@144 221 buttonPrev->setMinimumSize(68,34);
benoitrigolleau@144 222 QSize prevIconSize;
benoitrigolleau@144 223 prevIconSize.setHeight(34);
benoitrigolleau@144 224 prevIconSize.setWidth(68);
benoitrigolleau@144 225 buttonPrev->setIconSize(prevIconSize);
benoitrigolleau@144 226 buttonPrev->setIcon(QIcon(":icons/prev.png"));
benoitrigolleau@144 227 buttonPrev->setFlat(true);
benoitrigolleau@144 228 m_resultsLayout->addWidget(buttonPrev,m_currentRow,10,1,1);
benoitrigolleau@144 229
benoitrigolleau@144 230
benoitrigolleau@144 231 // search similar boutton
benoitrigolleau@144 232 QPushButton *buttonSimilar = new QPushButton();
benoitrigolleau@144 233 buttonSimilar->setMaximumSize(64,34);
benoitrigolleau@144 234 buttonSimilar->setMinimumSize(64,34);
benoitrigolleau@144 235 QSize similarIconSize;
benoitrigolleau@144 236 similarIconSize.setHeight(34);
benoitrigolleau@144 237 similarIconSize.setWidth(64);
benoitrigolleau@144 238 buttonSimilar->setIconSize(similarIconSize);
benoitrigolleau@144 239 buttonSimilar->setIcon(QIcon(":icons/similar.png"));
benoitrigolleau@144 240 buttonSimilar->setFlat(true);
benoitrigolleau@144 241 m_resultsLayout->addWidget(buttonSimilar,m_currentRow,12,1,1);
benoitrigolleau@144 242
benoitrigolleau@144 243 //TODO add here the others informations
benoitrigolleau@144 244 //m_resultsLayout->addWidget(X,m_currentRow+1,4,1,9);
benoitrigolleau@144 245
benoitrigolleau@144 246 // add the separator
benoitrigolleau@144 247 QFrame *hLine = new QFrame();
benoitrigolleau@144 248 hLine->setFrameStyle(QFrame::HLine | QFrame::Raised);
benoitrigolleau@144 249 hLine->setMaximumHeight(1);
benoitrigolleau@144 250 hLine->setMinimumHeight(1);
benoitrigolleau@144 251 m_resultsLayout->setRowMinimumHeight(m_currentRow+2,1);
benoitrigolleau@144 252 m_resultsLayout->addWidget(hLine,m_currentRow+2,1,1,12);
lbajardsilogic@7 253 }
benoitrigolleau@144 254
benoitrigolleau@144 255
benoitrigolleau@144 256