1 /* 2 * Copyright (c) 2008 Stephan Aßmus <superstippi@gmx.de> 3 * Copyright (c) 1998-2007 Matthijs Hollemans 4 * All rights reserved. Distributed under the terms of the MIT License. 5 */ 6 #ifndef INITIAL_ITERATOR_H 7 #define INITIAL_ITERATOR_H 8 9 #include <List.h> 10 #include <Message.h> 11 12 #include "FileIterator.h" 13 14 class BEntry; 15 class BDirectory; 16 class Model; 17 18 // TODO: split into Folder and MessageFileIterator (_GetTopEntry) 19 // This code either has an original folder to start iterating from, 20 // or it uses the refs in the message that contains the selected poses 21 // from the Tracker window that invoked us. But I think if folders are 22 // among those poses, it will then use the same code for examining sub 23 // folders. 24 25 // Provides an interface to retrieve the next file that should be grepped 26 // for the search string. 27 class InitialIterator : public FileIterator { 28 public: 29 InitialIterator(const Model* model); 30 virtual ~InitialIterator(); 31 32 virtual bool IsValid() const; 33 virtual bool GetNextName(char* buffer); 34 virtual bool NotifyNegatives() const; 35 36 // Looks for the next entry in the top-level dir. 37 bool GetTopEntry(BEntry& entry); 38 39 // Should this subfolder be followed? 40 bool FollowSubdir(BEntry& entry) const; 41 42 private: 43 // Looks for the next entry. 44 bool _GetNextEntry(BEntry& entry); 45 46 // Looks for the next entry in a subdir. 47 bool _GetSubEntry(BEntry& entry); 48 49 // Determines whether we can add a subdir. 50 void _ExamineSubdir(BEntry& entry); 51 52 private: 53 // Contains pointers to BDirectory objects. 54 BList fDirectories; 55 56 // The directory we are currently looking at. 57 BDirectory* fCurrentDir; 58 59 // The ref number we are currently looking at. 60 int32 fCurrentRef; 61 62 // The current settings 63 BMessage fSelectedFiles; 64 65 bool fRecurseDirs : 1; 66 bool fRecurseLinks : 1; 67 bool fSkipDotDirs : 1; 68 bool fTextOnly : 1; 69 }; 70 71 #endif // INITIAL_ITERATOR_H 72