summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2015-04-08 12:54:41 +0200
committerArno <am@disconnect.de>2015-04-08 12:54:41 +0200
commit8c0070a69df9337dee81d4a9d645dd9726564681 (patch)
tree03f9a525780bdf26ae880042b8e13eaed7e5f2e5
parent2f7b2582010bac5f24c6f57ea54b89aa46df2faa (diff)
downloadSheMov-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.cpp72
-rw-r--r--mappingtreemodel.h13
-rw-r--r--mappingtreewidget.cpp4
-rw-r--r--mappingtreewidget.h3
-rw-r--r--newpicsdialog.cpp47
-rw-r--r--newpicsdialog.h6
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;
};