| Chris@582 | 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */ | 
| Chris@582 | 2 | 
| Chris@582 | 3 /* | 
| Chris@582 | 4     Sonic Visualiser | 
| Chris@582 | 5     An audio file viewer and annotation editor. | 
| Chris@582 | 6     Centre for Digital Music, Queen Mary, University of London. | 
| Chris@582 | 7     This file copyright 2009 QMUL. | 
| Chris@582 | 8 | 
| Chris@582 | 9     This program is free software; you can redistribute it and/or | 
| Chris@582 | 10     modify it under the terms of the GNU General Public License as | 
| Chris@582 | 11     published by the Free Software Foundation; either version 2 of the | 
| Chris@582 | 12     License, or (at your option) any later version.  See the file | 
| Chris@582 | 13     COPYING included with this distribution for more information. | 
| Chris@582 | 14 */ | 
| Chris@582 | 15 | 
| Chris@582 | 16 #ifndef _FILE_FINDER_H_ | 
| Chris@582 | 17 #define _FILE_FINDER_H_ | 
| Chris@582 | 18 | 
| Chris@582 | 19 #include <QString> | 
| Chris@582 | 20 | 
| Chris@582 | 21 class FileFinder | 
| Chris@582 | 22 { | 
| Chris@582 | 23 public: | 
| Chris@582 | 24     enum FileType { | 
| Chris@582 | 25         SessionFile, | 
| Chris@582 | 26         AudioFile, | 
| Chris@582 | 27         LayerFile, | 
| Chris@582 | 28         LayerFileNoMidi, | 
| Chris@582 | 29         SessionOrAudioFile, | 
| Chris@582 | 30         ImageFile, | 
| Chris@837 | 31         AnyFile, | 
| Chris@837 | 32         CSVFile, | 
| Chris@858 | 33         LayerFileNonSV, | 
| Chris@858 | 34         LayerFileNoMidiNonSV, | 
| Chris@582 | 35     }; | 
| Chris@582 | 36 | 
| Chris@582 | 37     virtual QString getOpenFileName(FileType type, QString fallbackLocation = "") = 0; | 
| Chris@582 | 38     virtual QString getSaveFileName(FileType type, QString fallbackLocation = "") = 0; | 
| Chris@582 | 39     virtual void registerLastOpenedFilePath(FileType type, QString path) = 0; | 
| Chris@582 | 40 | 
| Chris@582 | 41     virtual QString find(FileType type, QString location, QString lastKnownLocation = "") = 0; | 
| Chris@582 | 42 | 
| Chris@622 | 43     static FileFinder *getInstance() { | 
| Chris@622 | 44         FFContainer *container = FFContainer::getInstance(); | 
| Chris@622 | 45         return container->getFileFinder(); | 
| Chris@622 | 46     } | 
| Chris@582 | 47 | 
| Chris@582 | 48 protected: | 
| Chris@622 | 49     class FFContainer { | 
| Chris@622 | 50     public: | 
| Chris@622 | 51         static FFContainer *getInstance() { | 
| Chris@622 | 52             static FFContainer instance; | 
| Chris@622 | 53             return &instance; | 
| Chris@622 | 54         } | 
| Chris@622 | 55         void setFileFinder(FileFinder *ff) { m_ff = ff; } | 
| Chris@622 | 56         FileFinder *getFileFinder() const { return m_ff; } | 
| Chris@622 | 57     private: | 
| Chris@622 | 58         FileFinder *m_ff; | 
| Chris@622 | 59     }; | 
| Chris@622 | 60 | 
| Chris@622 | 61     static void registerFileFinder(FileFinder *ff) { | 
| Chris@622 | 62         FFContainer *container = FFContainer::getInstance(); | 
| Chris@622 | 63         container->setFileFinder(ff); | 
| Chris@622 | 64     } | 
| Chris@582 | 65 }; | 
| Chris@582 | 66 | 
| Chris@582 | 67 #endif | 
| Chris@582 | 68 | 
| Chris@582 | 69 |