• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

importfilemodel.h

Go to the documentation of this file.
00001 #ifndef TEXTFILEMODEL_H
00002 #define TEXTFILEMODEL_H
00003 
00004 #include <QAbstractTableModel>
00005 #include <QScopedPointer>
00006 #include <QFile>
00007 #include <QRegExp>
00008 #include <QVector>
00009 #include <QTextStream>
00010 
00011 #include "tagcontainer.h"
00012 
00013 
00020 class ImportFileModel : public QAbstractTableModel
00021 {
00022     Q_OBJECT
00023 public:
00024     ImportFileModel(QObject *parent = 0);
00025     bool setFile(const QString &path);
00026     int rowCount(const QModelIndex & parent = QModelIndex()) const;
00027     int columnCount( const QModelIndex & parent = QModelIndex()) const;
00028     QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
00029     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
00030     bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex & parent);
00031     Qt::DropActions supportedDropActions() const;
00032     Qt::ItemFlags flags(const QModelIndex &index) const;
00033     QStringList mimeTypes() const;
00034     void setSkipLinesCount(int newSkipLinesCount);
00035     void setDelimiter(QRegExp newDelimiter);
00036     void setMergeOnSplits(QVector<int> &mergeOnSplits);
00037     void setRowFilter(const QRegExp &regExp);
00038     void unloadFile();
00039 
00040 public slots:
00041     void setLimitedPreview(bool setLimitedPreview);
00042     void slot_syncFileParserWithTagContainer(TagContainer::GeneralTag tag, QString attrib);
00043 
00044 private slots:
00045     void loadFile();
00046 
00047 signals:
00048     void signal_maxColumns_changed(int oldValue, int newvalue);
00049     void signal_itemDropped(int column, TagContainer::ColumnTag role, QVariant data);
00050 
00051 private:
00052     QScopedPointer<QFile> file;
00053     QScopedPointer<QTextStream> stream;
00054 
00055     QRegExp delimiter;
00056     int skipLines;
00057     QVector<int> mergeOnSplits;
00058     QRegExp rowFilter;
00059 
00060     int maxColumns;
00061     bool limitedPreview;
00062 
00063     QVector<QStringList> preview; //(int, QList) = (rownumber, columnitems)
00064 };
00065 
00066 class StrategySettings; //fwd decl
00067 
00075 class Strategy
00076 {
00077 public:
00078     enum StrategyType{
00079         StrategyNone,
00080         StrategyTimestamp,
00081         StrategySensorData,
00082         StrategySensorSqlData
00083     };
00084     enum StrategyFormatTypes {
00085         FormatTimestamp,
00086         FormatOffset,
00087         FormatFactor,
00088         FormatUnitIdFrom,
00089         FormatTreeId
00090     };
00091 
00092     Strategy(StrategySettings &settings);
00093     virtual const QVariant process(const QVariant &input) const;
00094     virtual void reconfigure();
00095     virtual Strategy::StrategyType name() const;
00096 
00097 protected:
00098     QVariant &setting(const Strategy::StrategyFormatTypes &fType) const;
00099 
00100 private:
00101     StrategySettings &m_settings;
00102 };
00103 
00107 class StrategySettings : public QHash<Strategy::StrategyFormatTypes, QVariant> {};
00108 
00109 #include "simpleparser.h"
00110 #include "unitconvertor.h"
00111 
00119 class TimestampStrategy : public Strategy
00120 {
00121 public:
00122     TimestampStrategy(StrategySettings &settings);
00123     const QVariant process(const QVariant &input) const;
00124     void reconfigure();
00125     Strategy::StrategyType name() const;
00126 
00127 private:
00128     QString format;
00129     SimpleParser parser;
00130 };
00131 
00136 class DataStrategy : public Strategy
00137 {
00138 public:
00139     DataStrategy(StrategySettings &settings);
00140     const QVariant process(const QVariant &input) const;
00141     void reconfigure();
00142     Strategy::StrategyType name() const;
00143 
00144 protected:
00145     UnitConvertor &unitConvertor();
00146 
00147 private:
00148     UnitConvertor unitConvert;
00149 };
00150 
00155 class SqlDataStrategy : public DataStrategy
00156 {
00157 public:
00158     SqlDataStrategy(StrategySettings &settings);
00159     void reconfigure();
00160     Strategy::StrategyType name() const;
00161 };
00162  // end of group column_manipulation_strategies
00164 
00170 class Processor
00171 {
00172 public:
00173     Processor();
00174     Processor(const Processor &original);
00175     ~Processor();
00176     const QVariant operator()(const QVariant &input) const ;
00177     void setStrategy(const Strategy::StrategyType &type);
00178     void setStrategyFormat(const QVariant & data, const Strategy::StrategyFormatTypes & fType);
00179     const Strategy::StrategyType currentStrategy() const;
00180 
00181 private:
00182     Strategy *strategy;
00183     StrategySettings m_settings;
00184 };
00185 
00186 #include <QVector>
00187 
00191 class ImportFileProcessorModel : public ImportFileModel
00192 {
00193     Q_OBJECT
00194 public:
00195     ImportFileProcessorModel (QObject *parent = 0);
00196     QVariant data(const QModelIndex & index, int role = Qt::DisplayRole ) const;
00197 
00198 public slots:
00199     void slot_syncProcessorWithTagContainer(int column, TagContainer::ColumnTag tag, QVariant data);
00200     void slot_maxColumns_changed(int oldValue, int newValue);
00201 
00202 private:
00203     void processorCountAdjust(int &column);
00204 
00205 private:
00206     QVector<Processor> processors;
00207 };
00208 
00209 #include <QFrame>
00210 
00211 class QComboBox;
00212 class QVBoxLayout;
00213 class QLineEdit;
00214 class QLabel;
00215 class UnitComboBox;
00216 
00220 class ImportFileHeaderSection : public QFrame
00221 {
00222     Q_OBJECT
00223 public:
00224     ImportFileHeaderSection(int column, QWidget *parent = 0);
00225     void adjustContent(const TagContainer::ColumnTag &role, const QVariant &data);
00226 
00227 private slots:
00228     void slot_dataUnitTypeAssigned(int index);
00229     void slot_dataTypeAssigned(int index);
00230     void slot_timestampFormatChanged(QString data);
00231 
00232 signals:
00233     void signal_userInteraction(int logicalIndex, TagContainer::ColumnTag tag, QVariant change);
00234 
00235 private:
00236     void setupConnections();
00237     void setupUnitConversionLabel();
00238 
00239 private:
00240     int logicalIndex;
00241 
00242     QComboBox *dataTypeComboBox;
00243     QLineEdit *timestampFormatEditor;
00244     UnitComboBox *unitComboBox;
00245     QLabel *unitConversionLabel;
00246     QVBoxLayout *dataTypeLayout;
00247     QVBoxLayout *mainLayout;
00248 
00249     QLabel *sectionName;
00250     QString defaultSectionName;
00251 
00252 };
00253 
00254 #include <QHeaderView>
00255 #include <QHash>
00256 #include <QPointer>
00257 
00258 class ImportFileHeaderSection;
00259 
00263 class ImportFileHeader : public QHeaderView
00264 {
00265     Q_OBJECT
00266 public:
00267     ImportFileHeader(QWidget *parent = 0);
00268     void setModel(ImportFileProcessorModel *model);
00269     ImportFileProcessorModel *model() const;
00270     void addSection(const int column);
00271     void deleteSection(const int column);
00272     bool sectionExists(const int column) const;
00273     QWidget *const sectionAt(const int column);
00274     int count() const;
00275     QSize sectionSizeFromContents(int logicalIndex) const;
00276 
00277 public slots:
00278     void slot_syncSectionWithTagContainer(int section, TagContainer::ColumnTag columnTag, QVariant data);
00279 
00280 private slots:
00281     void sectionCountAdjust(int oldCount, int newCount);
00282     void slot_sectionUserInteraction(int column, TagContainer::ColumnTag role, QVariant data);
00283 
00284 protected:
00285     void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
00286 
00287 signals:
00288     void signal_userInteraction(int column, TagContainer::ColumnTag role, QVariant data);
00289 
00290 private:
00291     QHash< int, QPointer<ImportFileHeaderSection> > sections;
00292 };
00293 
00294 #include <QTableView>
00295 
00299 class ImportFileView : public QTableView
00300 {
00301     Q_OBJECT
00302 public:
00303     ImportFileView(QWidget *parent = 0, TagContainer *tagContainer = 0);
00304     void setModel(ImportFileProcessorModel *model);
00305     ImportFileProcessorModel *model();
00306     ImportFileHeader *horizontalHeader();
00307     TagContainer *tagContainer();
00308     void dragMoveEvent(QDragMoveEvent *event);
00309     void dragLeaveEvent(QDragLeaveEvent *event);
00310     QMenu *contextMenu();
00311     void setupAsPreviewer(QString &spCode);
00312 
00313 private:
00314     void contextMenuEvent(QContextMenuEvent *event);
00315     void setupConnections();
00316 
00317 private:
00318     QMenu *menu;
00319     TagContainer *m_tagContainer;
00320 };
00321 
00322 #endif // TEXTFILEMODEL_H

Generated on Tue Aug 24 2010 15:58:55 for Smartlet by  doxygen 1.7.1