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

QmitkPointListViewWidget Class Reference

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

#include <QmitkPointListViewWidget.h>

Collaboration diagram for QmitkPointListViewWidget:
Collaboration graph
[legend]

List of all members.

Signals

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

Public Member Functions

 QmitkPointListViewWidget (QWidget *parent=0)
 ~QmitkPointListViewWidget ()
void SetPointSet (mitk::PointSet *pointSet)
 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 SetTimeStep (int t)
 which time step to display/model
int GetTimeStep () const
 which time step to display/model
void OnPointSetChanged (const itk::Object *)
 observer for point set "modified" events
void OnPointSetDeleted (const itk::Object *)
 observer for point set "delete" events

Protected Slots

void OnItemDoubleClicked (QListWidgetItem *item)
void OnCurrentRowChanged (int)
 called when the selection of the view widget changes

Protected Member Functions

void keyPressEvent (QKeyEvent *e)
 react to F2, F3 and DEL keys
void MoveSelectedPointUp ()
void MoveSelectedPointDown ()
void RemoveSelectedPoint ()
void Update (bool currentRowChanged=false)

Protected Attributes

mitk::WeakPointer< mitk::PointSetm_PointSet
int m_TimeStep
bool m_SelfCall
QmitkStdMultiWidgetm_MultiWidget
 used to position the planes on a selected point

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 QmitkPointListViewWidget.h.


Constructor & Destructor Documentation

QmitkPointListViewWidget::QmitkPointListViewWidget ( QWidget *  parent = 0 )

Definition at line 30 of file QmitkPointListViewWidget.cpp.

References OnCurrentRowChanged(), and OnItemDoubleClicked().

:QListWidget( parent ),
 m_TimeStep( 0 ),
 m_SelfCall( false ),
 m_MultiWidget( NULL)
{  
  QListWidget::setAlternatingRowColors( true );
  // logic

  QListWidget::setSelectionBehavior( QAbstractItemView::SelectRows );
  QListWidget::setSelectionMode( QAbstractItemView::SingleSelection );
  
  connect( this, SIGNAL(itemDoubleClicked ( QListWidgetItem * )),
           this, SLOT(OnItemDoubleClicked( QListWidgetItem *)) );

  connect( this, SIGNAL( currentRowChanged( int ) ),
           this, SLOT( OnCurrentRowChanged( int ) ) );
  
}
QmitkPointListViewWidget::~QmitkPointListViewWidget (  )

Definition at line 50 of file QmitkPointListViewWidget.cpp.

References SetPointSet().

{
  this->SetPointSet(0); // remove listener
}

Member Function Documentation

QmitkStdMultiWidget * QmitkPointListViewWidget::GetMultiWidget (  ) const

return the QmitkStdMultiWidget that is used for updating render window crosshair

Definition at line 104 of file QmitkPointListViewWidget.cpp.

References m_MultiWidget.

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

which point set to work on

Definition at line 82 of file QmitkPointListViewWidget.cpp.

References m_PointSet.

{
  return m_PointSet;
}
int QmitkPointListViewWidget::GetTimeStep (  ) const

which time step to display/model

Definition at line 93 of file QmitkPointListViewWidget.cpp.

References m_TimeStep.

{
  return m_TimeStep;
}
void QmitkPointListViewWidget::keyPressEvent ( QKeyEvent *  e ) [protected]

react to F2, F3 and DEL keys

Definition at line 203 of file QmitkPointListViewWidget.cpp.

References mitk::WeakPointer< TObjectType >::IsNull(), mitk::Key_Delete, mitk::Key_F2, mitk::Key_F3, m_PointSet, MoveSelectedPointDown(), MoveSelectedPointUp(), and RemoveSelectedPoint().

{
  if (m_PointSet.IsNull())
    return;

  int key = e->key();
  switch (key)
  {
    case Qt::Key_F2:
     this->MoveSelectedPointUp();
     break;
    case Qt::Key_F3:
      this->MoveSelectedPointDown();
      break;
    case Qt::Key_Delete:
      this->RemoveSelectedPoint();
      break;
    default:
    break;
  }
}
void QmitkPointListViewWidget::MoveSelectedPointDown (  ) [protected]

