annotate framework/Align.h @ 530:066d8c5f3b21 project-file-rework

Cut down vastly on the number of config.pri files and places where their contents has to be effectively duplicated without them
author Chris Cannam
date Mon, 24 Oct 2016 17:53:33 +0100
parents b23db4cef02f
children 06db8f3ceb95
rev   line source
Chris@420 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@420 2
Chris@420 3 /*
Chris@420 4 Sonic Visualiser
Chris@420 5 An audio file viewer and annotation editor.
Chris@420 6 Centre for Digital Music, Queen Mary, University of London.
Chris@420 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@420 8
Chris@420 9 This program is free software; you can redistribute it and/or
Chris@420 10 modify it under the terms of the GNU General Public License as
Chris@420 11 published by the Free Software Foundation; either version 2 of the
Chris@420 12 License, or (at your option) any later version. See the file
Chris@420 13 COPYING included with this distribution for more information.
Chris@420 14 */
Chris@420 15
Chris@420 16 #ifndef ALIGN_H
Chris@420 17 #define ALIGN_H
Chris@420 18
Chris@420 19 #include <QString>
Chris@423 20 #include <QObject>
Chris@423 21 #include <QProcess>
Chris@423 22 #include <set>
Chris@420 23
Chris@420 24 class Model;
Chris@423 25 class AlignmentModel;
Chris@420 26
Chris@423 27 class Align : public QObject
Chris@420 28 {
Chris@423 29 Q_OBJECT
Chris@423 30
Chris@420 31 public:
Chris@420 32 Align() : m_error("") { }
Chris@420 33
Chris@423 34 /**
Chris@423 35 * Align the "other" model to the reference, attaching an
Chris@423 36 * AlignmentModel to it. Alignment is carried out by the method
Chris@423 37 * configured in the user preferences (either a plugin transform
Chris@423 38 * or an external process) and is done asynchronously.
Chris@423 39 *
Chris@423 40 * A single Align object may carry out many simultanous alignment
Chris@423 41 * calls -- you do not need to create a new Align object each
Chris@423 42 * time, nor to wait for an alignment to be complete before
Chris@423 43 * starting a new one.
Chris@423 44 *
Chris@423 45 * The Align object must survive after this call, for at least as
Chris@428 46 * long as the alignment takes. The usual expectation is that the
Chris@428 47 * Align object will simply share the process or document
Chris@428 48 * lifespan.
Chris@423 49 */
Chris@422 50 bool alignModel(Model *reference, Model *other); // via user preference
Chris@422 51
Chris@420 52 bool alignModelViaTransform(Model *reference, Model *other);
Chris@422 53 bool alignModelViaProgram(Model *reference, Model *other, QString program);
Chris@420 54
Chris@428 55 /**
Chris@428 56 * Return true if the alignment facility is available (relevant
Chris@428 57 * plugin installed, etc).
Chris@428 58 */
Chris@428 59 static bool canAlign();
Chris@428 60
Chris@420 61 QString getError() const { return m_error; }
Chris@428 62
Chris@428 63 signals:
Chris@428 64 /**
Chris@428 65 * Emitted when an alignment is successfully completed. The
Chris@428 66 * reference and other models can be queried from the alignment
Chris@428 67 * model.
Chris@428 68 */
Chris@428 69 void alignmentComplete(AlignmentModel *alignment);
Chris@428 70
Chris@423 71 private slots:
Chris@428 72 void alignmentCompletionChanged();
Chris@423 73 void alignmentProgramFinished(int, QProcess::ExitStatus);
Chris@423 74
Chris@420 75 private:
Chris@428 76 static QString getAlignmentTransformName();
Chris@428 77
Chris@420 78 QString m_error;
Chris@423 79 std::map<QProcess *, AlignmentModel *> m_processModels;
Chris@420 80 };
Chris@420 81
Chris@420 82 #endif
Chris@420 83