From 57608b6038aaf31b21948e6244aeb814f0bb7cbd Mon Sep 17 00:00:00 2001 From: caballero Date: Tue, 7 Apr 2009 14:57:47 +0000 Subject: [PATCH] Remove algorithm is now linear, and everything can be removed without deleting the entire patient. --- src2/creaImageIOSQLiteTreeHandler.cpp | 54 ++++++++++++++++++----- src2/creaImageIOTreeHandlerImageAdder.cpp | 31 ------------- src2/creaImageIOTreeHandlerImageAdder.h | 7 --- src2/creaImageIOTreeView.h | 4 +- src2/creaImageIOWxGimmickView.cpp | 2 +- src2/creaImageIOWxTreeView.cpp | 51 +++++++++++++++++---- src2/creaImageIOWxTreeView.h | 3 +- 7 files changed, 89 insertions(+), 63 deletions(-) diff --git a/src2/creaImageIOSQLiteTreeHandler.cpp b/src2/creaImageIOSQLiteTreeHandler.cpp index 564ec33..aec5155 100644 --- a/src2/creaImageIOSQLiteTreeHandler.cpp +++ b/src2/creaImageIOSQLiteTreeHandler.cpp @@ -130,11 +130,16 @@ namespace creaImageIO //===================================================================== int SQLiteTreeHandler::AddBranch( const AttributeMapType& attr ) { - //std::cout << "AddBranch" << std::endl; tree::Node* parent = DBGetParent(attr); - //std::cout << " parent = "<GetLabel()<<" level "<GetLevel()<GetLevel()GetLevel()>0) + { + int nC=GetNumberOfChildren(parent); + nC=nC+1; + std::stringstream out; + out <GetLevel()+1); } @@ -147,11 +152,30 @@ namespace creaImageIO DBRecursiveRemoveNode(node); // std::cout << "DELETE"<GetParent()) + bool remove=false; + tree::Node* parent=node->GetParent(); + if (parent) { - node->GetParent()->RemoveChildrenFromList(node); + parent->RemoveChildrenFromList(node); + int nC=GetNumberOfChildren(parent); + nC=nC-1; + if(nC>0) + { + std::stringstream out; + out <GetLevel()>0) + { + Remove(parent); + } // std::cout << "DELETE OK"<GetChildrenLoaded()||mIsAdding) + if (node->GetChildrenLoaded()) { // Iterate the children @@ -767,8 +791,10 @@ namespace creaImageIO { // Create Node tree::Node* child = new tree::Node(parent,attr); + GetNumberOfChildren(parent); child->SetChildrenLoaded(true); // std::cout<<"Number of children "<GetNumberOfChildren()<GetLevel()>0 ) child->SetAttribute("PARENT_ID",parent->GetAttribute("ID")); @@ -868,26 +894,30 @@ namespace creaImageIO // Query DB int nb=0; int level = n->GetLevel(); - if(GetTree().GetNumberOfLevels()!=(level+1)) + + if(level0) { - std::string query = "SELECT * FROM "; - query += GetTree().GetLevelDescriptor(level+1).GetName(); + std::string query = "SELECT D1111_0011 FROM "; + query += GetTree().GetLevelDescriptor(level).GetName(); if (level>0) { - query += " WHERE PARENT_ID='" + n->UnsafeGetAttribute("ID") + query += " WHERE ID='" + n->UnsafeGetAttribute("ID") + "'"; } - CppSQLite3Query q; QUERYDB(query,q); while (!q.eof()) { - nb++; + for (int fld = 0; fld < q.numFields(); fld++) + { + nb=q.getIntField(fld); + } q.nextRow(); } } + if(nb==0){nb=1;} return nb; } diff --git a/src2/creaImageIOTreeHandlerImageAdder.cpp b/src2/creaImageIOTreeHandlerImageAdder.cpp index b9291e1..ef31c09 100644 --- a/src2/creaImageIOTreeHandlerImageAdder.cpp +++ b/src2/creaImageIOTreeHandlerImageAdder.cpp @@ -56,7 +56,6 @@ namespace creaImageIO mProgressSignal(mProgress); if (mProgress.GetStop()) break; } - SetNumberOfChildren(); } //===================================================================== @@ -66,39 +65,9 @@ namespace creaImageIO { mProgress.Reset(); AddDirectoryRecursor( directory, recurse ); - SetNumberOfChildren(); GimmickDebugMessage(3,mProgress< children = mTreeHandler->GetTree().GetChildrenList(); - std::vector::iterator it; - for(it=children.begin();it!=children.end();++it) - { - SetNumberOfChildrenRecursor(*it); - } - } - //===================================================================== - - void TreeHandlerImageAdder::SetNumberOfChildrenRecursor(tree::Node* node) - { - std::stringstream out; - out << node->GetChildrenList().size(); - mTreeHandler->SetAttribute(node,"D1111_0011",out.str()); - if(node->GetLevel()GetTree().GetNumberOfLevels()-2) - { - std::vector children = node->GetChildrenList(); - std::vector::iterator it; - for(it=children.begin();it!=children.end();++it) - { - SetNumberOfChildrenRecursor(*it); - } - } - } - //===================================================================== void TreeHandlerImageAdder::AddFile( const std::string& filename ) { diff --git a/src2/creaImageIOTreeHandlerImageAdder.h b/src2/creaImageIOTreeHandlerImageAdder.h index 6fdaf99..bcb74c0 100644 --- a/src2/creaImageIOTreeHandlerImageAdder.h +++ b/src2/creaImageIOTreeHandlerImageAdder.h @@ -112,13 +112,6 @@ namespace creaImageIO void AddDirectoryRecursor( const std::string& directory, bool recurse ); - ///Sets the number of children for the tree - void SetNumberOfChildren(); - - ///Sets the number of children recursively for the given node - void SetNumberOfChildrenRecursor(tree::Node* node); - - TreeHandler* mTreeHandler; ImageReader mReader; diff --git a/src2/creaImageIOTreeView.h b/src2/creaImageIOTreeView.h index 5bfb116..ca493c9 100644 --- a/src2/creaImageIOTreeView.h +++ b/src2/creaImageIOTreeView.h @@ -31,8 +31,8 @@ namespace creaImageIO virtual void UpdateLevel( int ) { GimmickError("INTERNAL ERROR : TreeView::UpdateLevel not overloaded");} - ///Removes selected nodes on given level - virtual void RemoveSelected( int ) + ///Removes selected nodes + virtual void RemoveSelected( ) { GimmickError("INTERNAL ERROR : TreeView::RemoveSelected not overloaded");} ///Validates the selected images diff --git a/src2/creaImageIOWxGimmickView.cpp b/src2/creaImageIOWxGimmickView.cpp index 7e018a0..cdda6f2 100644 --- a/src2/creaImageIOWxGimmickView.cpp +++ b/src2/creaImageIOWxGimmickView.cpp @@ -547,7 +547,7 @@ namespace creaImageIO { //TODO Select current tree handler wxBusyCursor busy; - GetTreeViewMap()["Local database"]->RemoveSelected(1); + GetTreeViewMap()["Local database"]->RemoveSelected(); ClearSelection(); } //================================================= diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index c121c96..9884cb0 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -178,6 +178,7 @@ namespace creaImageIO sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW ,0); mColumnSelected=1; mLastSelected=0; + mLastLevel=0; mDirection=true; mSelectionMade=false; mProcess=true; @@ -247,12 +248,26 @@ namespace creaImageIO //===================================================================== - ///Removes selected nodes on given level - void WxTreeView::RemoveSelected( int level ) + ///Removes selected nodes on last selected level + void WxTreeView::RemoveSelected() { - std::vector sel=GetSelected(level+1); + mLastLevel+=1; + std::vector sel=GetSelected(mLastLevel+1); bool erase=false; - if (wxMessageBox(_T("Delete file(s) ?"), + std::stringstream out; + std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName(); + out<<"Delete "; + out<1&&levelName.at(levelName.size()-1)!='s') + { + out<<" "<GetTree().GetLevelDescriptor(mLastLevel).GetName()<<"?"; + } + if (wxMessageBox(_T(out.str()), _T("Remove Files"), wxYES_NO,this ) == wxYES) { @@ -260,18 +275,34 @@ namespace creaImageIO } if(erase) { + bool needRefresh=false; std::vector::iterator i; for (i=sel.begin(); i!=sel.end(); ++i) { - GimmickDebugMessage(2, + GimmickMessage(1, "deleting '" <<(*i)->GetLabel() - <<"'"<GetParent()->GetNumberOfChildren()<2) + { + needRefresh=true; + } GetTreeHandler()->Remove(*i); } - UpdateLevel(level); + if(needRefresh && mLastLevel>1) + { + UpdateLevel(mLastLevel-2); + } + else if(mLastLevel>1) + { + UpdateLevel(mLastLevel-1); + } + else + { + UpdateLevel(mLastLevel); + } } } @@ -398,6 +429,7 @@ namespace creaImageIO { if ( GetCtrl(level) == obj ) break; } + mLastLevel=level; GimmickDebugMessage(1, " Level "<ClearSelection(); @@ -666,11 +699,11 @@ namespace creaImageIO item = GetCtrl(level)->GetNextItem(item, wxLIST_NEXT_BELOW); } - if ( item == -1 ) + if ( item == -1 || item==0 ) { break; } - if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 /*&& item!=0*/) + if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 ) { adr = GetCtrl(level)->GetItemData(item); nod = ((ItemData*)adr)->node; diff --git a/src2/creaImageIOWxTreeView.h b/src2/creaImageIOWxTreeView.h index 201335d..53dac45 100644 --- a/src2/creaImageIOWxTreeView.h +++ b/src2/creaImageIOWxTreeView.h @@ -34,7 +34,7 @@ namespace creaImageIO virtual void UpdateLevel( int ); ///Removes selected nodes on given level - virtual void RemoveSelected( int ); + virtual void RemoveSelected(); /// Callback for selection change void OnSelectedChanged(wxListEvent& event); @@ -115,6 +115,7 @@ namespace creaImageIO int mAscendingID; int mDescendingID; int mFilterID; + unsigned int mLastLevel; DECLARE_EVENT_TABLE() }; -- 2.46.1