1 #include <creaImageIOTreeHandlerImageAdder.h>
2 #include <creaImageIOSystem.h>
3 #include "boost/filesystem.hpp"
5 namespace fs = boost::filesystem;
7 //using namespace crea;
11 //====================================================================
13 TreeHandlerImageAdder::TreeHandlerImageAdder(TreeHandler* tree)
18 TreeHandlerImageAdder::~TreeHandlerImageAdder()
21 //====================================================================
23 //====================================================================
24 void TreeHandlerImageAdder::ConnectProgressObserver(ProgressCallbackType callback)
26 mProgressSignal.connect(callback);
28 //====================================================================
30 //=====================================================================
31 bool TreeHandlerImageAdder::IsHandledFile( const std::string& filename)
33 return (mReader.CanRead(filename));
35 //=====================================================================
37 //=====================================================================
38 void TreeHandlerImageAdder::AddFiles( const std::vector<std::string>& filenames)
42 unsigned int nbf = filenames.size();
43 std::vector<std::string>::const_iterator i;
44 for (i=filenames.begin();i!=filenames.end();++i)
47 mProgress.IncNumberScannedFiles();
48 if (IsHandledFile(*i))
50 mProgress.IncNumberHandledFiles();
53 mProgressSignal(mProgress);
54 if (mProgress.GetStop()) break;
57 //=====================================================================
59 //=====================================================================
60 void TreeHandlerImageAdder::AddDirectory( const std::string& directory,
64 AddDirectoryRecursor( directory, recurse );
65 GimmickDebugMessage(3,mProgress<<std::endl);
68 //=====================================================================
69 void TreeHandlerImageAdder::AddFile( const std::string& filename )
71 GimmickDebugMessage(4,"Adding '"<<filename<<"'"<<std::endl);
72 std::map< std::string, std::string> attr;
73 mTreeHandler->GetTree().GetDescriptor().BuildAttributeMap(attr);
75 mReader.ReadAttributes(filename,attr);
77 int lev = mTreeHandler->AddBranch(attr);
79 // update the progress according to lev
80 if (lev<mTreeHandler->GetTree().GetNumberOfLevels())
81 mProgress.IncNumberAddedFiles();
83 //=====================================================================
85 //=====================================================================
86 void TreeHandlerImageAdder::AddDirectoryRecursor(const std::string &dirpath,
89 GimmickDebugMessage(4,"Scanning '"<<dirpath<<"'"<<std::endl);
90 mProgress.IncNumberScannedDirs();
92 if ( !fs::exists( dirpath ) ) return;
94 fs::directory_iterator end_itr; // default construction yields past-the-end
95 for ( fs::directory_iterator itr( dirpath );
99 // If is directory & recurse : do recurse
100 if ( fs::is_directory(itr->status()) )
102 if (recursive) AddDirectoryRecursor( itr->string(), recursive);
106 mProgress.IncNumberScannedFiles();
107 if (IsHandledFile(itr->string()))
109 mProgress.IncNumberHandledFiles();
110 AddFile( itr->string() );
112 mProgressSignal(mProgress);
113 if (mProgress.GetStop())
121 //=======================================================================