Skip to content
Snippets Groups Projects
Commit 7dd1cf4a authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

First drag/drop attempts in FitParameterAbsModel

parent 21707625
No related branches found
No related tags found
No related merge requests found
...@@ -20,8 +20,12 @@ ...@@ -20,8 +20,12 @@
#include "SessionModel.h" #include "SessionModel.h"
#include "JobModel.h" #include "JobModel.h"
#include <QColor> #include <QColor>
#include <QMimeData>
#include <QDebug> #include <QDebug>
const QString FitParameterAbsModel::MIME_TYPE = "application/org.bornagainproject.fittinglink";
FitParameterAbsModel::FitParameterAbsModel(FitParameterContainerItem *fitParContainer, QObject *parent) FitParameterAbsModel::FitParameterAbsModel(FitParameterContainerItem *fitParContainer, QObject *parent)
: QAbstractItemModel(parent) : QAbstractItemModel(parent)
, m_root_item(fitParContainer) , m_root_item(fitParContainer)
...@@ -50,7 +54,15 @@ Qt::ItemFlags FitParameterAbsModel::flags(const QModelIndex &index) const ...@@ -50,7 +54,15 @@ Qt::ItemFlags FitParameterAbsModel::flags(const QModelIndex &index) const
if(SessionItem *item = itemForIndex(index)) { if(SessionItem *item = itemForIndex(index)) {
// if(item->isEnabled()) returnVal |= Qt::ItemIsEnabled; // if(item->isEnabled()) returnVal |= Qt::ItemIsEnabled;
if(item->isEditable()) returnVal |= Qt::ItemIsEditable; if(item->isEditable()) returnVal |= Qt::ItemIsEditable;
if(item->parent()->modelType() == Constants::FitParameterLinkType && index.column() == 0) {
returnVal |= Qt::ItemIsDragEnabled;
}
if(item->modelType() == Constants::FitParameterType) {
returnVal |= Qt::ItemIsDropEnabled;
}
} }
return returnVal; return returnVal;
// Qt::ItemFlags returnVal = Qt::ItemIsEnabled | Qt::ItemIsSelectable; // Qt::ItemFlags returnVal = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
...@@ -196,6 +208,65 @@ bool FitParameterAbsModel::setData(const QModelIndex &index, const QVariant &val ...@@ -196,6 +208,65 @@ bool FitParameterAbsModel::setData(const QModelIndex &index, const QVariant &val
return false; return false;
} }
QStringList FitParameterAbsModel::mimeTypes() const
{
QStringList types;
types << FitParameterAbsModel::MIME_TYPE;
return types;
}
QMimeData *FitParameterAbsModel::mimeData(const QModelIndexList &indexes) const
{
qDebug() << "FitParameterAbsModel::mimeData" << indexes;
QMimeData *mimeData = new QMimeData();
QModelIndex index = indexes.first();
if (index.isValid()) {
if(SessionItem *item = itemForIndex(index)) {
QString path = item->value().toString();
mimeData->setData(MIME_TYPE, path.toLatin1());
qDebug() << " FitParameterAbsModel::mimeData" << path;
}
// QString path = getPathFromIndex(index);
// path = path.append("#%1").arg(itemFromIndex(index.sibling(index.row(), 1))
// ->data(Qt::EditRole).toDouble());
}
return mimeData;
}
bool FitParameterAbsModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
{
Q_UNUSED(action);
Q_UNUSED(row);
Q_UNUSED(parent);
// if (column > 0)
// return false;
QString link = QString::fromLatin1(data->data(MIME_TYPE)).split("#")[0];
qDebug() << "FitParameterAbsModel::canDropMimeData" << "row:" << row << "column:" << column << "parent:" << parent << link;
if(parent.isValid()) {
qDebug() << "!!! true";
return true;
}
return false;
// QString link = QString::fromLatin1(data->data(ObsoleteFitParameterWidget::MIME_TYPE)).split("#")[0];
// QModelIndex cur = itemForLink(link);
// return !cur.isValid();
}
bool FitParameterAbsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
{
// if (action == Qt::IgnoreAction) return true;
// if (column > 0) return true;
qDebug() << "FitParameterAbsModel::dropMimeData row:" << row << "column:" << column << "parent:" << parent << "mime:" << QString::fromLatin1(data->data(MIME_TYPE));
return true;
}
QVariant FitParameterAbsModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant FitParameterAbsModel::headerData(int section, Qt::Orientation orientation, int role) const
{ {
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
......
...@@ -32,20 +32,33 @@ class BA_CORE_API_ FitParameterAbsModel : public QAbstractItemModel ...@@ -32,20 +32,33 @@ class BA_CORE_API_ FitParameterAbsModel : public QAbstractItemModel
Q_OBJECT Q_OBJECT
public: public:
static const QString MIME_TYPE;
explicit FitParameterAbsModel(FitParameterContainerItem *fitParContainer, QObject *parent = 0); explicit FitParameterAbsModel(FitParameterContainerItem *fitParContainer, QObject *parent = 0);
enum EColumn {PAR_NAME, PAR_TYPE, PAR_VALUE, PAR_MIN, PAR_MAX, MAX_COLUMNS}; // NEW column usage enum EColumn {PAR_NAME, PAR_TYPE, PAR_VALUE, PAR_MIN, PAR_MAX, MAX_COLUMNS}; // NEW column usage
Qt::ItemFlags flags(const QModelIndex & index) const Q_DECL_OVERRIDE; Qt::ItemFlags flags(const QModelIndex & index) const Q_DECL_OVERRIDE;
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const; QModelIndex index(int row, int column, const QModelIndex &parent) const;
virtual QModelIndex parent(const QModelIndex &child) const; QModelIndex parent(const QModelIndex &child) const;
virtual int rowCount(const QModelIndex &parent) const; int rowCount(const QModelIndex &parent) const;
virtual int columnCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool setData(const QModelIndex &index, const QVariant &value, int role) Q_DECL_OVERRIDE; bool setData(const QModelIndex &index, const QVariant &value, int role) Q_DECL_OVERRIDE;
QStringList mimeTypes() const Q_DECL_OVERRIDE;
// Qt::DropActions supportedDragActions() const;
// Qt::DropActions supportedDropActions() const;
QMimeData *mimeData(const QModelIndexList &indexes) const;
bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column,
const QModelIndex &parent) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
QModelIndex indexOfItem(SessionItem *item) const; QModelIndex indexOfItem(SessionItem *item) const;
SessionItem *itemForIndex(const QModelIndex &index) const; SessionItem *itemForIndex(const QModelIndex &index) const;
...@@ -62,5 +75,15 @@ private: ...@@ -62,5 +75,15 @@ private:
QMap<int, QString> m_columnNames; QMap<int, QString> m_columnNames;
}; };
//inline Qt::DropActions FitParameterAbsModel::supportedDragActions() const
//{
// return Qt::MoveAction;
//}
//inline Qt::DropActions FitParameterAbsModel::supportedDropActions() const
//{
// return Qt::MoveAction;
//}
#endif #endif
...@@ -53,13 +53,16 @@ FitParametersWidget::FitParametersWidget(QWidget *parent) ...@@ -53,13 +53,16 @@ FitParametersWidget::FitParametersWidget(QWidget *parent)
setLayout(layout); setLayout(layout);
init_actions(); init_actions();
m_treeView->setSelectionMode(QAbstractItemView::ExtendedSelection); // m_treeView->setSelectionMode(QAbstractItemView::SingleSelection);
m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows); m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
m_treeView->setContextMenuPolicy(Qt::CustomContextMenu); m_treeView->setContextMenuPolicy(Qt::CustomContextMenu);
m_treeView->setItemDelegate(m_delegate); m_treeView->setItemDelegate(m_delegate);
connect(m_treeView, SIGNAL(customContextMenuRequested(const QPoint &)), connect(m_treeView, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(onFitParameterTreeContextMenu(const QPoint &))); this, SLOT(onFitParameterTreeContextMenu(const QPoint &)));
m_treeView->setDragEnabled(true);
m_treeView->setDragDropMode(QAbstractItemView::DragDrop);
m_treeView->installEventFilter(m_keyboardFilter); m_treeView->installEventFilter(m_keyboardFilter);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment