Mercurial > retraceit
diff src/metadataview.cpp @ 2:97d2c8869c39
First prototype implementation of table view and player
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 23 Mar 2015 16:34:42 +0100 |
parents | |
children | 248d5d1cdb38 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/metadataview.cpp Mon Mar 23 16:34:42 2015 +0100 @@ -0,0 +1,86 @@ +#include "metadataview.h" +#include "qxtcsvmodel.h" + +#include <QTextCodec> +#include <QTableView> +#include <QSortFilterProxyModel> +#include <QVBoxLayout> +#include <QLabel> +#include <QDebug> +#include <QHeaderView> +#include <QModelIndex> +#include <QItemSelectionModel> + +MetaDataView::MetaDataView(QWidget *parent, Qt::WindowFlags f) : + QWidget(parent, f) { + /* Create models */ + mSortModel = new QSortFilterProxyModel; + mCSVModel = new QxtCsvModel; + setupGUI(); + + connect(mView->selectionModel(), &QItemSelectionModel::selectionChanged, + this, &MetaDataView::viewSelectionChanged); + return; +} + +void MetaDataView::setupGUI() { + QVBoxLayout *baseLayout = new QVBoxLayout; + mView = new QTableView; + mView->setModel(mSortModel); + + mView->horizontalHeader()->setStretchLastSection(true); + mView->resizeColumnsToContents(); +// mView->setColumnWidth(0, 60); + mView->setSelectionBehavior(QAbstractItemView::SelectRows); + mView->setSelectionMode(QAbstractItemView::SingleSelection); + mView->setSortingEnabled(true); + mView->setEditTriggers(QAbstractItemView::NoEditTriggers); + + baseLayout->addWidget(mView); + + setLayout(baseLayout); +} + +QString MetaDataView::parseMetaData(const QString& filePath) { + mCSVModel->setSource(filePath, true, ';', QTextCodec::codecForName("UTF8")); + if (!mCSVModel->rowCount()) { + return tr("Failed to parse file: '%1'").arg(filePath); + } + + mSortModel->setSourceModel(mCSVModel); + qDebug() << "Parsed: " << mCSVModel->rowCount() << " rows."; + return QString(); +} + +void MetaDataView::viewSelectionChanged(const QItemSelection& selected, + const QItemSelection& deselected) { + /* One row selected */ + Q_ASSERT(selected.indexes().count() == mCSVModel->columnCount()); + const QModelIndex idx = selected.indexes()[0]; + emit selectionChanged(idx.data().toString(), QString()); + qDebug() << "Selection changed: " << idx.data(); +} + +void MetaDataView::selectNextRow() { + QItemSelectionModel *selection = mView->selectionModel(); + QModelIndexList selected = selection->selectedIndexes(); + int row = 0, + col = 0; + if (selected.isEmpty()) { + qDebug() << "Selection empty. Start at row 0"; + if (!mSortModel->hasIndex(row, col)) { + qDebug() << "Empty model. Failed to advance."; + return; + } + } else { + QModelIndex old = selection->selectedIndexes().first(); + if (!mSortModel->hasIndex(old.row() + 1, old.column())) { + qDebug() << "No more rows."; + return; + } + row = old.row() + 1; + col = old.column(); + } + QModelIndex newIdx = mSortModel->index(row, col); + selection->select(newIdx, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); +}