#include <SigSelectionDnD.h>
Public Slots | |
| void | disableFilter () |
| void | enableFilter () |
Signals | |
| void | getSelection (SubSignalPool &sel) |
| void | selectionDropped (const SubSignalPool &sel) |
Public Member Functions | |
| bool | eventFilter (QObject *, QEvent *event) |
| void | setDragEnabled (bool b) |
| void | setDropEnabled (bool b) |
| SigSelectionDnD (QWidget *eventSource) | |
| QWidget * | source () |
Protected Types | |
| enum | DragState { Idle, Pressed, Dragging } |
Protected Member Functions | |
| virtual bool | dragEnterEvent (QDragEnterEvent *e) |
| virtual bool | dragMoveEvent (QDragMoveEvent *e) |
| virtual bool | dropEvent (QDropEvent *e) |
| virtual bool | mouseMoveEvent (QMouseEvent *e) |
| virtual bool | mousePressEvent (QMouseEvent *e) |
| virtual bool | mouseReleaseEvent (QMouseEvent *e) |
Protected Attributes | |
| bool | _dragEnabled |
| bool | _dropEnabled |
| bool | _filterEnabled |
| QPoint | _mousePressPos |
| QWidget * | _src |
| DragState | _state |
enum SigSelectionDnD::DragState [protected] |
| SigSelectionDnD::SigSelectionDnD | ( | QWidget * | eventSource | ) |
:
QObject(eventSource), _dropEnabled(true), _dragEnabled(true),
_state(Idle), _filterEnabled(true)
{
TRACE;
_src=eventSource;
_src->setAcceptDrops(true);
_src->installEventFilter(this);
}
| void SigSelectionDnD::disableFilter | ( | ) | [slot] |
References _filterEnabled, and TRACE.
Referenced by GroupView::setMode().
{
TRACE;
_filterEnabled=false;
}
| bool SigSelectionDnD::dragEnterEvent | ( | QDragEnterEvent * | e | ) | [protected, virtual] |
References _dropEnabled, _src, and TRACE.
Referenced by eventFilter().
{
TRACE;
if(_dropEnabled && e->mimeData() ->hasFormat( "geopsy/x-signal-selection" ) && e->source()!=_src) {
e->acceptProposedAction();
}
return true;
}
| bool SigSelectionDnD::dragMoveEvent | ( | QDragMoveEvent * | e | ) | [protected, virtual] |
References _dropEnabled, _src, and TRACE.
Referenced by eventFilter().
{
TRACE;
if(_dropEnabled && e->mimeData() ->hasFormat( "geopsy/x-signal-selection" ) && e->source()!=_src) {
e->acceptProposedAction();
}
return true;
}
| bool SigSelectionDnD::dropEvent | ( | QDropEvent * | e | ) | [protected, virtual] |
References _dropEnabled, _src, selectionDropped(), and TRACE.
Referenced by eventFilter().
{
TRACE;
if(_dropEnabled && e->mimeData() ->hasFormat( "geopsy/x-signal-selection" ) && e->source()!=_src) {
SubSignalPool * sel =
*(SubSignalPool ** ) e->mimeData() ->data( "geopsy/x-signal-selection" ).data();
emit selectionDropped( *sel);
}
e->acceptProposedAction();
return true;
}
| void SigSelectionDnD::enableFilter | ( | ) | [slot] |
References _filterEnabled, and TRACE.
Referenced by GroupView::setMode().
{
TRACE;
_filterEnabled=true;
}
| bool SigSelectionDnD::eventFilter | ( | QObject * | , |
| QEvent * | event | ||
| ) |
References _filterEnabled, dragEnterEvent(), dragMoveEvent(), dropEvent(), mouseMoveEvent(), mousePressEvent(), mouseReleaseEvent(), and TRACE.
{
TRACE;
if( !_filterEnabled) return false;
switch (e->type()) {
case QEvent::DragEnter:
return dragEnterEvent(static_cast<QDragEnterEvent *>(e) );
case QEvent::DragMove:
return dragMoveEvent(static_cast<QDragMoveEvent *>(e) );
case QEvent::Drop:
return dropEvent(static_cast<QDropEvent *>(e) );
case QEvent::MouseButtonPress:
return mousePressEvent(static_cast<QMouseEvent *>(e) );
case QEvent::MouseButtonRelease:
return mouseReleaseEvent(static_cast<QMouseEvent *>(e) );
case QEvent::MouseMove:
return mouseMoveEvent(static_cast<QMouseEvent *>(e) );
default:
return false;
}
}
| void SigSelectionDnD::getSelection | ( | SubSignalPool & | sel | ) | [signal] |
Referenced by mouseMoveEvent().
| bool SigSelectionDnD::mouseMoveEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
References _dragEnabled, _mousePressPos, _src, _state, Dragging, getSelection(), Idle, Pressed, and TRACE.
Referenced by eventFilter().
{
TRACE;
if(_dragEnabled && e->buttons() & Qt::LeftButton) {
if(_state==Idle) {
_mousePressPos=e->pos();
_state=Pressed;
} else if(_state==Pressed &&
(e->pos() - _mousePressPos).manhattanLength() > QApplication::startDragDistance()) {
SubSignalPool sel;
emit getSelection(sel);
QDrag *drag=new QDrag(_src);
drag->setPixmap(QPixmap( ":/images/signaldnd.png" ));
QMimeData *mimeData=new QMimeData;
QByteArray data;
data.resize(sizeof( SubSignalPool * ));
*(SubSignalPool ** ) data.data()=&sel;
mimeData->setData( "geopsy/x-signal-selection", data);
drag->setMimeData(mimeData);
_state=Dragging;
drag->start(Qt::CopyAction);
}
return true;
}
return false;
}
| bool SigSelectionDnD::mousePressEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
References _dragEnabled, _mousePressPos, _state, Pressed, and TRACE.
Referenced by eventFilter().
{
TRACE;
if(_dragEnabled && e->buttons() & Qt::LeftButton) {
_mousePressPos=e->pos();
_state=Pressed;
}
return false;
}
| bool SigSelectionDnD::mouseReleaseEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
| void SigSelectionDnD::selectionDropped | ( | const SubSignalPool & | sel | ) | [signal] |
Referenced by dropEvent().
| void SigSelectionDnD::setDragEnabled | ( | bool | b | ) | [inline] |
References _dragEnabled.
Referenced by GeopsyMainWindow::GeopsyMainWindow(), and GeopsyMainWindow::setToolFactory().
{_dragEnabled=b;}
| void SigSelectionDnD::setDropEnabled | ( | bool | b | ) |
References _dropEnabled, _src, and TRACE.
Referenced by FileView::FileView(), and GroupView::GroupView().
{
TRACE;
_dropEnabled=b;
_src->setAcceptDrops(b);
}
| QWidget* SigSelectionDnD::source | ( | ) | [inline] |
bool SigSelectionDnD::_dragEnabled [protected] |
Referenced by mouseMoveEvent(), mousePressEvent(), and setDragEnabled().
bool SigSelectionDnD::_dropEnabled [protected] |
Referenced by dragEnterEvent(), dragMoveEvent(), dropEvent(), and setDropEnabled().
bool SigSelectionDnD::_filterEnabled [protected] |
Referenced by disableFilter(), enableFilter(), and eventFilter().
QPoint SigSelectionDnD::_mousePressPos [protected] |
Referenced by mouseMoveEvent(), and mousePressEvent().
QWidget* SigSelectionDnD::_src [protected] |
Referenced by dragEnterEvent(), dragMoveEvent(), dropEvent(), mouseMoveEvent(), setDropEnabled(), SigSelectionDnD(), and source().
DragState SigSelectionDnD::_state [protected] |
Referenced by mouseMoveEvent(), mousePressEvent(), and mouseReleaseEvent().