1 #include <creaImageIOTreeHandlerImageAdder.h>
4 #include <wx/filename.h>
10 //====================================================================
12 TreeHandlerImageAdder::TreeHandlerImageAdder(TreeHandler* tree)
17 TreeHandlerImageAdder::~TreeHandlerImageAdder()
20 //====================================================================
22 //====================================================================
23 void TreeHandlerImageAdder::ConnectProgressObserver(ProgressCallbackType callback)
25 mProgressSignal.connect(callback);
27 //====================================================================
29 //=====================================================================
30 bool TreeHandlerImageAdder::IsHandledFile( const std::string& filename)
32 return (mReader.CanRead(filename));
34 //=====================================================================
36 //=====================================================================
37 void TreeHandlerImageAdder::AddFiles( const std::vector<std::string>& filenames)
41 unsigned int nbf = filenames.size();
42 std::vector<std::string>::const_iterator i;
43 for (i=filenames.begin();i!=filenames.end();++i)
45 mProgress.IncNumberScannedFiles();
46 if (IsHandledFile(*i))
48 mProgress.IncNumberHandledFiles();
51 mProgressSignal(mProgress);
52 if (mProgress.GetStop()) break;
55 //=====================================================================
57 //=====================================================================
58 void TreeHandlerImageAdder::AddDirectory( const std::string& directory,
62 AddDirectoryRecursor( directory, recurse );
64 //=====================================================================
69 //=====================================================================
70 void TreeHandlerImageAdder::AddFile( const std::string& filename )
73 std::map< std::string, std::string> attr;
74 mTreeHandler->GetTree().GetDescriptor().BuildAttributeMap(attr);
76 mReader.ReadAttributes(filename,attr);
78 int lev = mTreeHandler->AddBranch(attr);
80 // update the progress according to lev
81 if (lev<mTreeHandler->GetTree().GetNumberOfLevels())
82 mProgress.IncNumberAddedFiles();
84 //=====================================================================
86 //=====================================================================
87 void TreeHandlerImageAdder::AddDirectoryRecursor(const std::string &dirpath,
90 mProgress.IncNumberScannedDirs();
93 std::string dirName = dirpath;
95 wxDir dir( std2wx(dirpath) );
97 if ( !dir.IsOpened() )
99 // deal with the error here - wxDir would already log an error message
100 // explaining the exact reason of the failure
106 bool cont = dir.GetFirst(&filename, wxEmptyString,
107 wxDIR_FILES | wxDIR_HIDDEN );
110 mProgress.IncNumberScannedFiles();
112 wxFileName wxffn(dir.GetName(),filename);
113 std::string ffn = wx2std(wxffn.GetFullPath());
114 if (IsHandledFile(ffn))
116 mProgress.IncNumberHandledFiles();
119 mProgressSignal(mProgress);
120 cont = ( dir.GetNext(&filename) && (!mProgress.GetStop()) );
123 // Recurse into subdirs
126 cont = dir.GetFirst(&filename, wxEmptyString,
127 wxDIR_DIRS | wxDIR_HIDDEN );
130 wxFileName wxffn(dir.GetName(),filename);
131 std::string ffn = wx2std(wxffn.GetFullPath());
132 AddDirectoryRecursor( ffn, recursive);
133 cont = dir.GetNext(&filename);
138 //=======================================================================