annotate layer/LayerFactory.h @ 1:ab83c415a6cd

* Backed out partially complete changes to make the spectrogram only store results up to the requested max frequency. The speed improvement was minimal at the expense of annoyance when changing frequency limit, and although it did save memory, it wasn't yet reliable and fixing it is not a high enough priority.
author Chris Cannam
date Tue, 10 Jan 2006 17:04:02 +0000
parents 2a4f26e85b4c
children 37b110168acf
rev   line source
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@0 5 Chris Cannam, Queen Mary University of London, 2005
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@0 47 LayerType getLayerType(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@0 56 protected:
Chris@0 57 template <typename LayerClass, typename ModelClass>
Chris@0 58 bool trySetModel(Layer *layerBase, Model *modelBase) {
Chris@0 59 LayerClass *layer = dynamic_cast<LayerClass *>(layerBase);
Chris@0 60 if (!layer) return false;
Chris@0 61 ModelClass *model = dynamic_cast<ModelClass *>(modelBase);
Chris@0 62 layer->setModel(model);
Chris@0 63 return true;
Chris@0 64 }
Chris@0 65
Chris@0 66 static LayerFactory *m_instance;
Chris@0 67 };
Chris@0 68
Chris@0 69 #endif
Chris@0 70