# HG changeset patch # User Chris Cannam # Date 1416498379 0 # Node ID 13f53ecc8bb598a2218d45f332e45341035dfa09 # Parent 36f79bc5c3d751409e3075df278168c5d7880f71 Make alignment using an external program asynchronous diff -r 36f79bc5c3d7 -r 13f53ecc8bb5 data/model/AlignmentModel.cpp --- a/data/model/AlignmentModel.cpp Fri Nov 14 17:23:38 2014 +0000 +++ b/data/model/AlignmentModel.cpp Thu Nov 20 15:46:19 2014 +0000 @@ -112,10 +112,17 @@ if (completion) *completion = 0; return false; } - if (m_pathComplete || !m_rawPath) { + if (m_pathComplete) { if (completion) *completion = 100; return true; } + if (!m_rawPath) { + // lack of raw path could mean path is complete (in which case + // m_pathComplete true above) or else no alignment has been + // set at all yet (this case) + if (completion) *completion = 0; + return false; + } return m_rawPath->isReady(completion); } @@ -347,6 +354,31 @@ } void +AlignmentModel::setPathFrom(SparseTimeValueModel *rawpath) +{ + if (m_rawPath) m_rawPath->aboutToDelete(); + delete m_rawPath; + + m_rawPath = rawpath; + + connect(m_rawPath, SIGNAL(modelChanged()), + this, SLOT(pathChanged())); + + connect(m_rawPath, SIGNAL(modelChangedWithin(int, int)), + this, SLOT(pathChangedWithin(int, int))); + + connect(m_rawPath, SIGNAL(completionChanged()), + this, SLOT(pathCompletionChanged())); + + constructPath(); + constructReversePath(); + + if (m_rawPath->isReady()) { + pathCompletionChanged(); + } +} + +void AlignmentModel::setPath(PathModel *path) { if (m_path) m_path->aboutToDelete(); diff -r 36f79bc5c3d7 -r 13f53ecc8bb5 data/model/AlignmentModel.h --- a/data/model/AlignmentModel.h Fri Nov 14 17:23:38 2014 +0000 +++ b/data/model/AlignmentModel.h Thu Nov 20 15:46:19 2014 +0000 @@ -52,6 +52,7 @@ int toReference(int frame) const; int fromReference(int frame) const; + void setPathFrom(SparseTimeValueModel *rawpath); void setPath(PathModel *path); virtual void toXml(QTextStream &stream,