annotate layer/LayerFactory.h @ 37:21d061e66177

* Make the frequency estimation mode in the spectrogram layer actually useful, and make sure it gets mostly the right results... Still some tidying to do in here.
author Chris Cannam
date Wed, 22 Feb 2006 17:45:18 +0000
parents 10ba9276a315
children ad214997dddb
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@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@30 31 Notes,
Chris@35 32 Text,
Chris@0 33 Colour3DPlot,
Chris@0 34
Chris@0 35 // Layers with different initial parameters
Chris@0 36 MelodicRangeSpectrogram,
Chris@37 37 PeakFrequencySpectrogram,
Chris@0 38
Chris@0 39 // Not-a-layer-type
Chris@0 40 UnknownLayer = 255
Chris@0 41 };
Chris@0 42
Chris@0 43 static LayerFactory *instance();
Chris@0 44
Chris@0 45 virtual ~LayerFactory();
Chris@0 46
Chris@0 47 typedef std::set<LayerType> LayerTypeSet;
Chris@0 48 LayerTypeSet getValidLayerTypes(Model *model);
Chris@17 49 LayerTypeSet getValidEmptyLayerTypes();
Chris@0 50
Chris@6 51 LayerType getLayerType(const Layer *);
Chris@0 52
Chris@0 53 Layer *createLayer(LayerType type, View *view,
Chris@0 54 Model *model = 0, int channel = -1);
Chris@0 55
Chris@0 56 QString getLayerPresentationName(LayerType type);
Chris@0 57
Chris@0 58 void setModel(Layer *layer, Model *model);
Chris@17 59 Model *createEmptyModel(LayerType type, Model *baseModel);
Chris@0 60
Chris@17 61 QString getLayerIconName(LayerType);
Chris@6 62 QString getLayerTypeName(LayerType);
Chris@6 63 LayerType getLayerTypeForName(QString);
Chris@6 64
Chris@0 65 protected:
Chris@0 66 template <typename LayerClass, typename ModelClass>
Chris@0 67 bool trySetModel(Layer *layerBase, Model *modelBase) {
Chris@0 68 LayerClass *layer = dynamic_cast<LayerClass *>(layerBase);
Chris@0 69 if (!layer) return false;
Chris@0 70 ModelClass *model = dynamic_cast<ModelClass *>(modelBase);
Chris@17 71 if (!model) return false;
Chris@0 72 layer->setModel(model);
Chris@0 73 return true;
Chris@0 74 }
Chris@0 75
Chris@0 76 static LayerFactory *m_instance;
Chris@0 77 };
Chris@0 78
Chris@0 79 #endif
Chris@0 80