comparison framework/Document.h @ 337:1e3af7f4fa86 tony_integration

Merge from branch tonioni
author Chris Cannam
date Tue, 11 Mar 2014 17:34:53 +0000
parents 0c37405cf579
children dd07d48d7d4f
comparison
equal deleted inserted replaced
328:28c17ce7a6e9 337:1e3af7f4fa86
27 27
28 class Model; 28 class Model;
29 class Layer; 29 class Layer;
30 class View; 30 class View;
31 class WaveFileModel; 31 class WaveFileModel;
32
33 class AdditionalModelConverter;
32 34
33 /** 35 /**
34 * A Sonic Visualiser document consists of a set of data models, and 36 * A Sonic Visualiser document consists of a set of data models, and
35 * also the visualisation layers used to display them. Changes to the 37 * also the visualisation layers used to display them. Changes to the
36 * layers and their layout need to be stored and managed in much the 38 * layers and their layout need to be stored and managed in much the
119 121
120 /** 122 /**
121 * Create and return suitable layers for the given transforms, 123 * Create and return suitable layers for the given transforms,
122 * which must be identical apart from the output (i.e. must use 124 * which must be identical apart from the output (i.e. must use
123 * the same plugin and configuration). The layers are returned in 125 * the same plugin and configuration). The layers are returned in
124 * the same order as the transformed are supplied. 126 * the same order as the transforms are supplied.
125 */ 127 */
126 std::vector<Layer *> createDerivedLayers(const Transforms &, 128 std::vector<Layer *> createDerivedLayers(const Transforms &,
127 const ModelTransformer::Input &); 129 const ModelTransformer::Input &);
130
131 class LayerCreationHandler {
132 public:
133 virtual ~LayerCreationHandler() { }
134
135 /**
136 * The primary layers are those corresponding 1-1 to the input
137 * models, listed in the same order as the input models. The
138 * additional layers vector contains any layers (from all
139 * models) that were returned separately at the end of
140 * processing.
141 */
142 virtual void layersCreated(std::vector<Layer *> primary,
143 std::vector<Layer *> additional) = 0;
144 };
145
146 /**
147 * Create suitable layers for the given transforms, which must be
148 * identical apart from the output (i.e. must use the same plugin
149 * and configuration). This method returns after initialising the
150 * transformer process, and the layers are returned through a
151 * subsequent call to the provided handler (which must be non-null).
152 */
153 void createDerivedLayersAsync(const Transforms &,
154 const ModelTransformer::Input &,
155 LayerCreationHandler *handler);
128 156
129 /** 157 /**
130 * Delete the given layer, and also its associated model if no 158 * Delete the given layer, and also its associated model if no
131 * longer used by any other layer. In general, this should be the 159 * longer used by any other layer. In general, this should be the
132 * only method used to delete layers -- doing so directly is a bit 160 * only method used to delete layers -- doing so directly is a bit
166 /** 194 /**
167 * Add derived models associated with the given set of related 195 * Add derived models associated with the given set of related
168 * transforms, running the transforms and returning the resulting 196 * transforms, running the transforms and returning the resulting
169 * models. 197 * models.
170 */ 198 */
199 friend class AdditionalModelConverter;
171 std::vector<Model *> addDerivedModels(const Transforms &transforms, 200 std::vector<Model *> addDerivedModels(const Transforms &transforms,
172 const ModelTransformer::Input &input, 201 const ModelTransformer::Input &input,
173 QString &returnedMessage); 202 QString &returnedMessage,
203 AdditionalModelConverter *);
174 204
175 /** 205 /**
176 * Add a derived model associated with the given transform. This 206 * Add a derived model associated with the given transform. This
177 * is necessary to register any derived model that was not created 207 * is necessary to register any derived model that was not created
178 * by the document using createDerivedModel or createDerivedLayer. 208 * by the document using createDerivedModel or createDerivedLayer.
179 */ 209 */
180 void addDerivedModel(const Transform &transform, 210 void addAlreadyDerivedModel(const Transform &transform,
181 const ModelTransformer::Input &input, 211 const ModelTransformer::Input &input,
182 Model *outputModelToAdd); 212 Model *outputModelToAdd);
183 213
184 /** 214 /**
185 * Add an imported (non-derived, non-main) model. This is 215 * Add an imported (non-derived, non-main) model. This is
186 * necessary to register any imported model that is associated 216 * necessary to register any imported model that is associated
187 * with a layer. 217 * with a layer.
207 * be set using setModel before this method is called. 237 * be set using setModel before this method is called.
208 */ 238 */
209 void addLayerToView(View *, Layer *); 239 void addLayerToView(View *, Layer *);
210 240
211 /** 241 /**
212 * Remove the given layer from the given view. 242 * Remove the given layer from the given view. Ownership of the
243 * layer is transferred to a command object on the undo stack, and
244 * the layer will be deleted when the undo stack is pruned.
213 */ 245 */
214 void removeLayerFromView(View *, Layer *); 246 void removeLayerFromView(View *, Layer *);
215 247
216 /** 248 /**
217 * Return true if alignment is supported (i.e. if the necessary 249 * Return true if alignment is supported (i.e. if the necessary
296 // models in them. 328 // models in them.
297 329
298 const Model *source; 330 const Model *source;
299 int channel; 331 int channel;
300 Transform transform; 332 Transform transform;
333 bool additional;
301 334
302 // Count of the number of layers using this model. 335 // Count of the number of layers using this model.
303 int refcount; 336 int refcount;
304 }; 337 };
305 338
306 typedef std::map<Model *, ModelRecord> ModelMap; 339 typedef std::map<Model *, ModelRecord> ModelMap;
307 ModelMap m_models; 340 ModelMap m_models;
341
342 /**
343 * Add an extra derived model (returned at the end of processing a
344 * transform).
345 */
346 void addAdditionalModel(Model *);
308 347
309 class AddLayerCommand : public Command 348 class AddLayerCommand : public Command
310 { 349 {
311 public: 350 public:
312 AddLayerCommand(Document *d, View *view, Layer *layer); 351 AddLayerCommand(Document *d, View *view, Layer *layer);
355 static TransformId getAlignmentTransformName(); 394 static TransformId getAlignmentTransformName();
356 395
357 void toXml(QTextStream &, QString, QString, bool asTemplate) const; 396 void toXml(QTextStream &, QString, QString, bool asTemplate) const;
358 void writePlaceholderMainModel(QTextStream &, QString) const; 397 void writePlaceholderMainModel(QTextStream &, QString) const;
359 398
399 std::vector<Layer *> createLayersForDerivedModels(std::vector<Model *>,
400 QStringList names);
401
360 /** 402 /**
361 * And these are the layers. We also control the lifespans of 403 * And these are the layers. We also control the lifespans of
362 * these (usually through the commands used to add and remove them). 404 * these (usually through the commands used to add and remove them).
363 */ 405 */
364 typedef std::set<Layer *> LayerSet; 406 typedef std::set<Layer *> LayerSet;