Definition at line 238 of file QmitkPointListViewWidget.cpp.

References mitk::RenderingManager::GetInstance(), m_PointSet, m_TimeStep, and mitk::OpMOVEPOINTDOWN.

Referenced by keyPressEvent().

{
  if (m_PointSet == NULL)
    return;

  mitk::PointSet::PointIdentifier selectedID; 
  selectedID = m_PointSet->SearchSelectedPoint(m_TimeStep);
  mitk::PointOperation* doOp = new mitk::PointOperation(mitk::OpMOVEPOINTDOWN, m_PointSet->GetPoint(selectedID, m_TimeStep), selectedID, true);
  m_PointSet->ExecuteOperation(doOp);
  mitk::RenderingManager::GetInstance()->RequestUpdateAll(); // Workaround for update problem in Pointset/Mapper
}
void QmitkPointListViewWidget::MoveSelectedPointUp (  ) [protected]

Definition at line 225 of file QmitkPointListViewWidget.cpp.

References mitk::RenderingManager::GetInstance(), m_PointSet, m_TimeStep, and mitk::OpMOVEPOINTUP.

Referenced by keyPressEvent().

{
  if (m_PointSet == NULL)
    return;
  
  mitk::PointSet::PointIdentifier selectedID;   
  selectedID = m_PointSet->SearchSelectedPoint(m_TimeStep);
  mitk::PointOperation* doOp = new mitk::PointOperation(mitk::OpMOVEPOINTUP, m_PointSet->GetPoint(selectedID, m_TimeStep), selectedID, true);
  m_PointSet->ExecuteOperation(doOp);
  mitk::RenderingManager::GetInstance()->RequestUpdateAll(); // Workaround for update problem in Pointset/Mapper
}
void QmitkPointListViewWidget::OnCurrentRowChanged ( int   ) [protected, slot]

called when the selection of the view widget changes

Definition at line 128 of file QmitkPointListViewWidget.cpp.

References Update().

Referenced by QmitkPointListViewWidget().

{
  this->Update(true);
}
void QmitkPointListViewWidget::OnItemDoubleClicked ( QListWidgetItem *  item ) [protected, slot]

Filtering double click event for editing point coordinates via a dialog

Definition at line 121 of file QmitkPointListViewWidget.cpp.

References m_PointSet, m_TimeStep, and QmitkEditPointDialog::SetPoint().

Referenced by QmitkPointListViewWidget().

{
  QmitkEditPointDialog _EditPointDialog(this);
  _EditPointDialog.SetPoint(m_PointSet, this->row(item), m_TimeStep);
  _EditPointDialog.exec();
}
void QmitkPointListViewWidget::OnPointSetChanged ( const itk::Object *   )

observer for point set "modified" events

Definition at line 109 of file QmitkPointListViewWidget.cpp.

References m_SelfCall, and Update().

Referenced by SetPointSet().

{
  if(!m_SelfCall)
    this->Update();
}
void QmitkPointListViewWidget::OnPointSetDeleted ( const itk::Object *   )

observer for point set "delete" events

Definition at line 115 of file QmitkPointListViewWidget.cpp.

References SetPointSet(), and Update().

Referenced by SetPointSet().

{
  this->SetPointSet(0);
  this->Update();
}
void QmitkPointListViewWidget::PointSelectionChanged (  ) [signal]

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

void QmitkPointListViewWidget::RemoveSelectedPoint (  ) [protected]

Definition at line 251 of file QmitkPointListViewWidget.cpp.

References mitk::RenderingManager::GetInstance(), m_PointSet, m_TimeStep, and mitk::OpREMOVE.

Referenced by keyPressEvent().

