Public Slots | Signals | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes
SigSelectionDnD Class Reference

#include <SigSelectionDnD.h>

List of all members.

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

Member Enumeration Documentation

enum SigSelectionDnD::DragState [protected]
Enumerator:
Idle 
Pressed 
Dragging 

Constructor & Destructor Documentation

SigSelectionDnD::SigSelectionDnD ( QWidget *  eventSource)

References _src, and TRACE.

                                                      :
    QObject(eventSource), _dropEnabled(true), _dragEnabled(true),
    _state(Idle), _filterEnabled(true)
{
  TRACE;
  _src=eventSource;
  _src->setAcceptDrops(true);
  _src->installEventFilter(this);
}

Member Function Documentation

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;
}

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]

References _state, Idle, and TRACE.

Referenced by eventFilter().

{
  TRACE;
  _state=Idle;
  return false;
}
void SigSelectionDnD::selectionDropped ( const SubSignalPool sel) [signal]

Referenced by dropEvent().

void SigSelectionDnD::setDragEnabled ( bool  b) [inline]

References _dropEnabled, _src, and TRACE.

Referenced by FileView::FileView(), and GroupView::GroupView().

{
  TRACE;
  _dropEnabled=b;
  _src->setAcceptDrops(b);
}
QWidget* SigSelectionDnD::source ( ) [inline]

References _src.

Referenced by ToolFactory::newGraphicWindow().

{return _src;}

Member Data Documentation

QPoint SigSelectionDnD::_mousePressPos [protected]

Referenced by mouseMoveEvent(), and mousePressEvent().

QWidget* SigSelectionDnD::_src [protected]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines