| Chris@0 | 1 /* -*- c-basic-offset: 4 -*-  vi:set ts=8 sts=4 sw=4: */ | 
| Chris@0 | 2 | 
| Chris@0 | 3 /* | 
| Chris@0 | 4     A waveform viewer and audio annotation editor. | 
| Chris@5 | 5     Chris Cannam, Queen Mary University of London, 2005-2006 | 
| Chris@0 | 6 | 
| Chris@0 | 7     This is experimental software.  Not for distribution. | 
| Chris@0 | 8 */ | 
| Chris@0 | 9 | 
| Chris@0 | 10 #ifndef _LAYER_FACTORY_H_ | 
| Chris@0 | 11 #define _LAYER_FACTORY_H_ | 
| Chris@0 | 12 | 
| Chris@0 | 13 #include <QString> | 
| Chris@0 | 14 #include <set> | 
| Chris@0 | 15 | 
| Chris@0 | 16 class Layer; | 
| Chris@0 | 17 class View; | 
| Chris@0 | 18 class Model; | 
| Chris@0 | 19 | 
| Chris@0 | 20 class LayerFactory | 
| Chris@0 | 21 { | 
| Chris@0 | 22 public: | 
| Chris@0 | 23     enum LayerType { | 
| Chris@0 | 24 | 
| Chris@0 | 25 	// Standard layers | 
| Chris@0 | 26 	Waveform, | 
| Chris@0 | 27 	Spectrogram, | 
| Chris@0 | 28 	TimeRuler, | 
| Chris@0 | 29 	TimeInstants, | 
| Chris@0 | 30 	TimeValues, | 
| Chris@0 | 31 	Colour3DPlot, | 
| Chris@0 | 32 | 
| Chris@0 | 33 	// Layers with different initial parameters | 
| Chris@0 | 34 	MelodicRangeSpectrogram, | 
| Chris@0 | 35 | 
| Chris@0 | 36 	// Not-a-layer-type | 
| Chris@0 | 37 	UnknownLayer = 255 | 
| Chris@0 | 38     }; | 
| Chris@0 | 39 | 
| Chris@0 | 40     static LayerFactory *instance(); | 
| Chris@0 | 41 | 
| Chris@0 | 42     virtual ~LayerFactory(); | 
| Chris@0 | 43 | 
| Chris@0 | 44     typedef std::set<LayerType> LayerTypeSet; | 
| Chris@0 | 45     LayerTypeSet getValidLayerTypes(Model *model); | 
| Chris@0 | 46 | 
| Chris@6 | 47     LayerType getLayerType(const Layer *); | 
| Chris@0 | 48 | 
| Chris@0 | 49     Layer *createLayer(LayerType type, View *view, | 
| Chris@0 | 50 		       Model *model = 0, int channel = -1); | 
| Chris@0 | 51 | 
| Chris@0 | 52     QString getLayerPresentationName(LayerType type); | 
| Chris@0 | 53 | 
| Chris@0 | 54     void setModel(Layer *layer, Model *model); | 
| Chris@0 | 55 | 
| Chris@6 | 56     QString getLayerTypeName(LayerType); | 
| Chris@6 | 57     LayerType getLayerTypeForName(QString); | 
| Chris@6 | 58 | 
| Chris@0 | 59 protected: | 
| Chris@0 | 60     template <typename LayerClass, typename ModelClass> | 
| Chris@0 | 61     bool trySetModel(Layer *layerBase, Model *modelBase) { | 
| Chris@0 | 62 	LayerClass *layer = dynamic_cast<LayerClass *>(layerBase); | 
| Chris@0 | 63 	if (!layer) return false; | 
| Chris@0 | 64 	ModelClass *model = dynamic_cast<ModelClass *>(modelBase); | 
| Chris@0 | 65 	layer->setModel(model); | 
| Chris@0 | 66 	return true; | 
| Chris@0 | 67     } | 
| Chris@0 | 68 | 
| Chris@0 | 69     static LayerFactory *m_instance; | 
| Chris@0 | 70 }; | 
| Chris@0 | 71 | 
| Chris@0 | 72 #endif | 
| Chris@0 | 73 |