Signals | Public Member Functions | Protected Slots | Protected Member Functions | Protected Attributes

QmitkPointListView Class Reference

GUI widget for handling mitk::PointSet. More...

#include <QmitkPointListView.h>

Collaboration diagram for QmitkPointListView:
Collaboration graph
[legend]

List of all members.

Signals

void SignalPointSelectionChanged ()
 this signal is emmitted, if the selection of a point in the pointset is changed

Public Member Functions

 QmitkPointListView (QWidget *parent=0)
 ~QmitkPointListView ()
void SetPointSetNode (mitk::DataNode *pointSetNode)
 assign a point set for observation
const mitk::PointSetGetPointSet () const
 which point set to work on
void SetMultiWidget (QmitkStdMultiWidget *multiWidget)
 assign a QmitkStdMultiWidget for updating render window crosshair
QmitkStdMultiWidgetGetMultiWidget () const
 return the QmitkStdMultiWidget that is used for updating render window crosshair
void SetTimesStep (int i)
 which time step to display/model

Protected Slots

void OnPointDoubleClicked (const QModelIndex &index)
 Filtering double click event for editing point coordinates via a dialog.
void OnPointSetSelectionChanged ()
 called when the point set data structure changes
void OnListViewSelectionChanged (const QItemSelection &selected, const QItemSelection &deselected)
 called when the selection of the view widget changes
void fadeTimeStepOut ()
 fade the shown timestep out
void ctxMenu (const QPoint &pos)
 open ContextMenu
void SetFading (bool onOff)
 Turn TimeStep Fading On/Off.
void ClearPointList ()
 Delete all points in the list.
void ClearPointListTS ()
 delete all points in the list in the current timestep

Protected Member Functions

void keyPressEvent (QKeyEvent *e)
 react to F2, F3 and DEL keys
void wheelEvent (QWheelEvent *event)
 change timestep of the current pointset by mouse wheel
void fadeTimeStepIn ()
 fade a label with the currently shown timestep in

Protected Attributes

QmitkPointListModelm_PointListModel
bool m_SelfCall
bool m_showFading
QmitkStdMultiWidgetm_MultiWidget
 used to position the planes on a selected point
QLabel * m_TimeStepFaderLabel

Detailed Description

GUI widget for handling mitk::PointSet.

Displays all the points in a mitk::PointSet graphically. Reacts automatically to changes in the PointSet's selection status. Updates PointSet's selection status when this list's selection changes.

If a QmitkStdMultiWidget is assigned via SetMultiWidget(), the crosshair of the QmitkStdMultiWidget is moved to the currently selected point.

Definition at line 41 of file QmitkPointListView.h.


Constructor & Destructor Documentation

QmitkPointListView::QmitkPointListView ( QWidget *  parent = 0 )

Definition at line 32 of file QmitkPointListView.cpp.

References ctxMenu(), m_PointListModel, m_TimeStepFaderLabel, OnListViewSelectionChanged(), OnPointDoubleClicked(), and OnPointSetSelectionChanged().

  :QListView( parent ),
  m_PointListModel( new QmitkPointListModel() ),
  m_SelfCall( false ),
  m_showFading(false),
  m_MultiWidget( NULL)
{  
  QListView::setAlternatingRowColors( true );

  // logic

  QListView::setSelectionBehavior( QAbstractItemView::SelectRows );
  QListView::setSelectionMode( QAbstractItemView::SingleSelection );
  QListView::setModel( m_PointListModel );
  QString tooltip = QString("Use the F2/F3 keys to move a point up/down, the Del key to remove a point\nand the mouse wheel to change the timestep.\n\nTimeStep:\t%1").arg(0);
  QListView::setToolTip(tooltip);
  //m_FadeTimer = new QTimer();
  this->setContextMenuPolicy(Qt::CustomContextMenu);

  m_TimeStepFaderLabel = new QLabel(this);
  QFont font("Arial", 17);
  m_TimeStepFaderLabel->setFont(font);

  //Define Size
  this->setMinimumHeight(40);

  //horizontal, vertical
  this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);


  //connect
  connect( m_PointListModel, SIGNAL(SignalUpdateSelection()), this, SLOT(OnPointSetSelectionChanged()) );

  connect( this, SIGNAL(doubleClicked ( const QModelIndex & )),
           this, SLOT(OnPointDoubleClicked( const QModelIndex & )) );

  connect( QListView::selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
           this, SLOT(OnListViewSelectionChanged(const QItemSelection& , const QItemSelection&)) );

  connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ctxMenu(const QPoint &)));

}
QmitkPointListView::~QmitkPointListView (  )

