lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2006 Chris Cannam. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #ifndef _SV_FILE_READER_H_ lbajardsilogic@0: #define _SV_FILE_READER_H_ lbajardsilogic@0: lbajardsilogic@0: #include "layer/LayerFactory.h" lbajardsilogic@0: #include "transform/Transform.h" lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: class Pane; lbajardsilogic@0: class Model; lbajardsilogic@0: class Document; lbajardsilogic@0: class PlayParameters; lbajardsilogic@0: lbajardsilogic@0: class SVFileReaderPaneCallback lbajardsilogic@0: { lbajardsilogic@0: public: lbajardsilogic@0: virtual Pane *addPane() = 0; lbajardsilogic@0: virtual void setWindowSize(int width, int height) = 0; lbajardsilogic@0: virtual void addSelection(int start, int end) = 0; lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: class SVFileReader : public QXmlDefaultHandler lbajardsilogic@0: { lbajardsilogic@0: public: lbajardsilogic@0: SVFileReader(Document *document, lbajardsilogic@0: SVFileReaderPaneCallback &callback); lbajardsilogic@0: virtual ~SVFileReader(); lbajardsilogic@0: lbajardsilogic@0: void parse(const QString &xmlData); lbajardsilogic@0: void parse(QXmlInputSource &source); lbajardsilogic@0: lbajardsilogic@0: bool isOK(); lbajardsilogic@0: QString getErrorString() const { return m_errorString; } lbajardsilogic@0: lbajardsilogic@0: // For loading a single layer onto an existing pane lbajardsilogic@0: void setCurrentPane(Pane *pane) { m_currentPane = pane; } lbajardsilogic@0: lbajardsilogic@0: virtual bool startElement(const QString &namespaceURI, lbajardsilogic@0: const QString &localName, lbajardsilogic@0: const QString &qName, lbajardsilogic@0: const QXmlAttributes& atts); lbajardsilogic@0: lbajardsilogic@0: virtual bool characters(const QString &); lbajardsilogic@0: lbajardsilogic@0: virtual bool endElement(const QString &namespaceURI, lbajardsilogic@0: const QString &localName, lbajardsilogic@0: const QString &qName); lbajardsilogic@0: lbajardsilogic@0: bool error(const QXmlParseException &exception); lbajardsilogic@0: bool fatalError(const QXmlParseException &exception); lbajardsilogic@0: lbajardsilogic@0: protected: lbajardsilogic@0: bool readWindow(const QXmlAttributes &); lbajardsilogic@0: bool readModel(const QXmlAttributes &); lbajardsilogic@0: bool readView(const QXmlAttributes &); lbajardsilogic@0: bool readLayer(const QXmlAttributes &); lbajardsilogic@0: bool readDatasetStart(const QXmlAttributes &); lbajardsilogic@0: bool addBinToDataset(const QXmlAttributes &); lbajardsilogic@0: bool addPointToDataset(const QXmlAttributes &); lbajardsilogic@0: bool addRowToDataset(const QXmlAttributes &); lbajardsilogic@0: bool readRowData(const QString &); lbajardsilogic@0: bool readDerivation(const QXmlAttributes &); lbajardsilogic@0: bool readPlayParameters(const QXmlAttributes &); lbajardsilogic@0: bool readPlugin(const QXmlAttributes &); lbajardsilogic@0: bool readSelection(const QXmlAttributes &); lbajardsilogic@0: void addUnaddedModels(); lbajardsilogic@0: lbajardsilogic@0: Document *m_document; lbajardsilogic@0: SVFileReaderPaneCallback &m_paneCallback; lbajardsilogic@0: Pane *m_currentPane; lbajardsilogic@0: std::map m_layers; lbajardsilogic@0: std::map m_models; lbajardsilogic@0: std::set m_addedModels; lbajardsilogic@0: std::map m_awaitingDatasets; // map dataset id -> model id lbajardsilogic@0: Model *m_currentDataset; lbajardsilogic@0: Model *m_currentDerivedModel; lbajardsilogic@0: PlayParameters *m_currentPlayParameters; lbajardsilogic@0: QString m_currentTransform; lbajardsilogic@0: int m_currentTransformChannel; lbajardsilogic@0: QString m_currentTransformConfiguration; lbajardsilogic@0: QString m_datasetSeparator; lbajardsilogic@0: bool m_inRow; lbajardsilogic@0: bool m_inView; lbajardsilogic@0: bool m_inData; lbajardsilogic@0: bool m_inSelections; lbajardsilogic@0: int m_rowNumber; lbajardsilogic@0: QString m_errorString; lbajardsilogic@0: bool m_ok; lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: #endif