diff 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
line wrap: on
line diff
--- a/widgets/QueryResultsWidget.cpp	Tue Nov 13 10:07:49 2007 +0000
+++ b/widgets/QueryResultsWidget.cpp	Tue Nov 13 11:09:57 2007 +0000
@@ -12,6 +12,7 @@
 */
 
 #include "QueryResultsWidget.h"
+#include "ConfidenceListWidget.h"
 
 #include <QLabel>
 #include <QApplication>
@@ -19,12 +20,14 @@
 #include <iostream>
 
 #include "sv/main/MainWindow.h"
-#include "widgets/ListResultGeneralItemWidget.h"
+
+int rank = 1;
 
 QueryResultsWidget::QueryResultsWidget() : QWidget(),
-	m_ndResults(0)
+	m_currentRow(0)
 {
 	m_resultsLayout = new QGridLayout;
+	m_curResult = new std::vector<Info>;
 	
 	QWidget *resultsWidget = new QWidget;
 	resultsWidget->setLayout(m_resultsLayout);
@@ -32,6 +35,7 @@
 	m_scrollArea = new QScrollArea;
 	m_scrollArea->setWidget(resultsWidget);
 	m_scrollArea->setWidgetResizable(true);
+	m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 
 	QVBoxLayout *mainLayout = new QVBoxLayout;
 	mainLayout->addWidget(m_scrollArea);
@@ -42,19 +46,52 @@
 QueryResultsWidget::~QueryResultsWidget()
 {}
 
+void QueryResultsWidget::addTop()
+{
+	QLabel *rankLabel = new QLabel("#");
+	rankLabel->setAlignment(Qt::AlignHCenter);
+	m_resultsLayout->addWidget(rankLabel,0,0,1,1);
+	m_resultsLayout->setColumnMinimumWidth(0,15);
+	m_resultsLayout->setColumnMinimumWidth(1,5);
+
+	QLabel *typeLabel = new QLabel(tr("Type"));
+	typeLabel->setAlignment(Qt::AlignHCenter);
+	m_resultsLayout->addWidget(typeLabel,0,2,1,1);
+	m_resultsLayout->setColumnMinimumWidth(3,5);
+	m_resultsLayout->setColumnStretch(4,1);
+	m_resultsLayout->setColumnMinimumWidth(5,5);
+
+	QLabel *confidenceLabel = new QLabel(tr("Confidence"));
+	confidenceLabel->setAlignment(Qt::AlignHCenter);
+	m_resultsLayout->addWidget(confidenceLabel,0,6,1,1);
+	m_resultsLayout->setColumnMinimumWidth(7,5);
+
+	QLabel *metadataLabel = new QLabel(tr("Meta-Data"));
+	confidenceLabel->setAlignment(Qt::AlignHCenter);
+	m_resultsLayout->addWidget(metadataLabel,0,8,1,1);
+	m_resultsLayout->setColumnMinimumWidth(9,5);
+	m_resultsLayout->setColumnMinimumWidth(11,5);
+	m_currentRow++; 
+}
+	
+void QueryResultsWidget::addFoot()
+{
+	m_resultsLayout->setRowStretch(m_currentRow,1);
+}
+
 void QueryResultsWidget::reset()
 {
-	m_ndResults = 0;
-
 	QLayoutItem *child;
 	while ((child = m_resultsLayout->takeAt(0)) != 0) {
 		delete child->widget();
 	}
+	m_allresults.clear();
+
 }
 
 void QueryResultsWidget::newResult()
 {
-	m_curResult.clear();
+	m_curResult->clear();
 }
 
 void QueryResultsWidget::addInfo(const QString& name, const QString& value)
@@ -63,51 +100,157 @@
 	info.name = name;
 	info.value = value;
 
-	m_curResult.push_back(info);
+	m_curResult->push_back(info);
+}
+
+void QueryResultsWidget::saveCurResult()
+{
+	m_allresults.push_back(m_curResult);
+	m_curResult = new std::vector<Info>; 
+
 }
 
 void QueryResultsWidget::displayResult()
 {
-	std::vector<Info>::iterator iter;
+	m_currentRow = 0;
+	rank = 1;
+	addTop();
+	
+	std::vector<std::vector<Info>*>::iterator iterOnResults;
+	int size = m_allresults.size();
 
-	QString author = "";
-	QString title = "";
-	QString uri = "";
+	for (iterOnResults = m_allresults.begin(); iterOnResults != m_allresults.end();iterOnResults++)
+	{
+		std::vector<Info>* onInfo = *iterOnResults;
+		std::vector<Info>::iterator iterOnInfo;
+		QString author = "";
+		QString title = "";
+		QString uri = "";
 
-	ListResultGeneralItemWidget *itemResult = new ListResultGeneralItemWidget();
-	itemResult->setRank(m_ndResults);
-	itemResult->setType(0);
-
-	for (iter = m_curResult.begin(); iter != m_curResult.end(); iter++)
-	{
-		if ((*iter).name == "identification")
+		for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
 		{
-			uri = (*iter).value;
-			uri = uri.right(uri.length() - uri.lastIndexOf("#") - 1);
+			if ((*iterOnInfo).name == "identification")
+			{
+				uri = (*iterOnInfo).value;
+				uri = uri.right(uri.length() - uri.lastIndexOf("#") - 1);
+			}
 		}
+		
+		for (iterOnInfo = (*onInfo).begin(); iterOnInfo != (*onInfo).end(); iterOnInfo++)
+		{
+			if ((*iterOnInfo).name != "identification")
+			{
+				if((*iterOnInfo).name == "author"){
+					author = (*iterOnInfo).value;
+				}
+				if ((*iterOnInfo).name == "title")
+				{
+					title += (*iterOnInfo).value;
+				}
+			}
+		}
+		addResultWidget(author,title,uri,0);
+		m_currentRow=m_currentRow+3; 
+		rank++;
 	}
 
-	for (iter = m_curResult.begin(); iter != m_curResult.end(); iter++)
-	{
-		if ((*iter).name != "identification")
-		{
-			if((*iter).name == "author"){
-				author = (*iter).value;
-			}
-			if ((*iter).name == "title")
-			{
-				title += (*iter).value;
-			}
-		}
+	addFoot();
+}
+
+void QueryResultsWidget::addResultWidget(QString author,QString title, QString uri, int type)
+{
+	// add rank label
+	QLabel *labelRank = new QLabel(QString().setNum(rank));
+	labelRank->setMaximumWidth(20);
+	labelRank->setMinimumWidth(20);
+	m_resultsLayout->addWidget(labelRank,m_currentRow,0,1,1);
+	
+	//add the type
+	QLabel *labelIcon = new QLabel();
+	labelIcon->setMaximumWidth(25);
+	labelIcon->setMinimumWidth(25);
+	QString pixmapName;
+	switch(type){
+		case 0:  
+			pixmapName.append(":icons/musicIcon.png");
+			break;
+		case 1: 
+			pixmapName.append(":icons/speechIcon.png");
+			break;
+
+		default: 
+			break;
 	}
-	itemResult->setTitleAndAuthorName(author,title,uri );
-	itemResult->addConfidence(100,"contains");
+	labelIcon->setPixmap(QPixmap(pixmapName));
+	m_resultsLayout->addWidget(labelIcon,m_currentRow,2,1,1);
 
-	connect(itemResult, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString)));
+	//add the author and title label
+	QLabel *labelTitleArtist = new QLabel();
+	QString aux = title;
+/*	if(aux.length() > 50){
+		aux.truncate(47);
+		aux+="...";
+	}*/
+	QString label;
+	label = author+" - \"";
+	label += "<a href=\"";
+	label += uri;
+	label += "\">";
+	label += aux;
+	label += "</a>";
+	labelTitleArtist->setText(label);
+	labelTitleArtist->setWordWrap(true); 
 
+	labelTitleArtist->setToolTip(title);
+	connect(labelTitleArtist, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierFile(QString)));
+	m_resultsLayout->addWidget(labelTitleArtist,m_currentRow,4,1,1);
 
