1 #ifndef __creaImageIOTreeHandlerImageAdder_h_INCLUDED__
2 #define __creaImageIOTreeHandlerImageAdder_h_INCLUDED__
4 #include <creaImageIOTreeHandler.h>
5 #include <creaImageIOImageReader.h>
7 #include <wx/progdlg.h>
8 // Signal/slot mechanism for progress events
9 #include <boost/signal.hpp>
10 #include <boost/bind.hpp>
19 //=======================================================================
20 /// Object which can add images files to a TreeHandler. Is able to parse (recursively) a part of a filesystem to look for known images and load their attributes in order to add the images to a Tree (submission via a TreeHandler::AddBranch)
22 class TreeHandlerImageAdder
25 //====================================================================
27 TreeHandlerImageAdder(TreeHandler* tree);
29 ~TreeHandlerImageAdder();
30 /// Sets the TreeHandler
31 void SetTreeHandler(TreeHandler* tree) { mTreeHandler = tree;}
32 //====================================================================
34 //====================================================================
35 /// Structure which holds progress information
36 /// To stop the image adder use SetStop()
40 Progress() { Reset(); }
46 mNumberScannedFiles = 0;
47 mNumberScannedDirs = 0;
48 mNumberHandledFiles = 0;
49 mNumberAddedFiles = 0;
52 int GetNumberScannedFiles() const { return mNumberScannedFiles; }
53 int GetNumberScannedDirs() const { return mNumberScannedDirs; }
54 int GetNumberHandledFiles() const { return mNumberHandledFiles; }
55 int GetNumberAddedFiles() const { return mNumberAddedFiles; }
57 void IncNumberScannedFiles() { mNumberScannedFiles++; }
58 void IncNumberScannedDirs() { mNumberScannedDirs++; }
59 void IncNumberHandledFiles() { mNumberHandledFiles++; }
60 void IncNumberAddedFiles() { mNumberAddedFiles++; }
62 void SetStop() { mStop = true; }
63 bool GetStop() const { return mStop; }
67 int mNumberScannedFiles;
68 int mNumberScannedDirs;
69 int mNumberHandledFiles;
70 int mNumberAddedFiles;
72 //=============================================
74 //=============================================
75 const Progress& GetProgress() const { return mProgress; }
76 //=============================================
78 //=============================================
79 typedef boost::signal<void (Progress&)> ProgressSignalType;
80 typedef ProgressSignalType::slot_function_type ProgressCallbackType;
81 //=============================================
83 //==================================================================
84 /// Adds the function f to the list of functions to call
85 /// when the addition progresses.
86 /// f is of type ProgressCallbackType which is:
87 /// void (*ProgressCallbackType)(Progress&)
88 /// To pass a member function 'f' of an instance 'c' of a class 'C'
89 /// as callback you have to 'bind' it, i.e. call:
90 /// ConnectProgressObserver ( boost::bind( &C::f , c, _1 ) );
91 void ConnectProgressObserver(ProgressCallbackType callback);
92 //==================================================================
94 //====================================================================
95 /// Returns if the file can be read or not
96 bool IsHandledFile( const std::string& filename);
97 /// Adds a list of files to the TreeHandler
98 void AddFiles( const std::vector<std::string>& filename );
99 /// (Recursively) adds the files of a directory to the TreeHandler
100 void AddDirectory( const std::string& directory,
102 //====================================================================
106 /// Adds a single file to the TreeHandler
107 /// **WITHOUT** testing wether it is handled or not
108 /// hence you have to call IsHandledFile before using AddFile!
109 void AddFile( const std::string& filename );
111 /// Recursive method which does the main job for AddDirectory
112 void AddDirectoryRecursor( const std::string& directory,
115 TreeHandler* mTreeHandler;
119 ProgressSignalType mProgressSignal;
123 // EO class TreeHandlerImageAdder
124 //=======================================================================
130 } // EO namespace creaImageIO
133 inline std::ostream& operator << ( std::ostream& o,
134 const creaImageIO::TreeHandlerImageAdder::Progress& p)
136 o << p.GetNumberScannedFiles() << " files - "
137 << p.GetNumberScannedDirs() << " dirs - "
138 << p.GetNumberHandledFiles() << " handled -"
139 << p.GetNumberAddedFiles() << " added";