#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().