Skip to content

Commit

Permalink
basics of drag and drop
Browse files Browse the repository at this point in the history
  • Loading branch information
LafCorentin committed Aug 5, 2020
1 parent 21c58f0 commit 92e0adc
Show file tree
Hide file tree
Showing 4 changed files with 400 additions and 79 deletions.
97 changes: 90 additions & 7 deletions src/plugins/editing/MappingView/src/mappingviewwidget.cpp
Expand Up @@ -22,16 +22,19 @@ along with this program. If not, see <https://gnu.org/licenses>.
//==============================================================================

#include "borderedwidget.h"
#include "interfaces.h"
#include "mappingviewwidget.h"
#include "zincwidget.h"
#include "toolbarwidget.h"
#include "zincwidget.h"

//==============================================================================

#include <QMenu>
#include <QApplication>
#include <QScreen>
#include <QDesktopServices>
#include <QDragEnterEvent>
#include <QLayout>
#include <QMenu>
#include <QScreen>

//==============================================================================

Expand Down Expand Up @@ -89,6 +92,7 @@ MappingViewWidget::MappingViewWidget(QWidget *pParent) :
//create and add the variable tree:

mVariableTree = new QTreeView(this);
mVariableTree->setDragEnabled(true);
mHorizontalSplitterWidget->addWidget(mVariableTree);

// Keep track of our movement
Expand All @@ -101,14 +105,14 @@ MappingViewWidget::MappingViewWidget(QWidget *pParent) :

// add a Zinc widget

mMappingViewZincWidget = new MappingViewZincWidget(this, mMeshFileName);
mZincWidget = new MappingViewZincWidget(this, mMeshFileName);

connect(mMappingViewZincWidget, &MappingViewZincWidget::nodeSelection,
connect(mZincWidget, &MappingViewZincWidget::nodeSelection,
this, &MappingViewWidget::nodeSelection);
connect(mDelayWidget, &QwtWheel::valueChanged,
mMappingViewZincWidget, &MappingViewZincWidget::setNodeSizes );
mZincWidget, &MappingViewZincWidget::setNodeSizes );

mHorizontalSplitterWidget->addWidget(mMappingViewZincWidget);
mHorizontalSplitterWidget->addWidget(mZincWidget);

//create vertical splitterwidget

Expand Down Expand Up @@ -141,6 +145,9 @@ MappingViewWidget::MappingViewWidget(QWidget *pParent) :

layout->addWidget(mVerticalSplitterWidget);

// Allow for things to be dropped on us

setAcceptDrops(true);
}

//==============================================================================
Expand Down Expand Up @@ -255,6 +262,82 @@ void MappingViewWidget::fileRenamed(const QString &pOldFileName, const QString &

//==============================================================================

void MappingViewWidget::dragEnterEvent(QDragEnterEvent *pEvent)
{
// Accept the proposed action for the event, but only if it refers to one or
// several data store files

bool acceptEvent = false;

for (const auto &fileName : Core::droppedFileNames(pEvent)) {
for (auto fileTypeInterface : Core::dataStoreFileTypeInterfaces()) {
if (fileTypeInterface->isFile(fileName)) {
mFileTypeInterfaces.insert(fileName, fileTypeInterface);

acceptEvent = true;

break;
}
}

//TODO
if (fileName.contains(".exelem")||fileName.contains(".exnode")||fileName.contains(".exfile")) {
acceptEvent = true;
}
}

if (acceptEvent) {
pEvent->acceptProposedAction();
} else {
pEvent->ignore();
}
}

//==============================================================================

void MappingViewWidget::dragMoveEvent(QDragMoveEvent *pEvent)
{
// Accept the proposed action for the event

pEvent->acceptProposedAction();
}

//==============================================================================

void MappingViewWidget::dropEvent(QDropEvent *pEvent)
{
// Import/open the one or several files

for (const auto &fileName : Core::droppedFileNames(pEvent)) {
if (mFileTypeInterfaces.contains(fileName)) {
import(fileName); //?
//TODO
} else if (fileName.contains(".exelem")||fileName.contains(".exnode")||fileName.contains(".exfile")) {
import(fileName);
} else {
QDesktopServices::openUrl("opencor://openFile/"+fileName);
}
}

// Accept the proposed action for the event

pEvent->acceptProposedAction();
}

//==============================================================================

bool MappingViewWidget::import(const QString &pFileName, bool pShowWarning)
{
Q_UNUSED(pShowWarning)

//todo
mZincWidget->changeSource(pFileName);

return true;
}

//==============================================================================

void MappingViewWidget::nodeSelection(int pId) {

if (pId==-1) {
Expand Down
17 changes: 11 additions & 6 deletions src/plugins/editing/MappingView/src/mappingviewwidget.h
Expand Up @@ -33,7 +33,6 @@ along with this program. If not, see <https://gnu.org/licenses>.

//==============================================================================

#include <QStringListModel> //TODO remove when over
#include <QTableView>
#include <QMap>
#include <QListWidget>
Expand Down Expand Up @@ -89,6 +88,12 @@ class MappingViewWidget : public Core::Widget

bool saveFile(const QString &pOldFileName, const QString &pNewFileName);

protected:
// void changeEvent(QEvent *pEvent) override;
void dragEnterEvent(QDragEnterEvent *pEvent) override;
void dragMoveEvent(QDragMoveEvent *pEvent) override;
void dropEvent(QDropEvent *pEvent) override;

private:

QwtWheel *mDelayWidget;
Expand All @@ -97,21 +102,21 @@ class MappingViewWidget : public Core::Widget

Core::SplitterWidget *mVerticalSplitterWidget;
Core::SplitterWidget *mHorizontalSplitterWidget;
MappingViewZincWidget *mMappingViewZincWidget;
MappingViewZincWidget *mZincWidget;

QLabel *mNodeValue;
QLabel *mVariableValue;
QTreeView *mVariableTree;

//TODO to move away
QListWidget *mListWidgetVariables;
QListWidget *mListWidgetOutput;

MappingViewEditingWidget* mEditingWidget = nullptr;
QMap<QString, MappingViewEditingWidget*> mEditingWidgets;

QString mMeshFileName;

QMap<QString, FileTypeInterface *> mFileTypeInterfaces;

bool import(const QString &pFileName, bool pShowWarning = true);

signals:
void horizontalSplitterMoved(const QIntList &pSizes);
void verticalSplitterMoved(const QIntList &pSizes);
Expand Down

0 comments on commit 92e0adc

Please sign in to comment.