]> Creatis software - creaImageIO.git/blob - src2/creaImageIOTreeHandlerImageAdder.cpp
*** empty log message ***
[creaImageIO.git] / src2 / creaImageIOTreeHandlerImageAdder.cpp
1 #include <creaImageIOTreeHandlerImageAdder.h>
2 #include <creaImageIOSystem.h>
3 //#include <wx/dir.h>
4 //#include <wx/filename.h>
5
6 #include "boost/filesystem.hpp"
7
8 namespace fs = boost::filesystem;
9
10 //using namespace crea;
11
12 namespace creaImageIO
13 {
14   //====================================================================
15   // Ctor
16   TreeHandlerImageAdder::TreeHandlerImageAdder(TreeHandler* tree)
17     : mTreeHandler(tree)
18   {
19   }
20   // Dtor
21   TreeHandlerImageAdder::~TreeHandlerImageAdder()
22   {
23   }
24   //====================================================================
25
26   //====================================================================
27   void TreeHandlerImageAdder::ConnectProgressObserver(ProgressCallbackType callback)
28   {
29     mProgressSignal.connect(callback);
30   }
31   //====================================================================
32
33   //=====================================================================
34   bool TreeHandlerImageAdder::IsHandledFile( const std::string& filename)
35   {
36     return (mReader.CanRead(filename));
37   }
38   //=====================================================================
39
40   //=====================================================================
41   void TreeHandlerImageAdder::AddFiles( const std::vector<std::string>& filenames)
42   {
43     mProgress.Reset();
44
45     unsigned int nbf = filenames.size(); 
46     std::vector<std::string>::const_iterator i;
47     for (i=filenames.begin();i!=filenames.end();++i)
48       {
49         mProgress.IncNumberScannedFiles();
50         if (IsHandledFile(*i)) 
51           {
52             mProgress.IncNumberHandledFiles();
53             AddFile(*i);
54           }
55         mProgressSignal(mProgress);
56         if (mProgress.GetStop()) break;
57       }
58   }
59   //=====================================================================
60
61   //=====================================================================
62   void TreeHandlerImageAdder::AddDirectory( const std::string& directory,
63                                             bool recurse)
64   {
65     mProgress.Reset();
66     AddDirectoryRecursor( directory, recurse );
67     GimmickDebugMessage(3,mProgress<<std::endl);
68   }
69   //=====================================================================
70
71
72
73
74   //=====================================================================
75   void TreeHandlerImageAdder::AddFile( const std::string& filename )
76   {
77     GimmickDebugMessage(4,"Adding '"<<filename<<"'"<<std::endl);
78     std::map< std::string, std::string>  attr;
79     mTreeHandler->GetTree().GetDescriptor().BuildAttributeMap(attr);
80
81     mReader.ReadAttributes(filename,attr);
82
83     int lev = mTreeHandler->AddBranch(attr);
84
85     // update the progress according to lev
86     if (lev<mTreeHandler->GetTree().GetNumberOfLevels())
87       mProgress.IncNumberAddedFiles();
88   }
89   //=====================================================================
90
91   //=====================================================================
92   void TreeHandlerImageAdder::AddDirectoryRecursor(const std::string &dirpath, 
93                                                    bool recursive)
94   {
95     GimmickDebugMessage(4,"Scanning '"<<dirpath<<"'"<<std::endl);
96     mProgress.IncNumberScannedDirs();
97
98     if ( !fs::exists( dirpath ) ) return;
99     
100     fs::directory_iterator end_itr; // default construction yields past-the-end
101     for ( fs::directory_iterator itr( dirpath );
102           itr != end_itr;
103           ++itr )
104       {
105         // If is directory & recurse : do recurse
106         if ( fs::is_directory(itr->status()) )
107           {
108             if (recursive) AddDirectoryRecursor( itr->string(), recursive);
109           }
110         else 
111           {
112             mProgress.IncNumberScannedFiles();
113             if (IsHandledFile(itr->string()))
114               {
115                 mProgress.IncNumberHandledFiles();
116                 AddFile( itr->string() );
117               }
118             mProgressSignal(mProgress);
119             if (mProgress.GetStop()) break;
120           }
121       }
122   }
123
124     /*
125
126     std::string fileName;
127     std::string dirName = dirpath;
128
129     wxDir dir( std2wx(dirpath) );
130
131     if ( !dir.IsOpened() )
132       {
133         // deal with the error here - wxDir would already log an error message
134         // explaining the exact reason of the failure
135         return;
136       }
137
138     wxString filename;
139
140     bool cont = dir.GetFirst(&filename, wxEmptyString, 
141                              wxDIR_FILES | wxDIR_HIDDEN );
142     while ( cont )
143       {
144         mProgress.IncNumberScannedFiles();
145
146         wxFileName wxffn(dir.GetName(),filename);
147         std::string ffn = wx2std(wxffn.GetFullPath());
148         if (IsHandledFile(ffn)) 
149           {
150             mProgress.IncNumberHandledFiles();
151             AddFile( ffn );
152           }
153         mProgressSignal(mProgress);
154         cont = ( dir.GetNext(&filename) && (!mProgress.GetStop()) );
155       }
156     
157     // Recurse into subdirs
158     if ( recursive )
159       {
160         cont = dir.GetFirst(&filename, wxEmptyString, 
161                             wxDIR_DIRS | wxDIR_HIDDEN );
162         while ( cont )
163           {
164             wxFileName wxffn(dir.GetName(),filename);
165             std::string ffn = wx2std(wxffn.GetFullPath());
166             AddDirectoryRecursor( ffn, recursive);
167             cont = dir.GetNext(&filename);
168           }
169       }
170   
171   */
172   
173   //=======================================================================
174
175
176  
177 }