33 #include "base/Clipboard.h" 35 #include "data/model/RangeSummarisableTimeValueModel.h" 36 #include "data/model/DenseTimeValueModel.h" 37 #include "data/model/SparseOneDimensionalModel.h" 38 #include "data/model/SparseTimeValueModel.h" 39 #include "data/model/NoteModel.h" 40 #include "data/model/FlexiNoteModel.h" 41 #include "data/model/RegionModel.h" 42 #include "data/model/TextModel.h" 43 #include "data/model/ImageModel.h" 44 #include "data/model/DenseThreeDimensionalModel.h" 45 #include "data/model/WaveFileModel.h" 46 #include "data/model/WritableWaveFileModel.h" 48 #include <QDomDocument> 49 #include <QDomElement> 50 #include <QDomNamedNodeMap> 72 case Waveform:
return Layer::tr(
"Waveform");
74 case TimeRuler:
return Layer::tr(
"Ruler");
76 case TimeValues:
return Layer::tr(
"Time Values");
77 case Notes:
return Layer::tr(
"Notes");
78 case FlexiNotes:
return Layer::tr(
"Flexible Notes");
79 case Regions:
return Layer::tr(
"Regions");
80 case Text:
return Layer::tr(
"Text");
81 case Image:
return Layer::tr(
"Images");
83 case Spectrum:
return Layer::tr(
"Spectrum");
84 case Slice:
return Layer::tr(
"Time Slice");
90 return Layer::tr(
"Spectrogram");
94 return Layer::tr(
"Spectrogram");
98 cerr <<
"WARNING: LayerFactory::getLayerPresentationName passed unknown layer" << endl;
99 return Layer::tr(
"Unknown Layer");
106 if (dynamic_cast<const SliceableLayer *>(layer)) {
107 if (dynamic_cast<const SpectrogramLayer *>(layer)) {
141 if (dynamic_cast<DenseThreeDimensionalModel *>(model)) {
146 if (dynamic_cast<RangeSummarisableTimeValueModel *>(model)) {
150 if (dynamic_cast<DenseTimeValueModel *>(model)) {
156 if (dynamic_cast<SparseOneDimensionalModel *>(model)) {
160 if (dynamic_cast<SparseTimeValueModel *>(model)) {
164 if (dynamic_cast<NoteModel *>(model)) {
169 if (dynamic_cast<FlexiNoteModel *>(model)) {
173 if (dynamic_cast<RegionModel *>(model)) {
177 if (dynamic_cast<TextModel *>(model)) {
181 if (dynamic_cast<ImageModel *>(model)) {
185 if (dynamic_cast<DenseTimeValueModel *>(model)) {
213 if (dynamic_cast<const WaveformLayer *>(layer))
return Waveform;
214 if (dynamic_cast<const SpectrogramLayer *>(layer))
return Spectrogram;
215 if (dynamic_cast<const TimeRulerLayer *>(layer))
return TimeRuler;
216 if (dynamic_cast<const TimeInstantLayer *>(layer))
return TimeInstants;
217 if (dynamic_cast<const TimeValueLayer *>(layer))
return TimeValues;
218 if (dynamic_cast<const FlexiNoteLayer *>(layer))
return FlexiNotes;
219 if (dynamic_cast<const NoteLayer *>(layer))
return Notes;
220 if (dynamic_cast<const RegionLayer *>(layer))
return Regions;
221 if (dynamic_cast<const TextLayer *>(layer))
return Text;
222 if (dynamic_cast<const ImageLayer *>(layer))
return Image;
223 if (dynamic_cast<const Colour3DPlotLayer *>(layer))
return Colour3DPlot;
224 if (dynamic_cast<const SpectrumLayer *>(layer))
return Spectrum;
225 if (dynamic_cast<const SliceLayer *>(layer))
return Slice;
238 case Notes:
return "notes";
240 case Regions:
return "regions";
241 case Text:
return "text";
242 case Image:
return "image";
245 case Slice:
return "spectrum";
250 cerr <<
"WARNING: LayerFactory::getLayerIconName passed unknown layer" << endl;
264 case Notes:
return "notes";
266 case Regions:
return "regions";
267 case Text:
return "text";
268 case Image:
return "image";
271 case Slice:
return "slice";
276 cerr <<
"WARNING: LayerFactory::getLayerTypeName passed unknown layer" << endl;
284 if (name ==
"waveform")
return Waveform;
286 if (name ==
"timeruler")
return TimeRuler;
290 if (name ==
"regions")
return Regions;
291 if (name ==
"text")
return Text;
292 if (name ==
"image")
return Image;
294 if (name ==
"spectrum")
return Spectrum;
295 if (name ==
"slice")
return Slice;
305 if (trySetModel<WaveformLayer, WaveFileModel>(layer, model))
308 if (trySetModel<WaveformLayer, WritableWaveFileModel>(layer, model))
311 if (trySetModel<SpectrogramLayer, DenseTimeValueModel>(layer, model))
314 if (trySetModel<TimeRulerLayer, Model>(layer, model))
317 if (trySetModel<TimeInstantLayer, SparseOneDimensionalModel>(layer, model))
320 if (trySetModel<TimeValueLayer, SparseTimeValueModel>(layer, model))
323 if (trySetModel<NoteLayer, NoteModel>(layer, model))
327 if (trySetModel<FlexiNoteLayer, FlexiNoteModel>(layer, model))
330 if (trySetModel<RegionLayer, RegionModel>(layer, model))
333 if (trySetModel<TextLayer, TextModel>(layer, model))
336 if (trySetModel<ImageLayer, ImageModel>(layer, model))
339 if (trySetModel<Colour3DPlotLayer, DenseThreeDimensionalModel>(layer, model))
342 if (trySetModel<SpectrogramLayer, DenseTimeValueModel>(layer, model))
345 if (trySetModel<SpectrumLayer, DenseTimeValueModel>(layer, model))
356 return new SparseOneDimensionalModel(baseModel->getSampleRate(), 1);
358 return new SparseTimeValueModel(baseModel->getSampleRate(), 1,
true);
360 return new FlexiNoteModel(baseModel->getSampleRate(), 1,
true);
361 }
else if (layerType ==
Notes) {
362 return new NoteModel(baseModel->getSampleRate(), 1,
true);
363 }
else if (layerType ==
Regions) {
364 return new RegionModel(baseModel->getSampleRate(), 1,
true);
365 }
else if (layerType ==
Text) {
366 return new TextModel(baseModel->getSampleRate(), 1,
true);
367 }
else if (layerType ==
Image) {
368 return new ImageModel(baseModel->getSampleRate(), 1,
true);
377 if (dynamic_cast<WaveformLayer *>(layer)) {
378 return dynamic_cast<WaveformLayer *>(layer)->getChannel();
380 if (dynamic_cast<SpectrogramLayer *>(layer)) {
381 return dynamic_cast<SpectrogramLayer *>(layer)->getChannel();
389 if (dynamic_cast<WaveformLayer *>(layer)) {
390 dynamic_cast<WaveformLayer *>(layer)->setChannel(channel);
393 if (dynamic_cast<SpectrogramLayer *>(layer)) {
394 dynamic_cast<SpectrogramLayer *>(layer)->setChannel(channel);
397 if (dynamic_cast<SpectrumLayer *>(layer)) {
398 dynamic_cast<SpectrumLayer *>(layer)->setChannel(channel);
472 cerr <<
"WARNING: LayerFactory::createLayer passed unknown layer" << endl;
477 cerr <<
"LayerFactory::createLayer: Unknown layer type " 495 settings.beginGroup(
"LayerDefaults");
497 if (defaults ==
"")
return;
501 QString xml = layer->toXmlString();
502 QDomDocument docOld, docNew;
504 if (docOld.setContent(xml,
false) &&
505 docNew.setContent(defaults,
false)) {
507 QXmlAttributes attrs;
509 QDomElement layerElt = docNew.firstChildElement(
"layer");
510 QDomNamedNodeMap attrNodes = layerElt.attributes();
512 for (
int i = 0; i < attrNodes.length(); ++i) {
513 QDomAttr attr = attrNodes.item(i).toAttr();
514 if (attr.isNull())
continue;
518 attrs.append(attr.name(),
"",
"", attr.value());
521 layerElt = docOld.firstChildElement(
"layer");
522 attrNodes = layerElt.attributes();
523 for (
int i = 0; i < attrNodes.length(); ++i) {
524 QDomAttr attr = attrNodes.item(i).toAttr();
525 if (attr.isNull())
continue;
526 if (attrs.value(attr.name()) ==
"") {
530 attrs.append(attr.name(),
"",
"", attr.value());
543 const Clipboard::PointList &contents = clip.getPoints();
545 bool haveFrame =
false;
546 bool haveValue =
false;
547 bool haveDuration =
false;
548 bool haveLevel =
false;
550 for (Clipboard::PointList::const_iterator i = contents.begin();
551 i != contents.end(); ++i) {
552 if (i->haveFrame()) haveFrame =
true;
553 if (i->haveValue()) haveValue =
true;
554 if (i->haveDuration()) haveDuration =
true;
555 if (i->haveLevel()) haveLevel =
true;
558 if (haveFrame && haveValue && haveDuration && haveLevel)
return Notes;
559 if (haveFrame && haveValue && haveDuration)
return Regions;
560 if (haveFrame && haveValue)
return TimeValues;
static LayerFactory * getInstance()
QString getLayerIconName(LayerType)
The base class for visual representations of the data found in a Model.
virtual void setProperties(const QXmlAttributes &)=0
Set the particular properties of a layer (those specific to the subclass) from a set of XML attribute...
SpectrogramLayer represents waveform data (obtained from a DenseTimeValueModel) in spectrogram form.
bool isLayerSliceable(const Layer *)
LayerType getLayerTypeForName(QString)
LayerTypeSet getValidLayerTypes(Model *model)
This is a view that displays dense 3-D data (time, some sort of binned y-axis range,...
Model * createEmptyModel(LayerType type, Model *baseModel)
LayerTypeSet getValidEmptyLayerTypes()
int getChannel(Layer *layer)
void setModel(Layer *layer, Model *model)
virtual void setObjectName(const QString &name)
QString getLayerPresentationName(LayerType type)
static LayerFactory * m_instance
void setChannel(Layer *layer, int channel)
Layer * createLayer(LayerType type)
std::set< LayerType > LayerTypeSet
LayerType getLayerType(const Layer *)
LayerType getLayerTypeForClipboardContents(const Clipboard &)
QString getLayerTypeName(LayerType)
void setLayerDefaultProperties(LayerType type, Layer *layer)