1 #include <creaImageIOTreeHandlerImageAdder.h>
2 #include <creaImageIOSystem.h>
4 //#include <wx/filename.h>
6 #include "boost/filesystem.hpp"
8 namespace fs = boost::filesystem;
10 //using namespace crea;
14 //====================================================================
16 TreeHandlerImageAdder::TreeHandlerImageAdder(TreeHandler* tree)
21 TreeHandlerImageAdder::~TreeHandlerImageAdder()
24 //====================================================================
26 //====================================================================
27 void TreeHandlerImageAdder::ConnectProgressObserver(ProgressCallbackType callback)
29 mProgressSignal.connect(callback);
31 //====================================================================
33 //=====================================================================
34 bool TreeHandlerImageAdder::IsHandledFile( const std::string& filename)
36 return (mReader.CanRead(filename));
38 //=====================================================================
40 //=====================================================================
41 void TreeHandlerImageAdder::AddFiles( const std::vector<std::string>& filenames)
45 unsigned int nbf = filenames.size();
46 std::vector<std::string>::const_iterator i;
47 for (i=filenames.begin();i!=filenames.end();++i)
50 mProgress.IncNumberScannedFiles();
51 if (IsHandledFile(*i))
53 mProgress.IncNumberHandledFiles();
56 mProgressSignal(mProgress);
57 if (mProgress.GetStop()) break;
60 //=====================================================================
62 //=====================================================================
63 void TreeHandlerImageAdder::AddDirectory( const std::string& directory,
67 AddDirectoryRecursor( directory, recurse );
68 GimmickDebugMessage(3,mProgress<<std::endl);
71 //=====================================================================
72 void TreeHandlerImageAdder::AddFile( const std::string& filename )
74 GimmickDebugMessage(4,"Adding '"<<filename<<"'"<<std::endl);
75 std::map< std::string, std::string> attr;
76 mTreeHandler->GetTree().GetDescriptor().BuildAttributeMap(attr);
78 mReader.ReadAttributes(filename,attr);
80 int lev = mTreeHandler->AddBranch(attr);
82 // update the progress according to lev
83 if (lev<mTreeHandler->GetTree().GetNumberOfLevels())
84 mProgress.IncNumberAddedFiles();
86 //=====================================================================
88 //=====================================================================
89 void TreeHandlerImageAdder::AddDirectoryRecursor(const std::string &dirpath,
92 GimmickDebugMessage(4,"Scanning '"<<dirpath<<"'"<<std::endl);
93 mProgress.IncNumberScannedDirs();
95 if ( !fs::exists( dirpath ) ) return;
97 fs::directory_iterator end_itr; // default construction yields past-the-end
98 for ( fs::directory_iterator itr( dirpath );
102 // If is directory & recurse : do recurse
103 if ( fs::is_directory(itr->status()) )
105 if (recursive) AddDirectoryRecursor( itr->string(), recursive);
109 mProgress.IncNumberScannedFiles();
110 if (IsHandledFile(itr->string()))
112 mProgress.IncNumberHandledFiles();
113 AddFile( itr->string() );
115 mProgressSignal(mProgress);
116 if (mProgress.GetStop()) break;
124 std::string fileName;
125 std::string dirName = dirpath;
127 wxDir dir( std2wx(dirpath) );
129 if ( !dir.IsOpened() )
131 // deal with the error here - wxDir would already log an error message
132 // explaining the exact reason of the failure
138 bool cont = dir.GetFirst(&filename, wxEmptyString,
139 wxDIR_FILES | wxDIR_HIDDEN );
142 mProgress.IncNumberScannedFiles();
144 wxFileName wxffn(dir.GetName(),filename);
145 std::string ffn = wx2std(wxffn.GetFullPath());
146 if (IsHandledFile(ffn))
148 mProgress.IncNumberHandledFiles();
151 mProgressSignal(mProgress);
152 cont = ( dir.GetNext(&filename) && (!mProgress.GetStop()) );
155 // Recurse into subdirs
158 cont = dir.GetFirst(&filename, wxEmptyString,
159 wxDIR_DIRS | wxDIR_HIDDEN );
162 wxFileName wxffn(dir.GetName(),filename);
163 std::string ffn = wx2std(wxffn.GetFullPath());
164 AddDirectoryRecursor( ffn, recursive);
165 cont = dir.GetNext(&filename);
171 //=======================================================================