-	m_resultsLayout->addWidget(itemResult,m_ndResults,0);
-	m_resultsLayout->setSpacing(0);
-	m_ndResults++;
-	
+	//add the confidence
+	ConfidenceListWidget *confidenceListWidget= new ConfidenceListWidget();
+	confidenceListWidget->setMaximumWidth(180);
+	confidenceListWidget->addConfidence(100,"confidence");
+	confidenceListWidget->addConfidence(100,"confidence");
+	confidenceListWidget->addConfidence(100,"confidence");
+	m_resultsLayout->addWidget(confidenceListWidget,m_currentRow,6,1,1);
+
+	//TODO add metadatas
+
+	//add preview button
+	QPushButton *buttonPrev = new QPushButton();
+	buttonPrev->setMaximumSize(68,34);
+	buttonPrev->setMinimumSize(68,34);
+	QSize prevIconSize;
+	prevIconSize.setHeight(34);
+	prevIconSize.setWidth(68);
+	buttonPrev->setIconSize(prevIconSize);
+	buttonPrev->setIcon(QIcon(":icons/prev.png"));
+	buttonPrev->setFlat(true);
+	m_resultsLayout->addWidget(buttonPrev,m_currentRow,10,1,1);
+
+
+	// search similar boutton
+	QPushButton *buttonSimilar = new QPushButton();
+	buttonSimilar->setMaximumSize(64,34);
+	buttonSimilar->setMinimumSize(64,34);
+	QSize similarIconSize;
+	similarIconSize.setHeight(34);
+	similarIconSize.setWidth(64);
+	buttonSimilar->setIconSize(similarIconSize);
+	buttonSimilar->setIcon(QIcon(":icons/similar.png"));
+	buttonSimilar->setFlat(true);
+	m_resultsLayout->addWidget(buttonSimilar,m_currentRow,12,1,1);
+
+	//TODO add here the others informations
+	//m_resultsLayout->addWidget(X,m_currentRow+1,4,1,9);
+
+	// add the separator
+	QFrame *hLine = new QFrame();
+	hLine->setFrameStyle(QFrame::HLine | QFrame::Raised);
+	hLine->setMaximumHeight(1);
+	hLine->setMinimumHeight(1);
+	m_resultsLayout->setRowMinimumHeight(m_currentRow+2,1);
+	m_resultsLayout->addWidget(hLine,m_currentRow+2,1,1,12);
 }
+
+
+