#include <QmitkPointListModel.h>
Public Slots | |
void | MoveSelectedPointUp () |
void | MoveSelectedPointDown () |
void | RemoveSelectedPoint () |
Signals | |
void | SignalUpdateSelection () |
Public Member Functions | |
QmitkPointListModel (mitk::DataNode *=NULL, int t=0, QObject *parent=0) | |
~QmitkPointListModel () | |
Qt::ItemFlags | flags (const QModelIndex &) const |
int | rowCount (const QModelIndex &parent=QModelIndex()) const |
interface of QAbstractListModel | |
QVariant | data (const QModelIndex &index, int role) const |
interface of QAbstractListModel | |
QVariant | headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const |
interface of QAbstractListModel | |
void | SetPointSetNode (mitk::DataNode *pointSetNode) |
which point set to work on | |
mitk::PointSet * | GetPointSet () const |
which point set to work on | |
mitk::DataNode * | GetPointSetNode () const |
void | SetTimeStep (int t) |
which time step to display/model | |
int | GetTimeStep () const |
which time step to display/model | |
void | OnPointSetChanged (const itk::EventObject &e) |
itk observer for point set "modified" events | |
void | OnPointSetDeleted (const itk::EventObject &e) |
itk observer for point set "delete" events | |
bool | GetPointForModelIndex (const QModelIndex &index, mitk::PointSet::PointType &p, mitk::PointSet::PointIdentifier &id) const |
get point and point ID that correspond to a given QModelIndex | |
bool | GetModelIndexForPointID (mitk::PointSet::PointIdentifier id, QModelIndex &index) const |
returns a QModelIndex for a given point ID | |
Protected Member Functions | |
void | ObserveNewPointSet (mitk::DataNode *pointSetNode) |
internally observe different point set | |
mitk::PointSet * | CheckForPointSetInNode (mitk::DataNode *node) const |
Protected Attributes | |
mitk::DataNode * | m_PointSetNode |
unsigned int | m_PointSetModifiedObserverTag |
unsigned int | m_PointSetDeletedObserverTag |
int | m_TimeStep |
Definition at line 27 of file QmitkPointListModel.h.
QmitkPointListModel::QmitkPointListModel | ( | mitk::DataNode * | pointSetNode = NULL , |
int | t = 0 , |
||
QObject * | parent = 0 |
||
) |
Definition at line 29 of file QmitkPointListModel.cpp.
References ObserveNewPointSet().
:QAbstractListModel(parent), m_PointSetNode(NULL), m_PointSetModifiedObserverTag(0), m_PointSetDeletedObserverTag(0), m_TimeStep(t) { ObserveNewPointSet( pointSetNode ); }
QmitkPointListModel::~QmitkPointListModel | ( | ) |
Definition at line 45 of file QmitkPointListModel.cpp.
References ObserveNewPointSet().
{ this->ObserveNewPointSet( NULL ); }
mitk::PointSet * QmitkPointListModel::CheckForPointSetInNode | ( | mitk::DataNode * | node ) | const [protected] |
Definition at line 326 of file QmitkPointListModel.cpp.
References mitk::DataNode::GetData().
Referenced by data(), GetModelIndexForPointID(), GetPointForModelIndex(), GetPointSet(), MoveSelectedPointDown(), MoveSelectedPointUp(), ObserveNewPointSet(), OnPointSetDeleted(), RemoveSelectedPoint(), and rowCount().
{ if (node != NULL) { mitk::PointSet::Pointer pointSet = dynamic_cast<mitk::PointSet*>(node->GetData()); if (pointSet.IsNotNull()) return pointSet; } return NULL; }
QVariant QmitkPointListModel::data | ( | const QModelIndex & | index, |
int | role | ||
) | const |
interface of QAbstractListModel
Definition at line 146 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), GetPointForModelIndex(), m_PointSetNode, and m_TimeStep.
{ mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(m_PointSetNode); if ( pointSet.IsNull() ) { return QVariant(); } if ( !index.isValid() ) { return QVariant(); } if ( index.row() >= pointSet->GetSize(m_TimeStep) ) { return QVariant(); } if (role == Qt::DisplayRole) { mitk::PointSet::PointsContainer::ElementIdentifier id; mitk::PointSet::PointType p; bool pointFound = this->GetPointForModelIndex(index, p, id); if (pointFound == false) return QVariant(); QString s = QString("%0: (%1, %2, %3)") .arg( id, 3) .arg( p[0], 0, 'f', 3 ) .arg( p[1], 0, 'f', 3 ) .arg( p[2], 0, 'f', 3 ); return QVariant(s); } else { return QVariant(); } }
Qt::ItemFlags QmitkPointListModel::flags | ( | const QModelIndex & | ) | const |
Definition at line 39 of file QmitkPointListModel.cpp.
{ // no editing so far, return default (enabled, selectable) return Qt::ItemIsSelectable | Qt::ItemIsEnabled; }
bool QmitkPointListModel::GetModelIndexForPointID | ( | mitk::PointSet::PointIdentifier | id, |
QModelIndex & | index | ||
) | const |
returns a QModelIndex for a given point ID
Documentation The mitk::PointSet uses a map to store points in an ID<-->Point relation. The IDs are not neccesarily continuously numbered, therefore, we can not directly use the point ID as a QModelIndex. This method returns a QModelIndex for a given point ID in the outgoing parameter index.
[in] | mitk::PointSet::PointIdentifier | id The point ID for which the QModelIndex will be created |
[out] | QModelIndex& | index if a point with the ID id was found, index will contain a corresponding QModelIndex for that point |
Definition at line 237 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), m_PointSetNode, and m_TimeStep.
Referenced by QmitkPointListView::OnListViewSelectionChanged(), and QmitkPointListView::OnPointSetSelectionChanged().
{ mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(m_PointSetNode); if (pointSet.IsNull()) return false; mitk::PointSet::PointsContainer::Pointer points = pointSet->GetPointSet(m_TimeStep)->GetPoints(); if (points->IndexExists(id) == false) return false; unsigned int idx = 0; for (mitk::PointSet::PointsContainer::Iterator it = points->Begin(); it != points->End(); ++it) { if (it->Index() == id) // we found the correct element { index = this->index(idx); return true; } idx++; } return false; // nothing found }
bool QmitkPointListModel::GetPointForModelIndex | ( | const QModelIndex & | index, |
mitk::PointSet::PointType & | p, | ||
mitk::PointSet::PointIdentifier & | id | ||
) | const |
get point and point ID that correspond to a given QModelIndex
The mitk::PointSet uses a map to store points in an ID<-->Point relation. The IDs are not neccesarily continuously numbered, therefore, we can not directly use the QModelIndex as point ID. This method returns the point and the corresponding point id for a given QModelIndex. The point and the point ID are returned in the outgoing parameters p and id. If a valid point and ID were found, the method returns true, otherwise it returns false
[in] | QModelIndex | &index the index for which a point is requested. The row() part of the index is used to find a corresponding point |
[out] | mitk::Point3D& | p If a valid point is found, it will be stored in the p parameter |
[out] | mitk::PointSet::PointIdentifier& | id If a valid point is found, the corresponding ID will be stored in id |
Definition at line 203 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), int(), m_PointSetNode, and m_TimeStep.
Referenced by data(), and QmitkPointListView::OnPointDoubleClicked().
{ mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(m_PointSetNode); if (pointSet.IsNull()) return false; if ((index.row() < 0) || (index.row() >= (int)pointSet->GetPointSet(m_TimeStep)->GetPoints()->Size())) return false; // get the nth. element, if it exists. // we can not use the index directly, because PointSet uses a map container, // where the index is not necessarily the same as the key. // Therefore we have to count the elements mitk::PointSet::PointsContainer::Iterator it = pointSet->GetPointSet(m_TimeStep)->GetPoints()->Begin(); for (int i = 0; i < index.row(); ++i) { ++it; if (it == pointSet->GetPointSet(m_TimeStep)->GetPoints()->End()) return false; } if (it != pointSet->GetPointSet(m_TimeStep)->GetPoints()->End()) // not at the end, { p = it->Value(); id = it->Index(); return true; } return false; }
mitk::PointSet * QmitkPointListModel::GetPointSet | ( | ) | const |
which point set to work on
Definition at line 57 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), and m_PointSetNode.
Referenced by QmitkPointListView::ClearPointList(), QmitkPointListView::GetPointSet(), QmitkPointListView::OnListViewSelectionChanged(), QmitkPointListView::OnPointDoubleClicked(), QmitkPointListView::OnPointSetSelectionChanged(), and QmitkPointListView::wheelEvent().
{ return this->CheckForPointSetInNode(m_PointSetNode); }
mitk::DataNode* QmitkPointListModel::GetPointSetNode | ( | ) | const |
int QmitkPointListModel::GetTimeStep | ( | ) | const |
which time step to display/model
Definition at line 69 of file QmitkPointListModel.cpp.
References m_TimeStep.
Referenced by QmitkPointListView::fadeTimeStepIn(), QmitkPointListView::OnListViewSelectionChanged(), QmitkPointListView::OnPointDoubleClicked(), QmitkPointListView::OnPointSetSelectionChanged(), and QmitkPointListView::wheelEvent().
{ return m_TimeStep; }
QVariant QmitkPointListModel::headerData | ( | int | section, |
Qt::Orientation | orientation, | ||
int | role = Qt::DisplayRole |
||
) | const |
interface of QAbstractListModel
Definition at line 186 of file QmitkPointListModel.cpp.
{ if (role != Qt::DisplayRole) { return QVariant(); } if (orientation == Qt::Horizontal) { return QString("Coordinates").arg(section); } else { return QString("Row %1").arg(section); } }
void QmitkPointListModel::MoveSelectedPointDown | ( | ) | [slot] |
Definition at line 278 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), mitk::RenderingManager::GetInstance(), m_PointSetNode, m_TimeStep, and mitk::OpMOVEPOINTDOWN.
Referenced by QmitkPointListView::keyPressEvent(), and QmitkPointListWidget::MoveSelectedPointDown().
{ mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(m_PointSetNode); if (pointSet.IsNull()) return; mitk::PointSet::PointIdentifier selectedID; selectedID = pointSet->SearchSelectedPoint(m_TimeStep); mitk::ScalarType tsInMS = pointSet->GetTimeSlicedGeometry()->TimeStepToMS(m_TimeStep); mitk::PointOperation* doOp = new mitk::PointOperation(mitk::OpMOVEPOINTDOWN, tsInMS, pointSet->GetPoint(selectedID, m_TimeStep), selectedID, true); pointSet->ExecuteOperation(doOp); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); // Workaround for update problem in Pointset/Mapper }
void QmitkPointListModel::MoveSelectedPointUp | ( | ) | [slot] |
Definition at line 263 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), mitk::RenderingManager::GetInstance(), m_PointSetNode, m_TimeStep, and mitk::OpMOVEPOINTUP.
Referenced by QmitkPointListView::keyPressEvent(), and QmitkPointListWidget::MoveSelectedPointUp().
{ mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(m_PointSetNode); if (pointSet.IsNull()) return; mitk::PointSet::PointIdentifier selectedID; selectedID = pointSet->SearchSelectedPoint(m_TimeStep); mitk::PointSet::PointType point = pointSet->GetPoint(selectedID, m_TimeStep); mitk::ScalarType tsInMS = pointSet->GetTimeSlicedGeometry()->TimeStepToMS(m_TimeStep); mitk::PointOperation* doOp = new mitk::PointOperation(mitk::OpMOVEPOINTUP,tsInMS, pointSet->GetPoint(selectedID, m_TimeStep), selectedID, true); pointSet->ExecuteOperation(doOp); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); // Workaround for update problem in Pointset/Mapper }
void QmitkPointListModel::ObserveNewPointSet | ( | mitk::DataNode * | pointSetNode ) | [protected] |
internally observe different point set
Definition at line 74 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), mitk::DataNode::GetData(), m_PointSetDeletedObserverTag, m_PointSetModifiedObserverTag, m_PointSetNode, OnPointSetChanged(), and OnPointSetDeleted().
Referenced by QmitkPointListModel(), SetPointSetNode(), and ~QmitkPointListModel().
{ //remove old observers if (m_PointSetNode != NULL) { mitk::PointSet::Pointer oldPointSet = dynamic_cast<mitk::PointSet*>(m_PointSetNode->GetData()); if (oldPointSet.IsNotNull()) { oldPointSet->RemoveObserver(m_PointSetModifiedObserverTag); oldPointSet->RemoveObserver(m_PointSetDeletedObserverTag); } } //get the new pointset mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(pointSetNode); m_PointSetNode = pointSetNode; if ( pointSet.IsNotNull()) { // add new observer for modified if necessary itk::ReceptorMemberCommand<QmitkPointListModel>::Pointer modCommand = itk::ReceptorMemberCommand<QmitkPointListModel>::New(); modCommand->SetCallbackFunction( this, &QmitkPointListModel::OnPointSetChanged ); m_PointSetModifiedObserverTag = pointSet->AddObserver( itk::ModifiedEvent(), modCommand ); // add new observer for detele if necessary itk::ReceptorMemberCommand<QmitkPointListModel>::Pointer delCommand = itk::ReceptorMemberCommand<QmitkPointListModel>::New(); delCommand->SetCallbackFunction( this, &QmitkPointListModel::OnPointSetDeleted ); m_PointSetDeletedObserverTag = pointSet->AddObserver( itk::DeleteEvent(), delCommand ); } else { m_PointSetModifiedObserverTag = 0; m_PointSetDeletedObserverTag = 0; } }
void QmitkPointListModel::OnPointSetChanged | ( | const itk::EventObject & | e ) |
itk observer for point set "modified" events
Definition at line 112 of file QmitkPointListModel.cpp.
References SignalUpdateSelection().
Referenced by ObserveNewPointSet().
{ QAbstractListModel::reset(); emit SignalUpdateSelection(); }
void QmitkPointListModel::OnPointSetDeleted | ( | const itk::EventObject & | e ) |
itk observer for point set "delete" events
Definition at line 118 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), m_PointSetDeletedObserverTag, m_PointSetModifiedObserverTag, and m_PointSetNode.
Referenced by ObserveNewPointSet().
{ // m_PointSetNode = NULL; mitk::PointSet::Pointer ps = CheckForPointSetInNode(m_PointSetNode); if (ps) { ps->RemoveObserver(m_PointSetModifiedObserverTag); ps->RemoveObserver(m_PointSetDeletedObserverTag); } m_PointSetModifiedObserverTag = 0; m_PointSetDeletedObserverTag = 0; QAbstractListModel::reset(); }
void QmitkPointListModel::RemoveSelectedPoint | ( | ) | [slot] |
Definition at line 293 of file QmitkPointListModel.cpp.
References mitk::BS_NoButton, CheckForPointSetInNode(), mitk::EIDDELETE, mitk::RenderingManager::GetInstance(), mitk::DataNode::GetInteractor(), mitk::Key_Delete, m_PointSetNode, MITK_WARN, mitk::PointSetInteractor::New(), mitk::DataNode::SetInteractor(), and mitk::Type_KeyPress.
Referenced by QmitkPointListView::ClearPointList(), QmitkPointListView::keyPressEvent(), and QmitkPointListWidget::RemoveSelectedPoint().
{ mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(m_PointSetNode); if (pointSet.IsNull()) return; //get corresponding interactor to PointSet mitk::PointSetInteractor::Pointer interactor = dynamic_cast<mitk::PointSetInteractor*>(m_PointSetNode->GetInteractor()); if (interactor.IsNull()) { if (m_PointSetNode->GetInteractor()==NULL && m_PointSetNode != NULL) //no Interactor set to node { interactor = mitk::PointSetInteractor::New("pointsetinteractor",m_PointSetNode); m_PointSetNode->SetInteractor(interactor); } else { MITK_WARN<<"Unexpected interactor found!\n"; return; } } //send a DEL event to pointsetinteractor const mitk::Event* delEvent = new mitk::Event(NULL, mitk::Type_KeyPress, mitk::BS_NoButton, mitk::BS_NoButton, mitk::Key_Delete); mitk::StateEvent* delStateEvent = new mitk::StateEvent(mitk::EIDDELETE, delEvent); interactor->HandleEvent(delStateEvent); delete delEvent; delete delStateEvent; mitk::RenderingManager::GetInstance()->RequestUpdateAll(); // Workaround for update problem in PointSet/Mapper }
int QmitkPointListModel::rowCount | ( | const QModelIndex & | parent = QModelIndex() ) |
const |
interface of QAbstractListModel
Definition at line 133 of file QmitkPointListModel.cpp.
References CheckForPointSetInNode(), m_PointSetNode, and m_TimeStep.
{ mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(m_PointSetNode); if ( pointSet.IsNotNull() ) { return pointSet->GetSize(m_TimeStep); } else { return 0; } }
void QmitkPointListModel::SetPointSetNode | ( | mitk::DataNode * | pointSetNode ) |
which point set to work on
Definition at line 50 of file QmitkPointListModel.cpp.
References ObserveNewPointSet(), and SignalUpdateSelection().
Referenced by QmitkPointListView::SetPointSetNode().
{ this->ObserveNewPointSet( pointSetNode ); QAbstractListModel::reset(); emit SignalUpdateSelection(); }
void QmitkPointListModel::SetTimeStep | ( | int | t ) |
which time step to display/model
Definition at line 62 of file QmitkPointListModel.cpp.
References m_TimeStep, SignalUpdateSelection(), and QuadProgPP::t().
Referenced by QmitkPointListView::wheelEvent().
{ m_TimeStep = t; QAbstractListModel::reset(); emit SignalUpdateSelection(); }
void QmitkPointListModel::SignalUpdateSelection | ( | ) | [signal] |
emitted, when views should update their selection status (because mouse interactions in render windows can change the selection status of points)
Referenced by OnPointSetChanged(), SetPointSetNode(), and SetTimeStep().
unsigned int QmitkPointListModel::m_PointSetDeletedObserverTag [protected] |
Definition at line 129 of file QmitkPointListModel.h.
Referenced by ObserveNewPointSet(), and OnPointSetDeleted().
unsigned int QmitkPointListModel::m_PointSetModifiedObserverTag [protected] |
Definition at line 128 of file QmitkPointListModel.h.
Referenced by ObserveNewPointSet(), and OnPointSetDeleted().
mitk::DataNode* QmitkPointListModel::m_PointSetNode [protected] |
Definition at line 127 of file QmitkPointListModel.h.
Referenced by data(), GetModelIndexForPointID(), GetPointForModelIndex(), GetPointSet(), MoveSelectedPointDown(), MoveSelectedPointUp(), ObserveNewPointSet(), OnPointSetDeleted(), RemoveSelectedPoint(), and rowCount().
int QmitkPointListModel::m_TimeStep [protected] |
Definition at line 130 of file QmitkPointListModel.h.
Referenced by data(), GetModelIndexForPointID(), GetPointForModelIndex(), GetTimeStep(), MoveSelectedPointDown(), MoveSelectedPointUp(), rowCount(), and SetTimeStep().