From: Frederic Cervenansky Date: Wed, 15 Apr 2009 14:13:58 +0000 (+0000) Subject: Correction sur le remove et sur la sélection du répertoire à scanner. X-Git-Tag: EED.02Oct2009~101 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=eb6dbb22921be6bf7061773b25205446619966c6;p=creaImageIO.git Correction sur le remove et sur la sélection du répertoire à scanner. --- diff --git a/src2/creaImageIOSQLiteTreeHandler.cpp b/src2/creaImageIOSQLiteTreeHandler.cpp index 8dcdd17..52042a2 100644 --- a/src2/creaImageIOSQLiteTreeHandler.cpp +++ b/src2/creaImageIOSQLiteTreeHandler.cpp @@ -148,9 +148,7 @@ namespace creaImageIO tree::Node* parent=node->GetParent(); if (parent) { - parent->RemoveChildrenFromList(node); - int nC=GetNumberOfChildren(parent); - nC=nC-1; + int nC = parent->RemoveChildrenFromList(node); if(nC>0) { std::stringstream out; @@ -869,10 +867,11 @@ namespace creaImageIO sql += GetTree().GetLevelDescriptor(n->GetLevel()).GetName(); sql += " SET "; sql += key; - sql += "='"; + sql += " = '"; sql += value; - sql += "' WHERE ID="; + sql += "' WHERE ID = '"; sql += n->GetAttribute("ID"); + sql +="'"; // sql += " LIMIT 1"; UPDATEDB(sql); } @@ -977,7 +976,7 @@ namespace creaImageIO // Query DB int nb=0; int level = n->GetLevel(); - + if(level0) { std::string query = "SELECT NumberOfChildren FROM "; diff --git a/src2/creaImageIOTreeNode.cpp b/src2/creaImageIOTreeNode.cpp index 77ba50f..faa0bf0 100644 --- a/src2/creaImageIOTreeNode.cpp +++ b/src2/creaImageIOTreeNode.cpp @@ -130,7 +130,7 @@ namespace creaImageIO //============================================================= //============================================================= - void Node::RemoveChildrenFromList(Node* node) + int Node::RemoveChildrenFromList(Node* node) { ChildrenListType::iterator i = find(GetChildrenList().begin(), GetChildrenList().end(), @@ -139,6 +139,7 @@ namespace creaImageIO { GetChildrenList().erase(i); } + return GetChildrenList().size(); } //============================================================= diff --git a/src2/creaImageIOTreeNode.h b/src2/creaImageIOTreeNode.h index c85a944..fca904c 100644 --- a/src2/creaImageIOTreeNode.h +++ b/src2/creaImageIOTreeNode.h @@ -81,7 +81,7 @@ namespace creaImageIO const ChildrenListType& GetChildrenList() const { return mChildren; } /// Remove the given children from the children list - void RemoveChildrenFromList(Node*); + int RemoveChildrenFromList(Node*); AttributeMapType& GetAttributeMap() { return mAttributeMap; } @@ -111,7 +111,6 @@ namespace creaImageIO /// Sorts the children of the node void SortChildren(const LexicographicalComparator&); - virtual void Print() const; std::string GetLabel() const; /* diff --git a/src2/creaImageIOWxGimmickView.cpp b/src2/creaImageIOWxGimmickView.cpp index f60480e..f41ec3e 100644 --- a/src2/creaImageIOWxGimmickView.cpp +++ b/src2/creaImageIOWxGimmickView.cpp @@ -12,6 +12,7 @@ using namespace crea; #include "icons/help.xpm" #include +#include namespace creaImageIO { @@ -348,40 +349,54 @@ namespace creaImageIO if (FD->ShowModal()==wxID_OK) { - bool recurse = false; - - if (wxMessageBox(_T("Recurse into sub-directories ?"), - _T("Scan directory"), - wxYES_NO,this ) == wxYES) - { - recurse = true; + std::string dirname = wx2std (FD->GetPath()); + bool recurse = isNeedRecursive(dirname); + if (recurse) + { + recurse = wxMessageBox(_T("Recurse into sub-directories ?"), _T("Scan directory"), wxYES_NO,this ) == wxYES ? true : false; + } + + wxBusyCursor busy; + wxString title(_T("Adding directory")); + if (recurse) + title = _T("Adding directory (recursive)"); + mProgressDialog = + new wxProgressDialog(_T("Adding directory"), + _T(""), + 1000, + this, + wxPD_ELAPSED_TIME | + // wxPD_ESTIMATED_TIME | + // wxPD_REMAINING_TIME | + wxPD_CAN_ABORT ); + + mCurrentDirectory = FD->GetPath(); + + // TO DO : select the current tree handler + mGimmick->AddDir("Local database",dirname,recurse); + + mProgressDialog->Pulse(_T("Updating view...")); + + UpdateTreeViewLevel("Local database",1); + delete mProgressDialog; + DisplayAddSummary(); } - - wxBusyCursor busy; - wxString title(_T("Adding directory")); - if (recurse) - title = _T("Adding directory (recursive)"); - mProgressDialog = - new wxProgressDialog(_T("Adding directory"), - _T(""), - 1000, - this, - wxPD_ELAPSED_TIME | - // wxPD_ESTIMATED_TIME | - // wxPD_REMAINING_TIME | - wxPD_CAN_ABORT ); - std::string dirname = wx2std (FD->GetPath()) ; - mCurrentDirectory = FD->GetPath(); - - // TO DO : select the current tree handler - mGimmick->AddDir("Local database",dirname,recurse); - - mProgressDialog->Pulse(_T("Updating view...")); - - UpdateTreeViewLevel("Local database",1); - delete mProgressDialog; - DisplayAddSummary(); - } + } + + //================================================= + // Test a directory to know if contains sub-directory to analyze + bool WxGimmickView::isNeedRecursive(std::string i_name) + { + boost::filesystem::directory_iterator iter(i_name), end_iter; + bool bfindir = false; + for(; iter != end_iter; ++iter) + { + if(boost::filesystem::is_directory(*iter)) + { + return true; + } + } + return false; } //================================================= diff --git a/src2/creaImageIOWxGimmickView.h b/src2/creaImageIOWxGimmickView.h index 06966a5..73b7d45 100644 --- a/src2/creaImageIOWxGimmickView.h +++ b/src2/creaImageIOWxGimmickView.h @@ -108,7 +108,9 @@ namespace creaImageIO /// Display a message box with the last addition statistics void DisplayAddSummary(); - + + /// Test a directory to know if contains sub-directory to analyze + bool isNeedRecursive(std::string i_name); /// AddProgress Gimmick callback void OnAddProgress( Gimmick::AddProgress& ); diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index 65669c8..505bf80 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -474,10 +474,14 @@ namespace creaImageIO GetCtrl(l)->InsertItem(item); //Setting attributes - - for (int k=0; kGetColumnCount(); k++) + for (int k=0; kGetColumnCount(); ++k) { - std::string val = (*j)->GetAttribute(mLevelList[l].key[k]); + std::string val; + // Temporary correction : it works but no explanation about the problem FCY + if(k==0 && level <3) + val = (*j)->GetAttribute("NumberOfChildren"); + else + val = (*j)->GetAttribute(mLevelList[l].key[k]); if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isDateEntry()) // Date { boost::gregorian::date d1(boost::gregorian::from_undelimited_string(val));