# HG changeset patch # User lbajardsilogic # Date 1194948469 0 # Node ID 97fd6148fb8e496bbe4d62608a722e1301906997 # Parent c1ea7af931e774e1f6367a741e6f01a67c64eee4 support related media display and loading diff -r c1ea7af931e7 -r 97fd6148fb8e data/data.pro --- a/data/data.pro Mon Nov 12 14:50:15 2007 +0000 +++ b/data/data.pro Tue Nov 13 10:07:49 2007 +0000 @@ -41,6 +41,7 @@ fileio/ModelReader.h \ fileio/QueryConfigReader.h \ fileio/SparqlResultsReader.h \ + fileio/SparqlRelatedMediaReader.h \ model/DenseThreeDimensionalModel.h \ model/DenseTimeValueModel.h \ model/EditableDenseThreeDimensionalModel.h \ @@ -86,6 +87,7 @@ fileio/ModelReader.cpp \ fileio/QueryConfigReader.cpp \ fileio/SparqlResultsReader.cpp \ + fileio/SparqlRelatedMediaReader.cpp \ model/DenseTimeValueModel.cpp \ model/EditableDenseThreeDimensionalModel.cpp \ model/FFTModel.cpp \ diff -r c1ea7af931e7 -r 97fd6148fb8e data/fileio/SparqlRelatedMediaReader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/SparqlRelatedMediaReader.cpp Tue Nov 13 10:07:49 2007 +0000 @@ -0,0 +1,153 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* Sound Access + EASAIER client application. + Silogic 2007. Laure Bajard. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "SparqlRelatedMediaReader.h" + +#include + +SparqlRelatedMediaReader::SparqlRelatedMediaReader(std::list *relMediaList) : + m_relMediaList(relMediaList) +{} + +bool SparqlRelatedMediaReader::parse(const QString & filename) +{ + SparqlRelatedMediaHandler handler(m_relMediaList); + QXmlSimpleReader reader; + reader.setContentHandler(&handler); + reader.setErrorHandler(&handler); + + QFile file(filename); + + if (!file.open(QFile::ReadOnly | QFile::Text)) { + return false; + } + + QXmlInputSource xmlInputSource(&file); + if (reader.parse(xmlInputSource)) + { + return true; + } + + return false; +} + +SparqlRelatedMediaHandler::SparqlRelatedMediaHandler(std::list *relMediaList) : QXmlDefaultHandler(), + m_relMediaList(relMediaList), + m_inBinding(false), + m_curBindingName("") +{} + +bool SparqlRelatedMediaHandler::startElement(const QString &namespaceURI, const QString &localName, + const QString &qName, const QXmlAttributes &attributes) +{ + + QString name = qName.toLower(); + + bool ok = false; + + // Valid element names: + // + // sparql + // head + // variable + // results + // result + // binding + + if (name == "sparql") { + + // nothing needed + ok = true; + + } else if (name == "head") { + + // nothing needed + ok = true; + + } else if (name == "variable") { + + // nothing needed + ok = true; + + } else if (name == "results") { + + // nothing needed + ok = true; + + } else if (name == "result") { + + // nothing needed + ok = true; + + } else if (name == "binding") { + + // nothing needed + ok = true; + + } else if ( (name == "uri") || (name == "literal") ) { + m_inBinding = true; + ok = true; + } + + if (!ok) { + std::cerr << "WARNING: SparqlResultsHandler-XML: Failed to completely process element \"" + << name.toLocal8Bit().data() << "\"" << std::endl; + } + + return true; +} + +bool SparqlRelatedMediaHandler::endElement(const QString &namespaceURI, const QString &localName, + const QString &qName) +{ + QString name = qName.toLower(); + + if ( (name == "uri") || (name == "literal") ) + { + m_inBinding = false; + } + + return true; +} + +bool SparqlRelatedMediaHandler::characters(const QString &str) +{ + if (m_inBinding) + { + m_relMediaList->push_back(str); + } + + return true; +} + +bool SparqlRelatedMediaHandler::error(const QXmlParseException &exception) +{ + QString errorString; + errorString += QString("ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3") + .arg(exception.message()) + .arg(exception.lineNumber()) + .arg(exception.columnNumber()); + std::cerr << errorString.toLocal8Bit().data() << std::endl; + return QXmlDefaultHandler::error(exception); +} + +bool SparqlRelatedMediaHandler::fatalError(const QXmlParseException &exception) +{ + QString errorString; + errorString += QString("FATAL ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3") + .arg(exception.message()) + .arg(exception.lineNumber()) + .arg(exception.columnNumber()); + std::cerr << errorString.toLocal8Bit().data() << std::endl; + return QXmlDefaultHandler::fatalError(exception); +} diff -r c1ea7af931e7 -r 97fd6148fb8e data/fileio/SparqlRelatedMediaReader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/SparqlRelatedMediaReader.h Tue Nov 13 10:07:49 2007 +0000 @@ -0,0 +1,54 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* Sound Access + EASAIER client application. + Silogic 2007. Laure Bajard. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _SPARQL_RELATED_MEDIA_READER_H_ +#define _SPARQL_RELATED_MEDIA_READER_H_ + +#include + +class SparqlRelatedMediaReader +{ +public: + SparqlRelatedMediaReader(std::list *relMediaList); + virtual ~SparqlRelatedMediaReader(){} + + bool parse(const QString & filename); + +private: + + std::list *m_relMediaList; +}; + +class SparqlRelatedMediaHandler : public QXmlDefaultHandler +{ +public: + SparqlRelatedMediaHandler(std::list *relMediaList); + + bool startElement(const QString &namespaceURI, const QString &localName, + const QString &qName, const QXmlAttributes &attributes); + bool endElement(const QString &namespaceURI, const QString &localName, + const QString &qName); + bool characters(const QString &str); + bool error(const QXmlParseException &exception); + bool fatalError(const QXmlParseException &exception); + + +private: + + bool m_inBinding; + QString m_curBindingName; + + std::list *m_relMediaList; +}; + +#endif diff -r c1ea7af931e7 -r 97fd6148fb8e data/svdata.vcproj --- a/data/svdata.vcproj Mon Nov 12 14:50:15 2007 +0000 +++ b/data/svdata.vcproj Tue Nov 13 10:07:49 2007 +0000 @@ -310,6 +310,10 @@ > + + @@ -415,6 +419,10 @@ > + + diff -r c1ea7af931e7 -r 97fd6148fb8e sv/main/EasaierSessionManager.cpp --- a/sv/main/EasaierSessionManager.cpp Mon Nov 12 14:50:15 2007 +0000 +++ b/sv/main/EasaierSessionManager.cpp Tue Nov 13 10:07:49 2007 +0000 @@ -30,9 +30,11 @@ #include "data/fileio/ModelReader.h" #include "data/fileio/QueryConfigReader.h" #include "data/fileio/SparqlResultsReader.h" +#include "data/fileio/SparqlRelatedMediaReader.h" #include "data/model/WaveFileModel.h" #include "main/MainWindow.h" #include "widgets/QueryResultsWidget.h" +#include "widgets/RelatedMediaWidget.h" #include "base/PropertyContainer.h" #include "data/fileio/AudioFileReaderFactory.h" @@ -91,12 +93,19 @@ QString params = "&identification=" + m_fileName; - QString query = m_httpClient->getServletName() + "?theme=infoFile"+params; + //get infofile + QString query = m_httpClient->getServletName() + "?theme=infoFile" + params; QString filename = "/easaier/servlet/infoFile"; loadFile(query, filename, LoadedFile::AUDIO_SOURCE_INFO); + //get related media + + query = m_httpClient->getServletName() + "?theme=relatedMedia" + params; + filename = "/easaier/servlet/relatedMedia"; + loadFile(query, filename, LoadedFile::RELATED_MEDIA_LIST); + return true; } @@ -264,6 +273,21 @@ } break; } + case LoadedFile::RELATED_MEDIA_LIST : + { + std::list relMediaList; + SparqlRelatedMediaReader reader(&relMediaList); + read = reader.parse(filename); + importRelatedMedia(&relMediaList); + break; + } + case LoadedFile::RELATED_MEDIA : + { + read = true; + RelatedMediaWidget* relMediaWidget = MainWindow::instance()->getRelatedMediaWidget(); + relMediaWidget->addRelatedMedia(filename); + break; + } default: break; } @@ -385,6 +409,22 @@ m_currentPane = pane; } +void EasaierSessionManager::importRelatedMedia(std::list *relMediaList) +{ + QString filename; + QString query; + + std::list::iterator iter; + for (iter = relMediaList->begin(); iter != relMediaList->end(); iter++) + { + filename = *iter; + + query = m_httpClient->getServletName() + "?theme=getFile&fileName=" + filename; + + loadFile( query, filename, LoadedFile::RELATED_MEDIA); + } +} + void EasaierSessionManager::queryDatabase(const QString& themeName) { diff -r c1ea7af931e7 -r 97fd6148fb8e sv/main/EasaierSessionManager.h --- a/sv/main/EasaierSessionManager.h Mon Nov 12 14:50:15 2007 +0000 +++ b/sv/main/EasaierSessionManager.h Tue Nov 13 10:07:49 2007 +0000 @@ -45,7 +45,9 @@ MODEL = 2, // load a model in a existing layer METADATA = 3, // load the model and create an associated layer QUERY_CONFIG = 4, // config of the queries - QUERY_RESULTS = 5 // query results + QUERY_RESULTS = 5, // query results + RELATED_MEDIA_LIST = 6, // related media list + RELATED_MEDIA = 7 // related media }; inline FileType getFileType() const {return m_type;} @@ -84,6 +86,9 @@ /*import metadata info in a new layer*/ void importMetadata(const QString& filename, Pane* pane); + /*load all the related media from the list*/ + void importRelatedMedia(std::list *relMediaList); + /* load the appropriate metadata (needed by opened layers) of an audio file */ diff -r c1ea7af931e7 -r 97fd6148fb8e sv/main/MainWindow.cpp --- a/sv/main/MainWindow.cpp Mon Nov 12 14:50:15 2007 +0000 +++ b/sv/main/MainWindow.cpp Tue Nov 13 10:07:49 2007 +0000 @@ -44,6 +44,7 @@ #include "widgets/InfoWidget.h" #include "widgets/SearchWidget.h" #include "widgets/QueryResultsWidget.h" +#include "widgets/RelatedMediaWidget.h" #include "widgets/ExpandWidget.h" #include "widgets/AdvancedToolBox.h" #include "widgets/ConnectionStatus.h" @@ -271,12 +272,13 @@ m_infoWidget = new InfoWidget(); m_searchWidget = new SearchWidget(); m_resultsWidget = new QueryResultsWidget(); + m_relMediaWidget = new RelatedMediaWidget(); m_qtabwidget = new QTabWidget(); m_qtabwidget->addTab(m_searchWidget, tr("Search")); m_qtabwidget->addTab(m_resultsWidget, tr("Result")); m_qtabwidget->addTab(m_infoWidget, tr("Info")); - m_qtabwidget->addTab(new QWidget, tr("Related media")); + m_qtabwidget->addTab(m_relMediaWidget, tr("Related media")); QGridLayout *auxlayout = new QGridLayout; auxlayout->addWidget(m_paneStack, 0, 0, 1, 2); @@ -2889,6 +2891,7 @@ m_infoWidget->reset(); m_searchWidget->reset(); m_resultsWidget->reset(); + m_relMediaWidget->reset(); delete m_document; m_document = 0; @@ -5149,6 +5152,11 @@ return m_resultsWidget; } +RelatedMediaWidget *MainWindow::getRelatedMediaWidget() +{ + return m_relMediaWidget; +} + void MainWindow::newEasaierSession() { if (!checkSaveModified()) return; @@ -5369,6 +5377,18 @@ m_EasaierManager->importMetadata(filename, pane); } +void MainWindow::runExternProcess(const QString& filename) +{ + int pos = filename.lastIndexOf('/'); + QString dir = filename.left(pos); + QString name = filename.right(filename.length() - (pos + 1)); + QString program = "cmd /c start " + name; + + QProcess *openFile = new QProcess(this); + openFile->setWorkingDirectory(dir); + openFile->start(program); +} + void MainWindow::importEasaierFile(const QString& filename) { int i = m_paneStack->getPaneCount(); @@ -5411,7 +5431,10 @@ void MainWindow::audioSourceInfoAdded(AudioSourceInfoModel * info) { if (m_infoWidget) + { m_infoWidget->displayAudioSourceInfo(info); + m_relMediaWidget->reset(); + } m_qtabwidget->setCurrentIndex(Info); } diff -r c1ea7af931e7 -r 97fd6148fb8e sv/main/MainWindow.h --- a/sv/main/MainWindow.h Mon Nov 12 14:50:15 2007 +0000 +++ b/sv/main/MainWindow.h Tue Nov 13 10:07:49 2007 +0000 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "base/Command.h" #include "view/ViewManager.h" @@ -65,6 +66,7 @@ class InfoWidget; class SearchWidget; class QueryResultsWidget; +class RelatedMediaWidget; class AdvancedToolBox; class EasaierSessionManager; class QueryModel; @@ -118,6 +120,7 @@ static MainWindow *instance(); QueryResultsWidget *getQueryResultsWidget(); + RelatedMediaWidget *getRelatedMediaWidget(); bool openEasaierSessionFile(QString path); bool saveEasaierSessionFile(QString path); @@ -295,6 +298,8 @@ void importEasaierLayer(const QString& filename); void importEasaierFile(const QString& filename); + void runExternProcess(const QString& filename); + void connectionSettings(); void styleSetting(); @@ -495,6 +500,7 @@ InfoWidget *m_infoWidget; SearchWidget *m_searchWidget; QueryResultsWidget *m_resultsWidget; + RelatedMediaWidget *m_relMediaWidget; QTabWidget *m_qtabwidget; diff -r c1ea7af931e7 -r 97fd6148fb8e widgets/RelatedMediaWidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgets/RelatedMediaWidget.cpp Tue Nov 13 10:07:49 2007 +0000 @@ -0,0 +1,65 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* Sound Access + EASAIER client application. + Silogic 2007. Laure Bajard. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information . +*/ + +#include "RelatedMediaWidget.h" + +#include +#include +#include + +#include + +#include "sv/main/MainWindow.h" + +RelatedMediaWidget::RelatedMediaWidget() : QWidget() , + m_nbRelMedia(0), + m_painter(0) +{ + m_relMediaLayout = new QGridLayout; + + QWidget *mediaWidget = new QWidget; + mediaWidget->setLayout(m_relMediaLayout); + + QScrollArea * scrollArea = new QScrollArea; + scrollArea->setWidget(mediaWidget); + scrollArea->setWidgetResizable(true); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(scrollArea); + + setLayout(mainLayout); +} + +RelatedMediaWidget::~RelatedMediaWidget() +{} + +void RelatedMediaWidget::reset() +{ + m_nbRelMedia = 0; + + QLayoutItem *child; + while ((child = m_relMediaLayout->takeAt(0)) != 0) { + delete child->widget(); + } +} + +void RelatedMediaWidget::addRelatedMedia(const QString &filename) +{ + QLabel *mediaLabel = new QLabel(); + mediaLabel->setText("
 "); + + connect(mediaLabel, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(runExternProcess(QString))); + + m_relMediaLayout->addWidget(mediaLabel, 0, m_nbRelMedia); + m_nbRelMedia++; +} diff -r c1ea7af931e7 -r 97fd6148fb8e widgets/RelatedMediaWidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgets/RelatedMediaWidget.h Tue Nov 13 10:07:49 2007 +0000 @@ -0,0 +1,47 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* Sound Access + EASAIER client application. + Silogic 2007. Laure Bajard. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _RELATED_MEDIA_WIDGET_H_ +#define _RELATED_MEDIA_WIDGET_H_ + +#include +#include +#include + +//#include "data/model/AudioSourceInfoModel.h" + +class RelatedMediaWidget : public QWidget { + + Q_OBJECT +public: + RelatedMediaWidget(); + virtual ~RelatedMediaWidget(); + + void reset(); + + void addRelatedMedia(const QString &filename); + +protected: + + QGridLayout *m_relMediaLayout; + + QWidget *m_mediaWidget; + + QPainter * m_painter; + + int m_nbRelMedia; + +}; + + +#endif \ No newline at end of file diff -r c1ea7af931e7 -r 97fd6148fb8e widgets/svwidgets.vcproj --- a/widgets/svwidgets.vcproj Mon Nov 12 14:50:15 2007 +0000 +++ b/widgets/svwidgets.vcproj Tue Nov 13 10:07:49 2007 +0000 @@ -298,6 +298,10 @@ > + + @@ -1168,6 +1172,32 @@ + + + + + + + + + + diff -r c1ea7af931e7 -r 97fd6148fb8e widgets/widgets.pro --- a/widgets/widgets.pro Mon Nov 12 14:50:15 2007 +0000 +++ b/widgets/widgets.pro Tue Nov 13 10:07:49 2007 +0000 @@ -57,7 +57,8 @@ ConfidenceListWidget.h \ WaitingWidget.h \ CriteriaDialog.h \ - Slider.h + Slider.h \ + RelatedMediaWidget.h SOURCES += AudioDial.cpp \ Fader.cpp \ ItemEditDialog.cpp \ @@ -100,5 +101,6 @@ ConfidenceListWidget.cpp \ WaitingWidget.cpp \ CriteriaDialog.cpp \ - Slider.hcpp + Slider.cpp \ + RelatedMediaWidget.cpp