annotate layer/LayerFactory.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents d8e6709e9075
children
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 Chris Cannam.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #include "LayerFactory.h"
lbajardsilogic@0 17
lbajardsilogic@0 18 #include "WaveformLayer.h"
lbajardsilogic@0 19 #include "SpectrogramLayer.h"
lbajardsilogic@0 20 #include "TimeRulerLayer.h"
lbajardsilogic@0 21 #include "TimeInstantLayer.h"
lbajardsilogic@0 22 #include "TimeValueLayer.h"
lbajardsilogic@0 23 #include "NoteLayer.h"
lbajardsilogic@0 24 #include "TextLayer.h"
lbajardsilogic@0 25 #include "Colour3DPlotLayer.h"
lbajardsilogic@0 26 #include "SpectrumLayer.h"
lbajardsilogic@0 27 #include "SliceLayer.h"
lbajardsilogic@0 28 #include "SliceableLayer.h"
lbajardsilogic@18 29 #include "IntervalLayer.h"
lbajardsilogic@0 30
lbajardsilogic@0 31 #include "data/model/RangeSummarisableTimeValueModel.h"
lbajardsilogic@0 32 #include "data/model/DenseTimeValueModel.h"
lbajardsilogic@0 33 #include "data/model/SparseOneDimensionalModel.h"
lbajardsilogic@0 34 #include "data/model/SparseTimeValueModel.h"
lbajardsilogic@0 35 #include "data/model/NoteModel.h"
lbajardsilogic@0 36 #include "data/model/TextModel.h"
lbajardsilogic@0 37 #include "data/model/DenseThreeDimensionalModel.h"
lbajardsilogic@0 38 #include "data/model/WaveFileModel.h"
lbajardsilogic@0 39 #include "data/model/WritableWaveFileModel.h"
lbajardsilogic@18 40 #include "data/model/IntervalModel.h"
lbajardsilogic@0 41
lbajardsilogic@0 42 LayerFactory *
lbajardsilogic@0 43 LayerFactory::m_instance = new LayerFactory;
lbajardsilogic@0 44
lbajardsilogic@0 45 LayerFactory *
lbajardsilogic@0 46 LayerFactory::getInstance()
lbajardsilogic@0 47 {
lbajardsilogic@0 48 return m_instance;
lbajardsilogic@0 49 }
lbajardsilogic@0 50
lbajardsilogic@0 51 LayerFactory::~LayerFactory()
lbajardsilogic@0 52 {
lbajardsilogic@0 53 }
lbajardsilogic@0 54
lbajardsilogic@0 55 QString
lbajardsilogic@0 56 LayerFactory::getLayerPresentationName(LayerType type)
lbajardsilogic@0 57 {
lbajardsilogic@0 58 switch (type) {
lbajardsilogic@0 59 case Waveform: return Layer::tr("Waveform");
lbajardsilogic@0 60 case Spectrogram: return Layer::tr("Spectrogram");
lbajardsilogic@0 61 case TimeRuler: return Layer::tr("Ruler");
lbajardsilogic@0 62 case TimeInstants: return Layer::tr("Time Instants");
lbajardsilogic@0 63 case TimeValues: return Layer::tr("Time Values");
lbajardsilogic@0 64 case Notes: return Layer::tr("Notes");
lbajardsilogic@0 65 case Text: return Layer::tr("Text");
lbajardsilogic@0 66 case Colour3DPlot: return Layer::tr("Colour 3D Plot");
lbajardsilogic@0 67 case Spectrum: return Layer::tr("Spectrum");
lbajardsilogic@0 68 case Slice: return Layer::tr("Time Slice");
lbajardsilogic@0 69
lbajardsilogic@0 70 case MelodicRangeSpectrogram:
lbajardsilogic@0 71 // The user can change all the parameters of this after the
lbajardsilogic@0 72 // fact -- there's nothing permanently melodic-range about it
lbajardsilogic@0 73 // that should be encoded in its name
lbajardsilogic@0 74 return Layer::tr("Spectrogram");
lbajardsilogic@0 75
lbajardsilogic@0 76 case PeakFrequencySpectrogram:
lbajardsilogic@0 77 // likewise
lbajardsilogic@0 78 return Layer::tr("Spectrogram");
lbajardsilogic@0 79
lbajardsilogic@18 80 case Interval: return Layer::tr("Interval");
lbajardsilogic@18 81
lbajardsilogic@0 82 default: break;
lbajardsilogic@0 83 }
lbajardsilogic@0 84
lbajardsilogic@0 85 return Layer::tr("Layer");
lbajardsilogic@0 86 }
lbajardsilogic@0 87
lbajardsilogic@0 88 bool
lbajardsilogic@0 89 LayerFactory::isLayerSliceable(const Layer *layer)
lbajardsilogic@0 90 {
lbajardsilogic@0 91 if (dynamic_cast<const SliceableLayer *>(layer)) {
lbajardsilogic@0 92 if (dynamic_cast<const SpectrogramLayer *>(layer)) {
lbajardsilogic@0 93
lbajardsilogic@0 94 //!!! We can create slices of spectrograms, but there's a
lbajardsilogic@0 95 // problem managing the models. The source model for the
lbajardsilogic@0 96 // slice layer has to be one of the spectrogram's FFT
lbajardsilogic@0 97 // models -- that's fine, except that we can't store &
lbajardsilogic@0 98 // recall the slice layer with a reference to that model
lbajardsilogic@0 99 // because the model is internal to the spectrogram layer
lbajardsilogic@0 100 // and the document has no record of it. We would need
lbajardsilogic@0 101 // some other way of managing models that are used in this
lbajardsilogic@0 102 // way. For the moment we just don't allow slices of
lbajardsilogic@0 103 // spectrograms -- and provide a spectrum layer for this
lbajardsilogic@0 104 // instead.
lbajardsilogic@0 105 //
lbajardsilogic@0 106 // This business needs a bit more thought -- either come
lbajardsilogic@0 107 // up with a sensible way to deal with that stuff, or
lbajardsilogic@0 108 // simplify the existing slice layer logic so that it
lbajardsilogic@0 109 // doesn't have to deal with models disappearing on it at
lbajardsilogic@0 110 // all (and use the normal Document setModel mechanism to
lbajardsilogic@0 111 // set its sliceable model instead of the fancy pants
lbajardsilogic@0 112 // nonsense it's doing at the moment).
lbajardsilogic@0 113
lbajardsilogic@0 114 return false;
lbajardsilogic@0 115 }
lbajardsilogic@0 116 return true;
lbajardsilogic@0 117 }
lbajardsilogic@0 118 return false;
lbajardsilogic@0 119 }
lbajardsilogic@0 120
lbajardsilogic@0 121 LayerFactory::LayerTypeSet
lbajardsilogic@0 122 LayerFactory::getValidLayerTypes(Model *model)
lbajardsilogic@0 123 {
lbajardsilogic@0 124 LayerTypeSet types;
lbajardsilogic@0 125
lbajardsilogic@0 126 if (dynamic_cast<DenseThreeDimensionalModel *>(model)) {
lbajardsilogic@0 127 types.insert(Colour3DPlot);
lbajardsilogic@0 128 types.insert(Slice);
lbajardsilogic@0 129 }
lbajardsilogic@0 130
lbajardsilogic@0 131 if (dynamic_cast<RangeSummarisableTimeValueModel *>(model)) {
lbajardsilogic@0 132 types.insert(Waveform);
lbajardsilogic@0 133 }
lbajardsilogic@0 134
lbajardsilogic@0 135 if (dynamic_cast<DenseTimeValueModel *>(model)) {
lbajardsilogic@0 136 types.insert(Spectrogram);
lbajardsilogic@0 137 types.insert(MelodicRangeSpectrogram);
lbajardsilogic@0 138 types.insert(PeakFrequencySpectrogram);
lbajardsilogic@0 139 }
lbajardsilogic@0 140
lbajardsilogic@0 141 if (dynamic_cast<SparseOneDimensionalModel *>(model)) {
lbajardsilogic@0 142 types.insert(TimeInstants);
lbajardsilogic@0 143 }
lbajardsilogic@0 144
lbajardsilogic@0 145 if (dynamic_cast<SparseTimeValueModel *>(model)) {
lbajardsilogic@0 146 types.insert(TimeValues);
lbajardsilogic@0 147
lbajardsilogic@0 148 }
lbajardsilogic@0 149 if (dynamic_cast<NoteModel *>(model)) {
lbajardsilogic@0 150 types.insert(Notes);
lbajardsilogic@0 151 }
lbajardsilogic@0 152
lbajardsilogic@0 153 if (dynamic_cast<TextModel *>(model)) {
lbajardsilogic@0 154 types.insert(Text);
lbajardsilogic@0 155 }
lbajardsilogic@0 156
lbajardsilogic@0 157 if (dynamic_cast<DenseTimeValueModel *>(model)) {
lbajardsilogic@0 158 types.insert(Spectrum);
lbajardsilogic@0 159 }
lbajardsilogic@0 160
lbajardsilogic@18 161 if (dynamic_cast<IntervalModel *>(model)) {
lbajardsilogic@18 162 types.insert(Interval);
lbajardsilogic@18 163 }
lbajardsilogic@18 164
lbajardsilogic@0 165 // We don't count TimeRuler here as it doesn't actually display
lbajardsilogic@0 166 // the data, although it can be backed by any model
lbajardsilogic@0 167
lbajardsilogic@0 168 return types;
lbajardsilogic@0 169 }
lbajardsilogic@0 170
lbajardsilogic@0 171 LayerFactory::LayerTypeSet
lbajardsilogic@0 172 LayerFactory::getValidEmptyLayerTypes()
lbajardsilogic@0 173 {
lbajardsilogic@0 174 LayerTypeSet types;
lbajardsilogic@0 175 types.insert(TimeInstants);
lbajardsilogic@0 176 types.insert(TimeValues);
lbajardsilogic@0 177 types.insert(Notes);
lbajardsilogic@0 178 types.insert(Text);
lbajardsilogic@18 179 types.insert(Interval);
lbajardsilogic@0 180 //!!! and in principle Colour3DPlot -- now that's a challenge
lbajardsilogic@0 181 return types;
lbajardsilogic@0 182 }
lbajardsilogic@0 183
lbajardsilogic@0 184 LayerFactory::LayerType
lbajardsilogic@0 185 LayerFactory::getLayerType(const Layer *layer)
lbajardsilogic@0 186 {
lbajardsilogic@0 187 if (dynamic_cast<const WaveformLayer *>(layer)) return Waveform;
lbajardsilogic@0 188 if (dynamic_cast<const SpectrogramLayer *>(layer)) return Spectrogram;
lbajardsilogic@0 189 if (dynamic_cast<const TimeRulerLayer *>(layer)) return TimeRuler;
lbajardsilogic@0 190 if (dynamic_cast<const TimeInstantLayer *>(layer)) return TimeInstants;
lbajardsilogic@0 191 if (dynamic_cast<const TimeValueLayer *>(layer)) return TimeValues;
lbajardsilogic@0 192 if (dynamic_cast<const NoteLayer *>(layer)) return Notes;
lbajardsilogic@0 193 if (dynamic_cast<const TextLayer *>(layer)) return Text;
lbajardsilogic@0 194 if (dynamic_cast<const Colour3DPlotLayer *>(layer)) return Colour3DPlot;
lbajardsilogic@0 195 if (dynamic_cast<const SpectrumLayer *>(layer)) return Spectrum;
lbajardsilogic@0 196 if (dynamic_cast<const SliceLayer *>(layer)) return Slice;
lbajardsilogic@18 197 if (dynamic_cast<const IntervalLayer *>(layer)) return Interval;
lbajardsilogic@0 198 return UnknownLayer;
lbajardsilogic@0 199 }
lbajardsilogic@0 200
lbajardsilogic@0 201 QString
lbajardsilogic@0 202 LayerFactory::getLayerIconName(LayerType type)
lbajardsilogic@0 203 {
lbajardsilogic@0 204 switch (type) {
lbajardsilogic@0 205 case Waveform: return "waveform";
lbajardsilogic@0 206 case Spectrogram: return "spectrogram";
lbajardsilogic@0 207 case TimeRuler: return "timeruler";
lbajardsilogic@0 208 case TimeInstants: return "instants";
lbajardsilogic@0 209 case TimeValues: return "values";
lbajardsilogic@0 210 case Notes: return "notes";
lbajardsilogic@0 211 case Text: return "text";
lbajardsilogic@0 212 case Colour3DPlot: return "colour3d";
lbajardsilogic@0 213 case Spectrum: return "spectrum";
lbajardsilogic@0 214 case Slice: return "spectrum";
lbajardsilogic@18 215 case Interval: return "interval";
lbajardsilogic@0 216 default: return "unknown";
lbajardsilogic@0 217 }
lbajardsilogic@0 218 }
lbajardsilogic@0 219
lbajardsilogic@0 220 QString
lbajardsilogic@0 221 LayerFactory::getLayerTypeName(LayerType type)
lbajardsilogic@0 222 {
lbajardsilogic@0 223 switch (type) {
lbajardsilogic@0 224 case Waveform: return "waveform";
lbajardsilogic@0 225 case Spectrogram: return "spectrogram";
lbajardsilogic@0 226 case TimeRuler: return "timeruler";
lbajardsilogic@0 227 case TimeInstants: return "timeinstants";
lbajardsilogic@0 228 case TimeValues: return "timevalues";
lbajardsilogic@0 229 case Notes: return "notes";
lbajardsilogic@0 230 case Text: return "text";
lbajardsilogic@0 231 case Colour3DPlot: return "colour3dplot";
lbajardsilogic@0 232 case Spectrum: return "spectrum";
lbajardsilogic@0 233 case Slice: return "slice";
lbajardsilogic@18 234 case Interval: return "interval";
lbajardsilogic@0 235 default: return "unknown";
lbajardsilogic@0 236 }
lbajardsilogic@0 237 }
lbajardsilogic@0 238
lbajardsilogic@0 239 LayerFactory::LayerType
lbajardsilogic@0 240 LayerFactory::getLayerTypeForName(QString name)
lbajardsilogic@0 241 {
lbajardsilogic@0 242 if (name == "waveform") return Waveform;
lbajardsilogic@0 243 if (name == "spectrogram") return Spectrogram;
lbajardsilogic@0 244 if (name == "timeruler") return TimeRuler;
lbajardsilogic@0 245 if (name == "timeinstants") return TimeInstants;
lbajardsilogic@0 246 if (name == "timevalues") return TimeValues;
lbajardsilogic@0 247 if (name == "notes") return Notes;
lbajardsilogic@0 248 if (name == "text") return Text;
lbajardsilogic@0 249 if (name == "colour3dplot") return Colour3DPlot;
lbajardsilogic@0 250 if (name == "spectrum") return Spectrum;
lbajardsilogic@0 251 if (name == "slice") return Slice;
lbajardsilogic@18 252 if (name == "interval") return Interval;
lbajardsilogic@0 253 return UnknownLayer;
lbajardsilogic@0 254 }
lbajardsilogic@0 255
lbajardsilogic@0 256 void
lbajardsilogic@0 257 LayerFactory::setModel(Layer *layer, Model *model)
lbajardsilogic@0 258 {
lbajardsilogic@0 259 // if (trySetModel<WaveformLayer, RangeSummarisableTimeValueModel>(layer, model))
lbajardsilogic@0 260 // return;
lbajardsilogic@0 261
lbajardsilogic@0 262 if (trySetModel<WaveformLayer, WaveFileModel>(layer, model))
lbajardsilogic@0 263 return;
lbajardsilogic@0 264
lbajardsilogic@0 265 if (trySetModel<WaveformLayer, WritableWaveFileModel>(layer, model))
lbajardsilogic@0 266 return;
lbajardsilogic@0 267
lbajardsilogic@0 268 if (trySetModel<SpectrogramLayer, DenseTimeValueModel>(layer, model))
lbajardsilogic@0 269 return;
lbajardsilogic@0 270
lbajardsilogic@0 271 if (trySetModel<TimeRulerLayer, Model>(layer, model))
lbajardsilogic@0 272 return;
lbajardsilogic@0 273
lbajardsilogic@0 274 if (trySetModel<TimeInstantLayer, SparseOneDimensionalModel>(layer, model))
lbajardsilogic@0 275 return;
lbajardsilogic@0 276
lbajardsilogic@0 277 if (trySetModel<TimeValueLayer, SparseTimeValueModel>(layer, model))
lbajardsilogic@0 278 return;
lbajardsilogic@0 279
lbajardsilogic@0 280 if (trySetModel<NoteLayer, NoteModel>(layer, model))
lbajardsilogic@0 281 return;
lbajardsilogic@0 282
lbajardsilogic@0 283 if (trySetModel<TextLayer, TextModel>(layer, model))
lbajardsilogic@0 284 return;
lbajardsilogic@0 285
lbajardsilogic@0 286 if (trySetModel<Colour3DPlotLayer, DenseThreeDimensionalModel>(layer, model))
lbajardsilogic@0 287 return;
lbajardsilogic@0 288
lbajardsilogic@0 289 if (trySetModel<SpectrogramLayer, DenseTimeValueModel>(layer, model))
lbajardsilogic@0 290 return;
lbajardsilogic@0 291
lbajardsilogic@0 292 if (trySetModel<SpectrumLayer, DenseTimeValueModel>(layer, model))
lbajardsilogic@0 293 return;
lbajardsilogic@0 294
lbajardsilogic@0 295 // if (trySetModel<SliceLayer, DenseThreeDimensionalModel>(layer, model))
lbajardsilogic@0 296 // return;
lbajardsilogic@18 297
lbajardsilogic@18 298 if (trySetModel<IntervalLayer, IntervalModel>(layer, model))
lbajardsilogic@18 299 return;
lbajardsilogic@0 300 }
lbajardsilogic@0 301
lbajardsilogic@0 302 Model *
lbajardsilogic@0 303 LayerFactory::createEmptyModel(LayerType layerType, Model *baseModel)
lbajardsilogic@0 304 {
lbajardsilogic@0 305 if (layerType == TimeInstants) {
lbajardsilogic@0 306 return new SparseOneDimensionalModel(baseModel->getSampleRate(), 1);
lbajardsilogic@0 307 } else if (layerType == TimeValues) {
lbajardsilogic@0 308 return new SparseTimeValueModel(baseModel->getSampleRate(), 1, true);
lbajardsilogic@0 309 } else if (layerType == Notes) {
lbajardsilogic@0 310 return new NoteModel(baseModel->getSampleRate(), 1, true);
lbajardsilogic@0 311 } else if (layerType == Text) {
lbajardsilogic@0 312 return new TextModel(baseModel->getSampleRate(), 1, true);
lbajardsilogic@18 313 } else if (layerType == Interval) {
lbajardsilogic@18 314 return new IntervalModel(baseModel->getSampleRate(), 1, true);
lbajardsilogic@0 315 } else {
lbajardsilogic@0 316 return 0;
lbajardsilogic@0 317 }
lbajardsilogic@0 318 }
lbajardsilogic@0 319
lbajardsilogic@0 320 int
lbajardsilogic@0 321 LayerFactory::getChannel(Layer *layer)
lbajardsilogic@0 322 {
lbajardsilogic@0 323 if (dynamic_cast<WaveformLayer *>(layer)) {
lbajardsilogic@0 324 return dynamic_cast<WaveformLayer *>(layer)->getChannel();
lbajardsilogic@0 325 }
lbajardsilogic@0 326 if (dynamic_cast<SpectrogramLayer *>(layer)) {
lbajardsilogic@0 327 return dynamic_cast<SpectrogramLayer *>(layer)->getChannel();
lbajardsilogic@0 328 }
lbajardsilogic@0 329 return -1;
lbajardsilogic@0 330 }
lbajardsilogic@0 331
lbajardsilogic@0 332 void
lbajardsilogic@0 333 LayerFactory::setChannel(Layer *layer, int channel)
lbajardsilogic@0 334 {
lbajardsilogic@0 335 if (dynamic_cast<WaveformLayer *>(layer)) {
lbajardsilogic@0 336 dynamic_cast<WaveformLayer *>(layer)->setChannel(channel);
lbajardsilogic@0 337 return;
lbajardsilogic@0 338 }
lbajardsilogic@0 339 if (dynamic_cast<SpectrogramLayer *>(layer)) {
lbajardsilogic@0 340 dynamic_cast<SpectrogramLayer *>(layer)->setChannel(channel);
lbajardsilogic@0 341 return;
lbajardsilogic@0 342 }
lbajardsilogic@0 343 }
lbajardsilogic@0 344
lbajardsilogic@0 345 Layer *
lbajardsilogic@0 346 LayerFactory::createLayer(LayerType type)
lbajardsilogic@0 347 {
lbajardsilogic@0 348 Layer *layer = 0;
lbajardsilogic@0 349
lbajardsilogic@0 350 switch (type) {
lbajardsilogic@0 351
lbajardsilogic@0 352 case Waveform:
lbajardsilogic@0 353 layer = new WaveformLayer;
lbajardsilogic@0 354 break;
lbajardsilogic@0 355
lbajardsilogic@0 356 case Spectrogram:
lbajardsilogic@0 357 layer = new SpectrogramLayer;
lbajardsilogic@0 358 break;
lbajardsilogic@0 359
lbajardsilogic@0 360 case TimeRuler:
lbajardsilogic@0 361 layer = new TimeRulerLayer;
lbajardsilogic@0 362 break;
lbajardsilogic@0 363
lbajardsilogic@0 364 case TimeInstants:
lbajardsilogic@0 365 layer = new TimeInstantLayer;
lbajardsilogic@0 366 break;
lbajardsilogic@0 367
lbajardsilogic@0 368 case TimeValues:
lbajardsilogic@0 369 layer = new TimeValueLayer;
lbajardsilogic@0 370 break;
lbajardsilogic@0 371
lbajardsilogic@0 372 case Notes:
lbajardsilogic@0 373 layer = new NoteLayer;
lbajardsilogic@0 374 break;
lbajardsilogic@0 375
lbajardsilogic@0 376 case Text:
lbajardsilogic@0 377 layer = new TextLayer;
lbajardsilogic@0 378 break;
lbajardsilogic@0 379
lbajardsilogic@0 380 case Colour3DPlot:
lbajardsilogic@0 381 layer = new Colour3DPlotLayer;
lbajardsilogic@0 382 break;
lbajardsilogic@0 383
lbajardsilogic@0 384 case Spectrum:
lbajardsilogic@0 385 layer = new SpectrumLayer;
lbajardsilogic@0 386 break;
lbajardsilogic@0 387
lbajardsilogic@0 388 case Slice:
lbajardsilogic@0 389 layer = new SliceLayer;
lbajardsilogic@0 390 break;
lbajardsilogic@0 391
lbajardsilogic@0 392 case MelodicRangeSpectrogram:
lbajardsilogic@0 393 layer = new SpectrogramLayer(SpectrogramLayer::MelodicRange);
lbajardsilogic@0 394 break;
lbajardsilogic@0 395
lbajardsilogic@0 396 case PeakFrequencySpectrogram:
lbajardsilogic@0 397 layer = new SpectrogramLayer(SpectrogramLayer::MelodicPeaks);
lbajardsilogic@0 398 break;
lbajardsilogic@0 399
lbajardsilogic@18 400 case Interval:
lbajardsilogic@18 401 layer = new IntervalLayer;
lbajardsilogic@18 402 break;
lbajardsilogic@18 403
lbajardsilogic@0 404 default: break;
lbajardsilogic@0 405 }
lbajardsilogic@0 406
lbajardsilogic@0 407 if (!layer) {
lbajardsilogic@0 408 std::cerr << "LayerFactory::createLayer: Unknown layer type "
lbajardsilogic@0 409 << type << std::endl;
lbajardsilogic@0 410 } else {
lbajardsilogic@0 411 // std::cerr << "LayerFactory::createLayer: Setting object name "
lbajardsilogic@0 412 // << getLayerPresentationName(type).toStdString() << " on " << layer << std::endl;
lbajardsilogic@0 413 layer->setObjectName(getLayerPresentationName(type));
lbajardsilogic@0 414 }
lbajardsilogic@0 415
lbajardsilogic@0 416 return layer;
lbajardsilogic@0 417 }
lbajardsilogic@0 418