diff options
author | Arno <am@disconnect.de> | 2015-04-08 12:54:41 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2015-04-08 12:54:41 +0200 |
commit | 8c0070a69df9337dee81d4a9d645dd9726564681 (patch) | |
tree | 03f9a525780bdf26ae880042b8e13eaed7e5f2e5 | |
parent | 2f7b2582010bac5f24c6f57ea54b89aa46df2faa (diff) | |
download | SheMov-8c0070a69df9337dee81d4a9d645dd9726564681.tar.gz SheMov-8c0070a69df9337dee81d4a9d645dd9726564681.tar.bz2 SheMov-8c0070a69df9337dee81d4a9d645dd9726564681.zip |
Implement presets for NewPicsDialog
A set of attributes can now be saved and loaded in NewPicsDialog.
-rw-r--r-- | mappingtreemodel.cpp | 72 | ||||
-rw-r--r-- | mappingtreemodel.h | 13 | ||||
-rw-r--r-- | mappingtreewidget.cpp | 4 | ||||
-rw-r--r-- | mappingtreewidget.h | 3 | ||||
-rw-r--r-- | newpicsdialog.cpp | 47 | ||||
-rw-r--r-- | newpicsdialog.h | 6 |
6 files changed, 124 insertions, 21 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp index a56f543..78e4802 100644 --- a/mappingtreemodel.cpp +++ b/mappingtreemodel.cpp @@ -204,27 +204,32 @@ bool MappingTreeModel::deleteChild(const QModelIndex &idx){ return false; } -MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{ +MappingData MappingTreeModel::mappingDataFromItem(SmTreeItem *item) const{ MappingData retval; - if(!idx.isValid()){ - return retval; - } - retval.mappingId = idx.data(MappingTreeModel::MappingIdRole).toInt(); - retval.descId = idx.data(MappingTreeModel::DescIdRole).toInt(); - retval.name = idx.data(MappingTreeModel::NameRole).toString(); - retval.parents << idx.data(MappingTreeModel::MappingIdRole).toInt(); - retval.path << idx.data(MappingTreeModel::NameRole).toString(); - QModelIndex pIdx = idx.parent(); - while(pIdx.isValid()){ - retval.parents << pIdx.data(MappingTreeModel::MappingIdRole).toInt(); - retval.path << pIdx.data(MappingTreeModel::NameRole).toString(); - pIdx = pIdx.parent(); + retval.mappingId = item->data(MappingTreeModel::MappingId).toInt(); + retval.descId = item->data(MappingTreeModel::DescId).toInt(); + retval.name = item->data(MappingTreeModel::Name).toString(); + retval.parents << item->data(MappingTreeModel::MappingId).toInt(); + retval.path << item->data(MappingTreeModel::Name).toString(); + SmTreeItem *pItem = item->parent(); + while(pItem->parent()){ + retval.parents << pItem->data(MappingTreeModel::MappingId).toInt(); + retval.path << pItem->data(MappingTreeModel::Name).toString(); + pItem = pItem->parent(); } std::reverse(retval.parents.begin(), retval.parents.end()); std::reverse(retval.path.begin(), retval.path.end()); return retval; } +MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{ + if(!idx.isValid()){ + return MappingData(); + } + SmTreeItem *item = static_cast<SmTreeItem*>(idx.internalPointer()); + return mappingDataFromItem(item); +} + void MappingTreeModel::populate(){ if(mType == -1){ return; @@ -371,7 +376,9 @@ int MappingTreeModel::lowerBound(SmTreeItem *item, const QVariant &value, int co return item->childCount(); } -MappingTreeResultModel::MappingTreeResultModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { } +MappingTreeResultModel::MappingTreeResultModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { + mSourceModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); +} Qt::ItemFlags MappingTreeResultModel::flags(const QModelIndex &index) const { Q_UNUSED(index); @@ -421,8 +428,14 @@ bool MappingTreeResultModel::setData(const QModelIndex &index, const QVariant &v void MappingTreeResultModel::addItem(const MappingData &data){ QList<int> pPath = data.parents; + + if(!mCurrentData.contains(data)){ + mCurrentData << data; + } + QList<int> curPath; std::reverse(pPath.begin(), pPath.end()); + MappingTreeModel *mapModel = qobject_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); QModelIndex curIdx = QModelIndex(); int curId = -1; @@ -465,11 +478,13 @@ void MappingTreeResultModel::removeItem(const QModelIndex &idx){ if(!idx.isValid()){ return; } - beginResetModel(); SmTreeItem *curItem = static_cast<SmTreeItem*>(idx.internalPointer()); + MappingData rmData = mSourceModel->mappingDataFromItem(curItem); + beginResetModel(); int row = curItem->row(); SmTreeItem *parent = curItem->parent(); parent->removeChild(row); + mCurrentData.removeAll(rmData); endResetModel(); } @@ -521,6 +536,31 @@ QList<QVariant> MappingTreeResultModel::columnValuesRecursive(SmTreeItem *parent MappingData::MappingData() : mappingId(-1), descId(-1) {} +bool MappingData::operator ==(const MappingData &other){ + bool retval = ( + mappingId == other.mappingId && + descId == other.descId && + name == other.name && + parents == other.parents && + path == other.path + ); + return retval; +} + +QDataStream &operator <<(QDataStream &out, const MappingData &v){ + out << v.mappingId << v.descId << v.name << v.parents << v.path; + return out; +} + +QDataStream &operator >>(QDataStream &in, MappingData &v){ + in >> v.mappingId; + in >> v.descId; + in >> v.name; + in >> v.parents; + in >> v.path; + return in; +} + bool MappingData::isValid(){ return !(mappingId == -1 && descId == -1); } diff --git a/mappingtreemodel.h b/mappingtreemodel.h index 6b20dbc..3f3b903 100644 --- a/mappingtreemodel.h +++ b/mappingtreemodel.h @@ -10,6 +10,7 @@ #include <QSqlDatabase> #include <QSqlError> +#include <QMetaType> #include "smtreemodel.h" @@ -41,6 +42,7 @@ class MappingTreeModel : public SmTreeModel { bool renameChild(const QModelIndex &idx, const QString newName); bool deleteChild(const QModelIndex &idx); MappingData mappingDataFromIndex(QModelIndex &idx) const; + MappingData mappingDataFromItem(SmTreeItem *item) const; const QSqlError &lastError() const { return mLastError; } public slots: @@ -87,6 +89,7 @@ class MappingTreeResultModel : public SmTreeModel { virtual bool setData(const QModelIndex &index, const QVariant &value, int role); QList<QVariant> getMappings(SmTreeItem *start) const; QList<QVariant> columnValues(int column) const; + const QList<MappingData> mappingData() const { return mCurrentData; } void clearData(); public slots: @@ -95,11 +98,17 @@ class MappingTreeResultModel : public SmTreeModel { private: int hasChild(SmTreeItem *item, const QVariant &name, int column = 0) const; + MappingTreeModel *mSourceModel; QList<QVariant> columnValuesRecursive(SmTreeItem *parent, int column) const; + QList<MappingData> mCurrentData; }; +Q_DECLARE_METATYPE(MappingData) + struct MappingData { MappingData(); + bool operator==(const MappingData &other); + //QDataStream &operator<<(QDataStream &out, const MappingData &d); bool isValid(); int mappingId; int descId; @@ -108,4 +117,8 @@ struct MappingData { QStringList path; }; +QDataStream &operator<<(QDataStream &out, const MappingData &d); +QDataStream &operator>>(QDataStream &in, MappingData &v); + + #endif // MAPPINGTREEMODEL_H diff --git a/mappingtreewidget.cpp b/mappingtreewidget.cpp index 917da68..ab9b844 100644 --- a/mappingtreewidget.cpp +++ b/mappingtreewidget.cpp @@ -348,6 +348,10 @@ void MappingEditWidget::setMappings(const QList<MappingData> &mappings){ mMappingResult->expandAll(); } +void MappingEditWidget::expandAllResults(){ + mMappingResult->expandAll(); +} + void MappingEditWidget::resultMappingChanged(const QModelIndex &cur, const QModelIndex &prev){ Q_UNUSED(prev); if(!cur.isValid()){ diff --git a/mappingtreewidget.h b/mappingtreewidget.h index 2eb1331..b1647b5 100644 --- a/mappingtreewidget.h +++ b/mappingtreewidget.h @@ -87,12 +87,13 @@ class MappingEditWidget : public QWidget { Q_OBJECT public: explicit MappingEditWidget(QWidget *parent = 0); - const MappingTreeResultModel *model() const { return mResultModel; } + MappingTreeResultModel *model() const { return mResultModel; } public slots: void addMapping(); void removeMapping(); void setMappings(const QList<MappingData> &mappings); + void expandAllResults(); private slots: void resultMappingChanged(const QModelIndex &cur, const QModelIndex &prev); diff --git a/newpicsdialog.cpp b/newpicsdialog.cpp index 44277a3..fbadb53 100644 --- a/newpicsdialog.cpp +++ b/newpicsdialog.cpp @@ -16,6 +16,8 @@ #include <QApplication> #include <QMoveEvent> #include <QLabel> +#include <QMenu> +#include <QAction> #include "newpicsdialog.h" #include "smtreeitem.h" @@ -26,6 +28,8 @@ #include "smglobals.h" NewPicsDialog::NewPicsDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { + qRegisterMetaType<MappingData>("MappingData"); + qRegisterMetaTypeStreamOperators<MappingData>("MappingData"); setupDlg(); } @@ -60,15 +64,28 @@ void NewPicsDialog::setupDlg(){ //mapping widget mMappingEditWidget = new MappingEditWidget; + //presets + mPresetMenu = new QMenu(this); + mPresets = new QPushButton(tr("Presets")); + QAction *posA = new QAction(tr("Save pos"), this); + connect(posA, SIGNAL(triggered()), this, SLOT(savePos())); + mPresetMenu->addAction(posA); + mPresetMenu->addSeparator(); + QAction *loadPresetA = new QAction(tr("Load preset"), this); + connect(loadPresetA, SIGNAL(triggered()), this, SLOT(loadPreset())); + mPresetMenu->addAction(loadPresetA); + QAction *savePresetA = new QAction(tr("Save preset"), this); + connect(savePresetA, SIGNAL(triggered()), this, SLOT(savePreset())); + mPresetMenu->addAction(savePresetA); + mPresets->setMenu(mPresetMenu); + //dialog buttons - mSavePos = new QPushButton(tr("Save Pos")); - connect(mSavePos, SIGNAL(clicked()), this, SLOT(savePos())); mOk = new QPushButton(tr("Ok")); connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); mCancel = new QPushButton(tr("Cancel")); connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); QHBoxLayout *dlgButtonLayout = new QHBoxLayout; - dlgButtonLayout->addWidget(mSavePos); + dlgButtonLayout->addWidget(mPresets); dlgButtonLayout->addWidget(mPosL); dlgButtonLayout->addStretch(); dlgButtonLayout->addWidget(mCancel); @@ -89,6 +106,7 @@ void NewPicsDialog::setupDlg(){ QSettings s; QPoint p = s.value("ui/newpicsdialogpos", QPoint(0,0)).toPoint(); move(p); + loadPreset(); } void NewPicsDialog::selectFiles(){ @@ -205,6 +223,29 @@ void NewPicsDialog::savePos(){ s.setValue("ui/newpicsdialogpos", curPos); } +void NewPicsDialog::loadPreset() const { + QSettings s; + QByteArray val = s.value("ui/newpicsdialogpreset").toByteArray(); + QDataStream out(&val, QIODevice::ReadOnly); + MappingData md; + while(!out.atEnd()){ + out >> md; + mMappingEditWidget->model()->addItem(md); + } + mMappingEditWidget->expandAllResults(); +} + +void NewPicsDialog::savePreset(){ + const QList<MappingData> mappingData = mMappingEditWidget->model()->mappingData(); + QByteArray saveVal; + QDataStream in(&saveVal, QIODevice::WriteOnly); + foreach(MappingData md, mappingData){ + in << md; + } + QSettings s; + s.setValue("ui/newpicsdialogpreset", saveVal); +} + void NewPicsDialog::moveEvent(QMoveEvent *e){ const QPoint pos = e->pos(); const QString posStr = QString("(%1x%2)").arg(pos.x()).arg(pos.y()); diff --git a/newpicsdialog.h b/newpicsdialog.h index 3da2d4b..90873f4 100644 --- a/newpicsdialog.h +++ b/newpicsdialog.h @@ -16,6 +16,7 @@ class QTabWidget; class QMoveEvent; class QLabel; +class QMenu; class SmTreeView; class NewPicFilesModel; class QSortFilterProxyModel; @@ -39,6 +40,8 @@ class NewPicsDialog : public QDialog { private slots: void savePos(); + void loadPreset() const; + void savePreset(); protected: virtual void moveEvent(QMoveEvent *e); @@ -51,13 +54,14 @@ class NewPicsDialog : public QDialog { SmTreeView *mFilesV; NewPicFilesModel *mFilesModel; QSortFilterProxyModel *mFilesProxy; - QPushButton *mSavePos; + QPushButton *mPresets; QPushButton *mAddFiles; QPushButton *mRemoveFiles; QPushButton *mOk; QPushButton *mCancel; MappingTreeWidget *mMappingTreeWidget; QLabel *mPosL; + QMenu *mPresetMenu; QSqlDatabase mDb; QPoint mPos; }; |