Explorar el Código

Merge pull request #491 from espakm/logout-crash

Server entry removed from tree view after logout
Sascha Zelzer hace 10 años
padre
commit
5f5f6c07b3

+ 3 - 3
Applications/ctkXnatTreeBrowser/ctkXnatTreeBrowserMainWindow.cpp

@@ -60,14 +60,14 @@ void ctkXnatTreeBrowserMainWindow::loginButtonPushed()
 {
   if (m_Session)
   {
+    ctkXnatDataModel* dataModel = m_Session->dataModel();
+    m_TreeModel->removeDataModel(dataModel);
+    ui->treeView->reset();
     delete m_Session;
     m_Session = 0;
     ui->loginButton->setText("Login");
     ui->loginLabel->setText("Disconnected");
     ui->downloadLabel->hide();
-
-    // nt: download tests... //
-    // m_TreeModel->downloadFile (ui->treeView->selectionModel()->currentIndex(), "/Users/nicolastoussaint/Desktop/test.nii.gz");
   }
   else
   {

+ 15 - 0
Libs/XNAT/Core/ctkXnatTreeItem.cpp

@@ -99,3 +99,18 @@ ctkXnatTreeItem* ctkXnatTreeItem::parent()
 {
   return m_ParentItem;
 }
+
+//----------------------------------------------------------------------------
+void ctkXnatTreeItem::remove(const ctkXnatObject* xnatObject)
+{
+  QList<ctkXnatTreeItem*>::iterator it = m_ChildItems.begin();
+  QList<ctkXnatTreeItem*>::iterator itEnd = m_ChildItems.end();
+  while (it != itEnd && (*it)->xnatObject() != xnatObject)
+  {
+    ++it;
+  }
+  if (it != itEnd)
+  {
+    m_ChildItems.erase(it);
+  }
+}

+ 2 - 0
Libs/XNAT/Core/ctkXnatTreeItem_p.h

@@ -48,6 +48,8 @@ public:
   int row() const;
   ctkXnatTreeItem* parent();
 
+  void remove(const ctkXnatObject* xnatObject);
+
 private:
 
   ctkXnatObject* m_XnatObject;

+ 7 - 0
Libs/XNAT/Core/ctkXnatTreeModel.cpp

@@ -239,6 +239,13 @@ void ctkXnatTreeModel::addDataModel(ctkXnatDataModel* dataModel)
 }
 
 //----------------------------------------------------------------------------
+void ctkXnatTreeModel::removeDataModel(ctkXnatDataModel* dataModel)
+{
+  Q_D(ctkXnatTreeModel);
+  d->m_RootItem->remove(dataModel);
+}
+
+//----------------------------------------------------------------------------
 bool ctkXnatTreeModel::removeAllRows(const QModelIndex& parent)
 {
   // do nothing for the root

+ 1 - 0
Libs/XNAT/Core/ctkXnatTreeModel.h

@@ -53,6 +53,7 @@ public:
   ctkXnatObject* xnatObject(const QModelIndex& index) const;
 
   void addDataModel(ctkXnatDataModel* dataModel);
+  void removeDataModel(ctkXnatDataModel* dataModel);
 
   bool removeAllRows(const QModelIndex& parent);