1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
/**
*
* This file is part of Tulip (www.tulip-software.org)
*
* Authors: David Auber and the Tulip development Team
* from LaBRI, University of Bordeaux
*
* Tulip is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Tulip is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*/
#include <tulip/GlMainWidget.h>
#include <tulip/GlGraphComposite.h>
#include "ParallelCoordsGlEntitiesSelector.h"
using namespace std;
namespace tlp {
bool ParallelCoordsGlEntitiesSelector::eventFilter(QObject *widget, QEvent *e) {
ParallelCoordinatesView *parallelView = dynamic_cast<ParallelCoordinatesView *>(view());
GlMainWidget *glMainWidget = dynamic_cast<GlMainWidget *>(widget);
if (e->type() == QEvent::MouseButtonPress) {
QMouseEvent *qMouseEv = dynamic_cast<QMouseEvent *>(e);
if (qMouseEv->buttons()== Qt::LeftButton) {
if (!started) {
x = qMouseEv->x();
y = qMouseEv->y();
w = 0;
h = 0;
started = true;
graph = glMainWidget->getScene()->getGlGraphComposite()->getInputData()->getGraph();
}
return true;
}
}
if (e->type() == QEvent::MouseMove) {
QMouseEvent *qMouseEv = dynamic_cast<QMouseEvent *>(e);
if (qMouseEv->buttons() & Qt::LeftButton && started) {
if ((qMouseEv->x() > 0) && (qMouseEv->x() < glMainWidget->width()))
w = qMouseEv->x() - x;
if ((qMouseEv->y() > 0) && (qMouseEv->y() < glMainWidget->height()))
h = qMouseEv->y() - y;
parallelView->refresh();
return true;
}
}
if (e->type() == QEvent::MouseButtonRelease) {
QMouseEvent *qMouseEv = dynamic_cast<QMouseEvent *>(e);
if (started) {
Observable::holdObservers();
bool boolVal = true; // add to selection
if (qMouseEv->modifiers() != Qt::ControlModifier) {
if (qMouseEv->modifiers() !=
#if defined(__APPLE__)
Qt::AltModifier
#else
Qt::ShiftModifier
#endif
) {
unselectAllEntitiesHandler(parallelView);
}
else
boolVal = false; // remove from selection
}
if ((w == 0) && (h == 0)) {
selectedEntitiesHandler(parallelView, x, y, boolVal);
}
else {
if (w < 0) {
w *= -1;
x -= w;
}
if (h < 0) {
h *= -1;
y -= h;
}
selectedEntitiesHandler(parallelView, x, y, w, h, boolVal);
}
started = false;
Observable::unholdObservers();
return true;
}
}
return false;
}
}
|