Definition at line 75 of file QmitkPointListView.cpp.

References m_PointListModel.

{
  delete m_PointListModel;
}

Member Function Documentation

void QmitkPointListView::ClearPointList (  ) [protected, slot]

Delete all points in the list.

Definition at line 348 of file QmitkPointListView.cpp.

References mitk::RenderingManager::GetInstance(), mitk::PointSet::GetPointSet(), QmitkPointListModel::GetPointSet(), m_PointListModel, and QmitkPointListModel::RemoveSelectedPoint().

Referenced by ctxMenu().

{
  if(!m_PointListModel->GetPointSet())
    return;
  mitk::PointSet::Pointer  curPS = m_PointListModel->GetPointSet();
  if ( curPS->GetSize() == 0)
    return;


  switch( QMessageBox::question( this, tr("Clear Points"),
                                 tr("Remove all points from the displayed list?"),
                                 QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
  {
  case QMessageBox::Yes:
    {
      //        m_PointListModel->ClearList();
      //      /*
      //        if (curPS)
      //        {
      //            curPS->Clear();
      //        }
      //        */
      //        mitk::RenderingManager::GetInstance()->RequestUpdateAll();
      //        break;
      mitk::PointSet::PointsIterator it;
      mitk::PointSet::PointsContainer *curPsPoints;
      while( !curPS->IsEmpty(0))
      {
        curPsPoints = curPS->GetPointSet()->GetPoints();
        it = curPsPoints->Begin();
        curPS->SetSelectInfo(it->Index(),true);
        m_PointListModel->RemoveSelectedPoint();
      }
      mitk::RenderingManager::GetInstance()->RequestUpdateAll();
      break;
    }
  case QMessageBox::No:
  default:
    break;
  }
  // emit PointListChanged();
}
void QmitkPointListView::ClearPointListTS (  ) [protected, slot]

delete all points in the list in the current timestep

Definition at line 391 of file QmitkPointListView.cpp.

Referenced by ctxMenu().

{
  //    mitk::PointSet* /*::Pointer*/  curPS = m_PointListModel->GetPointSet();
  //    if ( curPS->GetSize() == 0)
  //        return;

  //     int ts = this->m_PointListModel->GetTimeStep();
  //    switch( QMessageBox::question( this, tr("Clear Points in Timestep"),
  //                                   tr("Remove all points from the list with the timestep %1?").arg(ts),
  //                                   QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
  //    {
  //    case QMessageBox::Yes:
  //        if (curPS)
  //        {
  //            mitk::PointSet::DataType::Pointer curPSwithTS = curPS->GetPointSet(ts);
  //            //curPSwithTS->Clear();

  //        }
  //        mitk::RenderingManager::GetInstance()->RequestUpdateAll();
  //        break;

  //    case QMessageBox::No:
  //        default:
  //        break;
  //     }
  //   // emit PointListChanged();
}
void QmitkPointListView::ctxMenu ( const QPoint &  pos ) [protected, slot]

open ContextMenu

Definition at line 303 of file QmitkPointListView.cpp.

References ClearPointList(), ClearPointListTS(), and SetFading().

Referenced by QmitkPointListView().

{
  QMenu *menu = new QMenu;
  //    menu->setStyle();
  //    menu->addAction(tr("Test Item"), this, SLOT(test_slot()));


  //add Fading check
  QAction *showFading = new QAction(this);
  showFading->setCheckable(false);  //TODO: reset when fading is working
  showFading->setEnabled(false);    //TODO: reset when fading is working
  showFading->setText("Fade TimeStep");
  connect(showFading, SIGNAL(triggered(bool)), this, SLOT(SetFading(bool)));
  menu->addAction(showFading);

  //add Clear action
  QAction *clearList = new QAction(this);
  clearList->setText("Clear List");
  connect(clearList, SIGNAL(triggered()), this, SLOT(ClearPointList()));
  menu->addAction(clearList);

  //add Clear TimeStep action
  QAction *clearTS = new QAction(this);
  clearTS->setText("Clear current time step");
  connect(clearTS, SIGNAL(triggered()), this, SLOT(ClearPointListTS()));
  menu->addAction(clearTS);

  //    //add "show time step in list" option
  //    QAction *viewTS = new QAction(this);
  //    viewTS->setText("Show time step in list");
  //    viewTS->setCheckable(true);
  //    viewTS->setChecked(false);
  //    connect(viewTS, SIGNAL(triggered(bool)), this, SLOT(ClearPointList(bool)));
  //    menu->addAction(viewTS);


  menu->exec(this->mapToGlobal(pos));

}
void QmitkPointListView::fadeTimeStepIn (  ) [protected]

fade a label with the currently shown timestep in

Definition at line 254 of file QmitkPointListView.cpp.

References fadeTimeStepOut(), QmitkPointListModel::GetTimeStep(), int(), m_PointListModel, and m_TimeStepFaderLabel.

Referenced by wheelEvent().

{
  //Setup Widget
  QWidget *m_TimeStepFader = new QWidget(this);
  QHBoxLayout *layout = new QHBoxLayout(m_TimeStepFader);

  int x = (int)(this->geometry().x()+this->width()*0.6);
  int y = (int)(this->geometry().y()+this->height()*0.8);
  m_TimeStepFader->move(x,y);
  m_TimeStepFader->resize(60, 55);
  m_TimeStepFader->setLayout(layout);
  m_TimeStepFader->setAttribute(Qt::WA_DeleteOnClose);

  //setup Label
  //    QLabel *label = new QLabel(QString("%1").arg(this->m_PointListModel->GetTimeStep()));

  layout->addWidget(m_TimeStepFaderLabel);
  m_TimeStepFaderLabel->setAlignment(Qt::AlignCenter);
  m_TimeStepFaderLabel->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
  m_TimeStepFaderLabel->setLineWidth(2);
  m_TimeStepFaderLabel->setText(QString("%1").arg(this->m_PointListModel->GetTimeStep()));

  //give the widget opacity and some colour
  QPalette pal = m_TimeStepFaderLabel->palette();
  QColor semiTransparentColor(139, 192, 223, 50);
  QColor labelTransparentColor(0,0,0,200);
  pal.setColor(m_TimeStepFaderLabel->backgroundRole(), semiTransparentColor);
  pal.setColor(m_TimeStepFaderLabel->foregroundRole(), labelTransparentColor);
  m_TimeStepFaderLabel->setAutoFillBackground(true);
  m_TimeStepFaderLabel->setPalette(pal);

  //show the widget
  m_TimeStepFader->show();

  //and start the timer
  m_TimeStepFaderLabel->setVisible(true);
  QTimer::singleShot(2000, this, SLOT(fadeTimeStepOut()));

}
void QmitkPointListView::fadeTimeStepOut (  ) [protected, slot]

fade the shown timestep out

Definition at line 296 of file QmitkPointListView.cpp.

References m_TimeStepFaderLabel.

Referenced by fadeTimeStepIn().

{

  m_TimeStepFaderLabel->hide();

}
QmitkStdMultiWidget * QmitkPointListView::GetMultiWidget (  ) const

return the QmitkStdMultiWidget that is used for updating render window crosshair

Definition at line 97 of file QmitkPointListView.cpp.

References m_MultiWidget.

{
  return m_MultiWidget;
}
const mitk::PointSet * QmitkPointListView::GetPointSet (  ) const

which point set to work on

Definition at line 85 of file QmitkPointListView.cpp.

References QmitkPointListModel::GetPointSet(), and m_PointListModel.

void QmitkPointListView::keyPressEvent ( QKeyEvent *  e ) [protected]
void QmitkPointListView::OnListViewSelectionChanged ( const QItemSelection &  selected,
const QItemSelection &  deselected 
) [protected, slot]

called when the selection of the view widget changes

Definition at line 148 of file QmitkPointListView.cpp.

References mitk::RenderingManager::GetInstance(), QmitkPointListModel::GetModelIndexForPointID(), mitk::PointSet::GetPoint(), mitk::PointSet::GetPointSet(), QmitkPointListModel::GetPointSet(), QmitkPointListModel::GetTimeStep(), m_MultiWidget, m_PointListModel, m_SelfCall, QmitkStdMultiWidget::MoveCrossToPosition(), mitk::PointSet::SetSelectInfo(), and SignalPointSelectionChanged().

Referenced by QmitkPointListView().

{
  if (m_SelfCall)
    return;

  mitk::PointSet* pointSet = const_cast<mitk::PointSet*>( m_PointListModel->GetPointSet() );

  if (pointSet == NULL)
    return;

  // (take care that this widget doesn't react to self-induced changes by setting m_SelfCall)
  m_SelfCall = true;

  // update selection of all points in pointset: select the one(s) that are selected in the view, deselect all others
  QModelIndexList selectedIndexes = selected.indexes();

  for (mitk::PointSet::PointsContainer::Iterator it = pointSet->GetPointSet(m_PointListModel->GetTimeStep())->GetPoints()->Begin();
  it != pointSet->GetPointSet(m_PointListModel->GetTimeStep())->GetPoints()->End(); ++it)
  {
    QModelIndex index;
    if (m_PointListModel->GetModelIndexForPointID(it->Index(), index))
    {
      if (selectedIndexes.indexOf(index) != -1) // index is found in the selected indices list
      {
        pointSet->SetSelectInfo(it->Index(), true, m_PointListModel->GetTimeStep());
        if ( m_MultiWidget != NULL)
        {
          m_MultiWidget->MoveCrossToPosition(pointSet->GetPoint(it->Index(), m_PointListModel->GetTimeStep()));
        }
      }
      else
      {
        pointSet->SetSelectInfo(it->Index(), false, m_PointListModel->GetTimeStep());
      }
    }
  }

  m_SelfCall = false;

  emit SignalPointSelectionChanged();

  mitk::RenderingManager::GetInstance()->RequestUpdateAll();
}
void QmitkPointListView::OnPointDoubleClicked ( const QModelIndex &  index ) [protected, slot]

Filtering double click event for editing point coordinates via a dialog.

Definition at line 102 of file QmitkPointListView.cpp.

References QmitkPointListModel::GetPointForModelIndex(), QmitkPointListModel::GetPointSet(), QmitkPointListModel::GetTimeStep(), m_PointListModel, and QmitkEditPointDialog::SetPoint().

Referenced by QmitkPointListView().

{
  mitk::PointSet::PointType p;
  mitk::PointSet::PointIdentifier id;
  m_PointListModel->GetPointForModelIndex(index, p, id);
  QmitkEditPointDialog _EditPointDialog(this);
  _EditPointDialog.SetPoint(m_PointListModel->GetPointSet(), id, m_PointListModel->GetTimeStep());
  _EditPointDialog.exec();
}
void QmitkPointListView::OnPointSetSelectionChanged (  ) [protected, slot]

called when the point set data structure changes

Definition at line 112 of file QmitkPointListView.cpp.

References QmitkPointListModel::GetModelIndexForPointID(), mitk::PointSet::GetNumberOfSelected(), QmitkPointListModel::GetPointSet(), QmitkPointListModel::GetTimeStep(), m_PointListModel, m_SelfCall, MITK_ERROR, mitk::PointSet::SearchSelectedPoint(), and SignalPointSelectionChanged().

Referenced by QmitkPointListView().

{
  const mitk::PointSet* pointSet = m_PointListModel->GetPointSet();
  if (pointSet == NULL)
    return;

  // update this view's selection status as a result to changes in the point set data structure
  m_SelfCall = true;
  int timeStep = m_PointListModel->GetTimeStep();

  if ( pointSet->GetNumberOfSelected( timeStep ) > 1 )
  {
    MITK_ERROR << "Point set has multiple selected points. This view is not designed for more than one selected point.";
  }

  int selectedIndex = pointSet->SearchSelectedPoint( timeStep );

  if (selectedIndex == -1) // no selected point is found
  {
    m_SelfCall = false;
    return;
  }

  QModelIndex index;

  bool modelIndexOkay = m_PointListModel->GetModelIndexForPointID(selectedIndex, index);

  if (modelIndexOkay == true)
    QListView::selectionModel()->select( index , QItemSelectionModel::ClearAndSelect );

  emit SignalPointSelectionChanged();

  m_SelfCall = false;
}
void QmitkPointListView::SetFading ( bool  onOff ) [protected, slot]

Turn TimeStep Fading On/Off.

Definition at line 343 of file QmitkPointListView.cpp.

References m_showFading.

Referenced by ctxMenu().

{
  m_showFading = onOff;
}
void QmitkPointListView::SetMultiWidget ( QmitkStdMultiWidget multiWidget )

assign a QmitkStdMultiWidget for updating render window crosshair

Definition at line 90 of file QmitkPointListView.cpp.

References m_MultiWidget.

Referenced by QmitkPointListWidget::SetMultiWidget().

{
  m_MultiWidget = multiWidget;


}
void QmitkPointListView::SetPointSetNode ( mitk::DataNode pointSetNode )

assign a point set for observation

Definition at line 80 of file QmitkPointListView.cpp.

References m_PointListModel, and QmitkPointListModel::SetPointSetNode().

Referenced by QmitkPointListWidget::OnNodeDeleted().

{
  m_PointListModel->SetPointSetNode( pointSetNode);
}
void QmitkPointListView::SetTimesStep ( int  i )

which time step to display/model

void QmitkPointListView::SignalPointSelectionChanged (  ) [signal]

this signal is emmitted, if the selection of a point in the pointset is changed

Referenced by OnListViewSelectionChanged(), and OnPointSetSelectionChanged().

void QmitkPointListView::wheelEvent ( QWheelEvent *  event ) [protected]

change timestep of the current pointset by mouse wheel

Definition at line 216 of file QmitkPointListView.cpp.

References fadeTimeStepIn(), QmitkPointListModel::GetPointSet(), QmitkPointListModel::GetTimeStep(), mitk::BaseData::GetTimeSteps(), int(), m_PointListModel, and QmitkPointListModel::SetTimeStep().

{


  if (!m_PointListModel || !m_PointListModel->GetPointSet() || (int)(m_PointListModel->GetPointSet()->GetTimeSteps()) == 1 /*|| !m_4DPointSet*/)
    return;


  int whe = event->delta();
  mitk::PointSet::Pointer ps = dynamic_cast<mitk::PointSet*>(m_PointListModel->GetPointSet());
  unsigned int numberOfTS = ps->GetTimeSteps();

  if(numberOfTS == 1)
    return;
  int currentTS =  this->m_PointListModel->GetTimeStep();
  if(whe > 0)
  {
    if((currentTS >= (int)(m_PointListModel->GetPointSet()->GetTimeSteps())))
      return;

    this->m_PointListModel->SetTimeStep(++currentTS);
  }
  else
  {

    if((currentTS <= 0))
      return;
    this->m_PointListModel->SetTimeStep(--currentTS);

  }


  QString tooltip = QString("Use the F2/F3 keys to move a point up/down, the Del key to remove a point\nand the mouse wheel to change the timestep.\n\nTimeStep:\t%1").arg(currentTS);
  this->setToolTip(tooltip);

  fadeTimeStepIn();
}

Member Data Documentation

used to position the planes on a selected point

Definition at line 108 of file QmitkPointListView.h.

Referenced by GetMultiWidget(), OnListViewSelectionChanged(), and SetMultiWidget().

Definition at line 103 of file QmitkPointListView.h.

Referenced by OnListViewSelectionChanged(), and OnPointSetSelectionChanged().

Definition at line 105 of file QmitkPointListView.h.

Referenced by SetFading().

Definition at line 110 of file QmitkPointListView.h.

Referenced by fadeTimeStepIn(), fadeTimeStepOut(), and QmitkPointListView().


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