{
  if (m_PointSet == NULL)
    return;

  mitk::PointSet::PointIdentifier selectedID; 
  selectedID = m_PointSet->SearchSelectedPoint(m_TimeStep);
  mitk::PointOperation* doOp = new mitk::PointOperation(mitk::OpREMOVE, m_PointSet->GetPoint(selectedID, m_TimeStep), selectedID, true);
  m_PointSet->ExecuteOperation(doOp);
  mitk::RenderingManager::GetInstance()->RequestUpdateAll(); // Workaround for update problem in Pointset/Mapper
}
void QmitkPointListViewWidget::SetMultiWidget ( QmitkStdMultiWidget multiWidget )

assign a QmitkStdMultiWidget for updating render window crosshair

Definition at line 98 of file QmitkPointListViewWidget.cpp.

References m_MultiWidget.

{
  m_MultiWidget = multiWidget;
}
void QmitkPointListViewWidget::SetPointSet ( mitk::PointSet pointSet )
void QmitkPointListViewWidget::SetTimeStep ( int  t )

which time step to display/model

Definition at line 87 of file QmitkPointListViewWidget.cpp.

References m_TimeStep, QuadProgPP::t(), and Update().

{
  m_TimeStep = t;
  this->Update();
}
void QmitkPointListViewWidget::Update ( bool  currentRowChanged = false ) [protected]

use logging as soon as available

Definition at line 263 of file QmitkPointListViewWidget.cpp.

References int(), mitk::WeakPointer< TObjectType >::IsNull(), m_PointSet, m_SelfCall, and m_TimeStep.

Referenced by OnCurrentRowChanged(), OnPointSetChanged(), OnPointSetDeleted(), SetPointSet(), and SetTimeStep().

{
  if(m_SelfCall)
    return;

  if(m_PointSet.IsNull())
  {
    this->clear();
    return;
  }

  m_SelfCall = true;
  QString text;
  int i = 0;
  
  mitk::PointSet::DataType::Pointer pointset = m_PointSet->GetPointSet(m_TimeStep);
  for (mitk::PointSet::PointsContainer::Iterator it = pointset->GetPoints()->Begin(); it != pointset->GetPoints()->End(); ++it)
  {

    text = QString("%0: (%1, %2, %3)")
      .arg( i, 3)
      .arg( it.Value().GetElement(0), 0, 'f', 3 )
      .arg( it.Value().GetElement(1), 0, 'f', 3 )
      .arg( it.Value().GetElement(2), 0, 'f', 3 );

    if(i==this->count())
      this->addItem(text); // insert text
    else
      this->item(i)->setText(text); // update text
    
    if(currentRowChanged)
    {
      if(i == this->currentRow())
        m_PointSet->SetSelectInfo(this->currentRow(), true, m_TimeStep);
      else
        m_PointSet->SetSelectInfo(it->Index(), false, m_TimeStep); // select nothing now
    }
    ++i;
  }

  // remove unnecessary listwidgetitems
  while (m_PointSet->GetPointSet(m_TimeStep)->GetPoints()->Size() < (unsigned int)this->count() )
  {
    QListWidgetItem * item = this->takeItem(this->count()-1);
    delete item;
  }

  // update selection in pointset or in the list widget
  if(!currentRowChanged)
  {
    if ( m_PointSet->GetNumberOfSelected( m_TimeStep ) > 1 )
    {
      std::cerr << "Point set has multiple selected points. This view is not designed for more than one selected point." << std::endl;
    }

    int selectedIndex = m_PointSet->SearchSelectedPoint( m_TimeStep );
    if (selectedIndex != -1) // no selected point is found
    {
      this->setCurrentRow ( selectedIndex );
    }
  }
  m_SelfCall = false;
}

Member Data Documentation

used to position the planes on a selected point

Definition at line 97 of file QmitkPointListViewWidget.h.

Referenced by GetMultiWidget(), and SetMultiWidget().

Definition at line 94 of file QmitkPointListViewWidget.h.

Referenced by OnPointSetChanged(), and Update().


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