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 aux = title;
|
benoitrigolleau@144
|
192 /* if(aux.length() > 50){
|
benoitrigolleau@144
|
193 aux.truncate(47);
|
benoitrigolleau@144
|
194 aux+="...";
|
benoitrigolleau@144
|
195 }*/
|
benoitrigolleau@144
|
196 QString label;
|
benoitrigolleau@144
|
197 label = author+" - \"";
|
benoitrigolleau@144
|
198 label += "<a href=\"";
|
benoitrigolleau@144
|
199 label += uri;
|
benoitrigolleau@144
|
200 label += "\">";
|
benoitrigolleau@144
|
201 label += aux;
|
benoitrigolleau@144
|
202 label += "</a>";
|
benoitrigolleau@144
|
203 labelTitleArtist->setText(label);
|
benoitrigolleau@144
|
204 labelTitleArtist->setWordWrap(true);
|
lbajardsilogic@7
|
205
|
benoitrigolleau@144
|
206 labelTitleArtist->setToolTip(title);
|
benoitrigolleau@144
|
207 connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString)));
|
benoitrigolleau@144
|
208 m_resultsLayout->addWidget(labelTitleArtist,m_currentRow,4,1,1);
|
benoitrigolleau@126
|
209
|
benoitrigolleau@144
|
210 //add the confidence
|
benoitrigolleau@144
|
211 ConfidenceListWidget *confidenceListWidget= new ConfidenceListWidget();
|
benoitrigolleau@144
|
212 confidenceListWidget->setMaximumWidth(180);
|
benoitrigolleau@144
|
213 confidenceListWidget->addConfidence(100,"confidence");
|
benoitrigolleau@144
|
214 confidenceListWidget->addConfidence(100,"confidence");
|
benoitrigolleau@144
|
215 confidenceListWidget->addConfidence(100,"confidence");
|
benoitrigolleau@144
|
216 m_resultsLayout->addWidget(confidenceListWidget,m_currentRow,6,1,1);
|
benoitrigolleau@144
|
217
|
benoitrigolleau@144
|
218 //TODO add metadatas
|
benoitrigolleau@144
|
219
|
benoitrigolleau@144
|
220 //add preview button
|
benoitrigolleau@144
|
221 QPushButton *buttonPrev = new QPushButton();
|
benoitrigolleau@144
|
222 buttonPrev->setMaximumSize(68,34);
|
benoitrigolleau@144
|
223 buttonPrev->setMinimumSize(68,34);
|
benoitrigolleau@144
|
224 QSize prevIconSize;
|
benoitrigolleau@144
|
225 prevIconSize.setHeight(34);
|
benoitrigolleau@144
|
226 prevIconSize.setWidth(68);
|
benoitrigolleau@144
|
227 buttonPrev->setIconSize(prevIconSize);
|
benoitrigolleau@144
|
228 buttonPrev->setIcon(QIcon(":icons/prev.png"));
|
benoitrigolleau@144
|
229 buttonPrev->setFlat(true);
|
benoitrigolleau@144
|
230 m_resultsLayout->addWidget(buttonPrev,m_currentRow,10,1,1);
|
benoitrigolleau@144
|
231
|
benoitrigolleau@144
|
232
|
benoitrigolleau@144
|
233 // search similar boutton
|
benoitrigolleau@144
|
234 QPushButton *buttonSimilar = new QPushButton();
|
benoitrigolleau@144
|
235 buttonSimilar->setMaximumSize(64,34);
|
benoitrigolleau@144
|
236 buttonSimilar->setMinimumSize(64,34);
|
benoitrigolleau@144
|
237 QSize similarIconSize;
|
benoitrigolleau@144
|
238 similarIconSize.setHeight(34);
|
benoitrigolleau@144
|
239 similarIconSize.setWidth(64);
|
benoitrigolleau@144
|
240 buttonSimilar->setIconSize(similarIconSize);
|
benoitrigolleau@144
|
241 buttonSimilar->setIcon(QIcon(":icons/similar.png"));
|
benoitrigolleau@144
|
242 buttonSimilar->setFlat(true);
|
benoitrigolleau@144
|
243 m_resultsLayout->addWidget(buttonSimilar,m_currentRow,12,1,1);
|
benoitrigolleau@144
|
244
|
benoitrigolleau@144
|
245 //TODO add here the others informations
|
benoitrigolleau@144
|
246 //m_resultsLayout->addWidget(X,m_currentRow+1,4,1,9);
|
benoitrigolleau@144
|
247
|
benoitrigolleau@144
|
248 // add the separator
|
benoitrigolleau@144
|
249 QFrame *hLine = new QFrame();
|
benoitrigolleau@144
|
250 hLine->setFrameStyle(QFrame::HLine | QFrame::Raised);
|
benoitrigolleau@144
|
251 hLine->setMaximumHeight(1);
|
benoitrigolleau@144
|
252 hLine->setMinimumHeight(1);
|
benoitrigolleau@144
|
253 m_resultsLayout->setRowMinimumHeight(m_currentRow+2,1);
|
benoitrigolleau@144
|
254 m_resultsLayout->addWidget(hLine,m_currentRow+2,1,1,12);
|
lbajardsilogic@7
|
255 }
|
benoitrigolleau@144
|
256
|
benoitrigolleau@144
|
257
|
benoitrigolleau@144
|
258
|