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