From 1aeb8b75b22240e46184a51e57e4af9cf87b9380 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 14 Aug 2016 17:51:25 +0200 Subject: [PATCH 01/56] Modify Cue for cue point colors. --- src/library/dao/cue.cpp | 5 ++++- src/library/dao/cue.h | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/library/dao/cue.cpp b/src/library/dao/cue.cpp index 09560021021..a8f3ddfaf49 100644 --- a/src/library/dao/cue.cpp +++ b/src/library/dao/cue.cpp @@ -7,6 +7,8 @@ #include "library/dao/cue.h" #include "util/assert.h" +const QString defaultColor = "#FF0000"; + Cue::~Cue() { qDebug() << "~Cue()" << m_iId; } @@ -19,7 +21,8 @@ Cue::Cue(TrackId trackId) m_iPosition(-1), m_iLength(0), m_iHotCue(-1), - m_label("") { + m_label(""), + m_color(defaultColor) { } diff --git a/src/library/dao/cue.h b/src/library/dao/cue.h index 56c85c22280..2bbfbc26982 100644 --- a/src/library/dao/cue.h +++ b/src/library/dao/cue.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "track/trackid.h" @@ -46,6 +47,9 @@ class Cue : public QObject { QString getLabel() const; void setLabel(const QString label); + QColor getColor() const; + void setColor(const QColor color); + signals: void updated(); @@ -67,6 +71,7 @@ class Cue : public QObject { int m_iLength; int m_iHotCue; QString m_label; + QColor m_color; friend class Track; friend class CueDAO; From 0d672838727b5bab52b8239cfcc207475dd478f9 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 14 Aug 2016 17:58:33 +0200 Subject: [PATCH 02/56] Modify database shcema to support cue colors. --- res/schema.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/res/schema.xml b/res/schema.xml index e85570fb316..832d501338b 100644 --- a/res/schema.xml +++ b/res/schema.xml @@ -416,4 +416,13 @@ METADATA ALTER TABLE library ADD COLUMN tracktotal TEXT DEFAULT '//'; + + + Add cue color support. Default color is #FF0000. + See library/dao/cue.h. + + + ALTER TABLE cues ADD COLUMN color CHARACTER(6) DEFAULT "FF0000" NOT NULL; + + From b7e864d4abcf08df8731b81bed77fa1ceb57e3c6 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 14 Aug 2016 18:00:10 +0200 Subject: [PATCH 03/56] Modify Cue constructor to get cue color. --- src/library/dao/cue.cpp | 5 +++-- src/library/dao/cue.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/library/dao/cue.cpp b/src/library/dao/cue.cpp index a8f3ddfaf49..7ca96fe5f9a 100644 --- a/src/library/dao/cue.cpp +++ b/src/library/dao/cue.cpp @@ -27,7 +27,7 @@ Cue::Cue(TrackId trackId) Cue::Cue(int id, TrackId trackId, Cue::CueType type, int position, int length, - int hotCue, QString label) + int hotCue, QString label, QColor color) : m_bDirty(false), m_iId(id), m_trackId(trackId), @@ -35,7 +35,8 @@ Cue::Cue(int id, TrackId trackId, Cue::CueType type, int position, int length, m_iPosition(position), m_iLength(length), m_iHotCue(hotCue), - m_label(label) { + m_label(label), + m_color(color) { } int Cue::getId() const { diff --git a/src/library/dao/cue.h b/src/library/dao/cue.h index 2bbfbc26982..6140aeb9f85 100644 --- a/src/library/dao/cue.h +++ b/src/library/dao/cue.h @@ -56,7 +56,7 @@ class Cue : public QObject { private: explicit Cue(TrackId trackId); Cue(int id, TrackId trackId, CueType type, int position, int length, - int hotCue, QString label); + int hotCue, QString label, QColor color); void setDirty(bool dirty); void setId(int id); void setTrackId(TrackId trackId); From f2d0cfa4f978387072df2b9b42048ca7f54cce98 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 14 Aug 2016 18:10:53 +0200 Subject: [PATCH 04/56] Implement Cue::getColor() and Cue::setColor(...) --- src/library/dao/cue.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/library/dao/cue.cpp b/src/library/dao/cue.cpp index 7ca96fe5f9a..7be901da0d8 100644 --- a/src/library/dao/cue.cpp +++ b/src/library/dao/cue.cpp @@ -138,6 +138,19 @@ void Cue::setLabel(const QString label) { emit(updated()); } +QColor Cue::getColor() const { + QMutexLocker lock(&m_mutex); + return m_color; +} + +void Cue::setColor(const QColor color) { + QMutexLocker lock(&m_mutex); + m_color = color; + m_bDirty = true; + lock.unlock(); + emit(updated()); +} + bool Cue::isDirty() const { QMutexLocker lock(&m_mutex); return m_bDirty; From b78cd5dc728786529a2c4c56713da585d7cd5f1a Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 14 Aug 2016 18:14:34 +0200 Subject: [PATCH 05/56] Modify CueDAO to support cue colors --- src/library/dao/cuedao.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/library/dao/cuedao.cpp b/src/library/dao/cuedao.cpp index 2bbbd4b24df..ed41f184285 100644 --- a/src/library/dao/cuedao.cpp +++ b/src/library/dao/cuedao.cpp @@ -62,8 +62,9 @@ CuePointer CueDAO::cueFromRow(const QSqlQuery& query) const { int length = record.value(record.indexOf("length")).toInt(); int hotcue = record.value(record.indexOf("hotcue")).toInt(); QString label = record.value(record.indexOf("label")).toString(); + QColor color = QColor(record.value(record.indexOf("color")).toString()); CuePointer pCue(new Cue(id, trackId, (Cue::CueType)type, - position, length, hotcue, label)); + position, length, hotcue, label, color)); m_cues[id] = pCue; return pCue; } @@ -148,13 +149,14 @@ bool CueDAO::saveCue(Cue* cue) { if (cue->getId() == -1) { // New cue QSqlQuery query(m_database); - query.prepare("INSERT INTO " CUE_TABLE " (track_id, type, position, length, hotcue, label) VALUES (:track_id, :type, :position, :length, :hotcue, :label)"); + query.prepare("INSERT INTO " CUE_TABLE " (track_id, type, position, length, hotcue, label, color) VALUES (:track_id, :type, :position, :length, :hotcue, :label, :color)"); query.bindValue(":track_id", cue->getTrackId().toVariant()); query.bindValue(":type", cue->getType()); query.bindValue(":position", cue->getPosition()); query.bindValue(":length", cue->getLength()); query.bindValue(":hotcue", cue->getHotCue()); query.bindValue(":label", cue->getLabel()); + query.bindValue(":color", cue->getColor().name()); if (query.exec()) { int id = query.lastInsertId().toInt(); @@ -172,7 +174,8 @@ bool CueDAO::saveCue(Cue* cue) { "position = :position," "length = :length," "hotcue = :hotcue," - "label = :label" + "label = :label," + "color = :color" " WHERE id = :id"); query.bindValue(":id", cue->getId()); query.bindValue(":track_id", cue->getTrackId().toVariant()); @@ -181,6 +184,7 @@ bool CueDAO::saveCue(Cue* cue) { query.bindValue(":length", cue->getLength()); query.bindValue(":hotcue", cue->getHotCue()); query.bindValue(":label", cue->getLabel()); + query.bindValue(":color", cue->getColor().name()); if (query.exec()) { cue->setDirty(false); From ac14bde3ded4f071da37c10c536db5c3c8cc113c Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 14 Aug 2016 18:21:48 +0200 Subject: [PATCH 06/56] Update requiredSchemVersion --- src/library/trackcollection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library/trackcollection.cpp b/src/library/trackcollection.cpp index 5406bfbf8f8..1af6d52ebb2 100644 --- a/src/library/trackcollection.cpp +++ b/src/library/trackcollection.cpp @@ -14,7 +14,7 @@ #include "util/assert.h" // static -const int TrackCollection::kRequiredSchemaVersion = 26; +const int TrackCollection::kRequiredSchemaVersion = 27; TrackCollection::TrackCollection(UserSettingsPointer pConfig) : m_pConfig(pConfig), From 1065e48d088e19ce203b3776e548ec113e059bee Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 14 Aug 2016 18:25:50 +0200 Subject: [PATCH 07/56] Tabs for spaces --- src/library/dao/cue.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/library/dao/cue.cpp b/src/library/dao/cue.cpp index 7be901da0d8..3b9035eec0c 100644 --- a/src/library/dao/cue.cpp +++ b/src/library/dao/cue.cpp @@ -22,7 +22,7 @@ Cue::Cue(TrackId trackId) m_iLength(0), m_iHotCue(-1), m_label(""), - m_color(defaultColor) { + m_color(defaultColor) { } @@ -36,7 +36,7 @@ Cue::Cue(int id, TrackId trackId, Cue::CueType type, int position, int length, m_iLength(length), m_iHotCue(hotCue), m_label(label), - m_color(color) { + m_color(color) { } int Cue::getId() const { From c68086b9f587a53167cfc2655b3ef2c17f294fc5 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Fri, 16 Jan 2015 19:07:50 +0100 Subject: [PATCH 08/56] Hotcues now display their label in the waveform. --- src/waveform/renderers/waveformmark.cpp | 4 +- src/waveform/renderers/waveformmark.h | 2 + src/waveform/renderers/waveformmarkset.cpp | 9 +++- src/waveform/renderers/waveformmarkset.h | 3 ++ src/waveform/renderers/waveformrendermark.cpp | 54 ++++++++++++++++++- src/waveform/renderers/waveformrendermark.h | 16 +++++- 6 files changed, 83 insertions(+), 5 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 238c7d7a61d..39750c2c6f8 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -8,7 +8,8 @@ #include "widget/wskincolor.h" WaveformMark::WaveformMark() - : m_pPointCos(nullptr) { + : m_pPointCos(nullptr), + m_iIndex(-1) { } WaveformMark::~WaveformMark() { @@ -59,4 +60,5 @@ void WaveformMark::setKeyAndIndex(const ConfigKey& key, int i) { DEBUG_ASSERT(m_pPointCos == NULL); m_pPointCos = new ControlProxy(key); m_text = m_text.arg(i); + m_iIndex = i; } diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index cec6805fc20..615b73a13ec 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -30,6 +30,8 @@ class WaveformMark { Qt::Alignment m_align; QString m_pixmapPath; QImage m_image; + // Number of the corresponding Hotcue. + int m_iIndex; friend class WaveformMarkSet; friend class WaveformRenderMark; diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 3196ec838a2..c06b9dd4f58 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -5,7 +5,8 @@ #include "engine/cuecontrol.h" #include "control/controlobject.h" -WaveformMarkSet::WaveformMarkSet() { +WaveformMarkSet::WaveformMarkSet() + : m_iFirstHotCue(-1) { } WaveformMarkSet::~WaveformMarkSet() { @@ -47,6 +48,8 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, child = child.nextSibling(); } + if (NUM_HOT_CUES >= 1) m_iFirstHotCue = m_marks.size(); + // check if there is a default mark and compare declared // and to create all missing hot_cues if (hasDefaultMark) { @@ -72,3 +75,7 @@ void WaveformMarkSet::clear() { m_defaultMark = WaveformMark(); m_marks.clear(); } + +WaveformMark& WaveformMarkSet::getHotCueMark(int hotCue) { + return m_marks[m_iFirstHotCue + hotCue]; +} diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index fec4b7dec89..12eb25e4977 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -22,10 +22,13 @@ class WaveformMarkSet { WaveformMark& operator[] (int i) { return m_marks[i]; } const WaveformMark& getDefaultMark() const { return m_defaultMark;} + // hotCue must be valid (>= 0) + WaveformMark& getHotCueMark(int hotCue); private: WaveformMark m_defaultMark; QList m_marks; + int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); }; diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 5a1abfd3ded..79c03679180 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -12,6 +12,8 @@ #include "widget/wwidget.h" #include "widget/wimagestore.h" +const int iMaxCueLabelLenght = 23; + WaveformRenderMark::WaveformRenderMark(WaveformWidgetRenderer* waveformWidgetRenderer) : WaveformRendererAbstract(waveformWidgetRenderer) { } @@ -63,6 +65,44 @@ void WaveformRenderMark::draw(QPainter* painter, QPaintEvent* /*event*/) { painter->restore(); } +void WaveformRenderMark::onSetTrack() { + slotCuesUpdated(); + + TrackPointer trackInfo = m_waveformRenderer->getTrackInfo(); + if (!trackInfo) { + return; + } + connect(trackInfo.data(), SIGNAL(cuesUpdated(void)), + this, SLOT(slotCuesUpdated(void))); +} + +void WaveformRenderMark::slotCuesUpdated() { + TrackPointer trackInfo = m_waveformRenderer->getTrackInfo(); + if (!trackInfo){ + return; + } + + QList loadedCues = trackInfo->getCuePoints(); + + // This assumes no two cues can have the same hotcue assigned. + QList::iterator it = loadedCues.begin(); + while (it != loadedCues.end()) { + int hotCue = (*it)->getHotCue(); + if (hotCue == -1) { + ++it; + continue; + } + + QString newLabel = (*it)->getLabel(); + WaveformMark& mark = m_marks.getHotCueMark(hotCue); + if (newLabel != mark.m_text) { + mark.m_text = newLabel; + generateMarkImage(mark); + } + ++it; + } +} + void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { // Load the pixmap from file -- takes precedence over text. if (mark.m_pixmapPath != "") { @@ -84,6 +124,16 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { // If no text is provided, leave m_markImage as a null image if (!mark.m_text.isNull()) { + // Determine mark text. + QString label = mark.m_text; + if (mark.m_iIndex != -1) { + if (label != "") label.prepend(": "); + label.prepend(QString::number(mark.m_iIndex)); + if (label.size() > iMaxCueLabelLenght) { + label = label.left(iMaxCueLabelLenght - 3) + "..."; + } + } + //QFont font("Bitstream Vera Sans"); //QFont font("Helvetica"); QFont font; // Uses the application default @@ -93,7 +143,7 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { QFontMetrics metrics(font); //fixed margin ... - QRect wordRect = metrics.tightBoundingRect(mark.m_text); + QRect wordRect = metrics.tightBoundingRect(label); const int marginX = 1; const int marginY = 1; wordRect.moveTop(marginX + 1); @@ -136,7 +186,7 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { font.setWeight(75); painter.setFont(font); painter.setPen(mark.m_textColor); - painter.drawText(labelRect, Qt::AlignCenter, mark.m_text); + painter.drawText(labelRect, Qt::AlignCenter, label); //draw line QColor lineColor = mark.m_color; diff --git a/src/waveform/renderers/waveformrendermark.h b/src/waveform/renderers/waveformrendermark.h index 5399f9e431e..a66c3577003 100644 --- a/src/waveform/renderers/waveformrendermark.h +++ b/src/waveform/renderers/waveformrendermark.h @@ -1,18 +1,32 @@ #ifndef WAVEFORMRENDERMARK_H #define WAVEFORMRENDERMARK_H +#include + #include "skin/skincontext.h" #include "util/class.h" #include "waveform/renderers/waveformmarkset.h" #include "waveform/renderers/waveformrendererabstract.h" +#include "library/dao/cue.h" +#include "preferences/configobject.h" -class WaveformRenderMark : public WaveformRendererAbstract { +class WaveformRenderMark : public QObject, public WaveformRendererAbstract { + Q_OBJECT public: explicit WaveformRenderMark(WaveformWidgetRenderer* waveformWidgetRenderer); virtual void setup(const QDomNode& node, const SkinContext& context); virtual void draw(QPainter* painter, QPaintEvent* event); + // Called when a new track is loaded. + virtual void onSetTrack(); + + public slots: + // Called when the loaded track's cues are added, deleted or modified and + // when a new track is loaded. + // It updates the marks' names and regenerates their image if needed. + void slotCuesUpdated(); + private: void generateMarkImage(WaveformMark& mark); From fbcc455724d82073cdee184087bb7cdf53684167 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Mon, 15 Aug 2016 00:57:16 +0200 Subject: [PATCH 09/56] Make waveformmarks be rendered with the color stored in Cue --- src/waveform/renderers/waveformrendermark.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 79c03679180..79e27cf9d25 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -94,9 +94,11 @@ void WaveformRenderMark::slotCuesUpdated() { } QString newLabel = (*it)->getLabel(); + QColor newColor = (*it)->getColor(); WaveformMark& mark = m_marks.getHotCueMark(hotCue); - if (newLabel != mark.m_text) { + if (newLabel != mark.m_text || newColor != mark.m_color) { mark.m_text = newLabel; + mark.m_color = newColor; generateMarkImage(mark); } ++it; From 07997b7f38cc4aa7600bbdcd98fc2b509f33224d Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 11:16:08 +0200 Subject: [PATCH 10/56] Use QColor for defaultColor constant and enclose it in a namespace. --- src/library/dao/cue.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/library/dao/cue.cpp b/src/library/dao/cue.cpp index 3b9035eec0c..8b3e005d084 100644 --- a/src/library/dao/cue.cpp +++ b/src/library/dao/cue.cpp @@ -7,7 +7,9 @@ #include "library/dao/cue.h" #include "util/assert.h" -const QString defaultColor = "#FF0000"; +namespace { + const QColor defaultColor = QColor("#FF0000"); +} Cue::~Cue() { qDebug() << "~Cue()" << m_iId; From ac06fc1a56ee84dab5b1700509800eccafd6766c Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 12:24:19 +0200 Subject: [PATCH 11/56] Explicitly check for uninitialized mark values in slotCuesUpdated() Also remove empty string literal from Cue constructor. --- src/library/dao/cue.cpp | 2 +- src/waveform/renderers/waveformrendermark.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/library/dao/cue.cpp b/src/library/dao/cue.cpp index 8b3e005d084..c26a410af64 100644 --- a/src/library/dao/cue.cpp +++ b/src/library/dao/cue.cpp @@ -23,7 +23,7 @@ Cue::Cue(TrackId trackId) m_iPosition(-1), m_iLength(0), m_iHotCue(-1), - m_label(""), + m_label(), m_color(defaultColor) { } diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 79e27cf9d25..03fd7cff3c3 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -96,7 +96,7 @@ void WaveformRenderMark::slotCuesUpdated() { QString newLabel = (*it)->getLabel(); QColor newColor = (*it)->getColor(); WaveformMark& mark = m_marks.getHotCueMark(hotCue); - if (newLabel != mark.m_text || newColor != mark.m_color) { + if (mark.m_text.isNull() || newLabel != mark.m_text || !mark.m_color.isValid() || newColor != mark.m_color) { mark.m_text = newLabel; mark.m_color = newColor; generateMarkImage(mark); From 48eed12f322faea19bf84ca9ade443066b5044fa Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 12:37:49 +0200 Subject: [PATCH 12/56] Improve coding style --- src/library/dao/cue.h | 4 ++-- src/library/dao/cuedao.cpp | 2 +- src/waveform/renderers/waveformmarkset.cpp | 4 +++- src/waveform/renderers/waveformrendermark.cpp | 6 ++++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/library/dao/cue.h b/src/library/dao/cue.h index 6140aeb9f85..94fd0a477a1 100644 --- a/src/library/dao/cue.h +++ b/src/library/dao/cue.h @@ -45,10 +45,10 @@ class Cue : public QObject { void setHotCue(int hotCue); QString getLabel() const; - void setLabel(const QString label); + void setLabel(QString label); QColor getColor() const; - void setColor(const QColor color); + void setColor(QColor color); signals: void updated(); diff --git a/src/library/dao/cuedao.cpp b/src/library/dao/cuedao.cpp index ed41f184285..f8bbafcd4f5 100644 --- a/src/library/dao/cuedao.cpp +++ b/src/library/dao/cuedao.cpp @@ -62,7 +62,7 @@ CuePointer CueDAO::cueFromRow(const QSqlQuery& query) const { int length = record.value(record.indexOf("length")).toInt(); int hotcue = record.value(record.indexOf("hotcue")).toInt(); QString label = record.value(record.indexOf("label")).toString(); - QColor color = QColor(record.value(record.indexOf("color")).toString()); + QColor color(record.value(record.indexOf("color")).toString()); CuePointer pCue(new Cue(id, trackId, (Cue::CueType)type, position, length, hotcue, label, color)); m_cues[id] = pCue; diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index c06b9dd4f58..2ab25e1d452 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -48,7 +48,9 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, child = child.nextSibling(); } - if (NUM_HOT_CUES >= 1) m_iFirstHotCue = m_marks.size(); + if (NUM_HOT_CUES >= 1) { + m_iFirstHotCue = m_marks.size(); + } // check if there is a default mark and compare declared // and to create all missing hot_cues diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 03fd7cff3c3..f95a00041fa 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -127,9 +127,11 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { // If no text is provided, leave m_markImage as a null image if (!mark.m_text.isNull()) { // Determine mark text. - QString label = mark.m_text; + QString label = mark.m_text; if (mark.m_iIndex != -1) { - if (label != "") label.prepend(": "); + if (!label.isEmpty()) { + label.prepend(": "); + } label.prepend(QString::number(mark.m_iIndex)); if (label.size() > iMaxCueLabelLenght) { label = label.left(iMaxCueLabelLenght - 3) + "..."; From 168859b9d7bd0d809b8e9e6dc047f81ade9aee69 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 12:45:51 +0200 Subject: [PATCH 13/56] Add debug asserts for valid parameter to getHotCueMark --- src/waveform/renderers/waveformmarkset.cpp | 2 ++ src/waveform/renderers/waveformmarkset.h | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 2ab25e1d452..8648f9af325 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -79,5 +79,7 @@ void WaveformMarkSet::clear() { } WaveformMark& WaveformMarkSet::getHotCueMark(int hotCue) { + DEBUG_ASSERT(hotCue >= 0); + DEBUG_ASSERT(hotCue < NUM_HOT_CUES); return m_marks[m_iFirstHotCue + hotCue]; } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 12eb25e4977..9539574abb5 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -22,7 +22,8 @@ class WaveformMarkSet { WaveformMark& operator[] (int i) { return m_marks[i]; } const WaveformMark& getDefaultMark() const { return m_defaultMark;} - // hotCue must be valid (>= 0) + + // hotCue must be valid (>= 0 and < NUM_HOT_CUES) WaveformMark& getHotCueMark(int hotCue); private: From 9895b8788e2c19f04e2836a1a04b82fdcb72a26f Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 14:15:47 +0200 Subject: [PATCH 14/56] Enclose iMaxCueLabelLenght in a namespace --- src/waveform/renderers/waveformrendermark.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index f95a00041fa..fa547ef585e 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -12,7 +12,9 @@ #include "widget/wwidget.h" #include "widget/wimagestore.h" -const int iMaxCueLabelLenght = 23; +namespace { + const int iMaxCueLabelLenght = 23; +} WaveformRenderMark::WaveformRenderMark(WaveformWidgetRenderer* waveformWidgetRenderer) : WaveformRendererAbstract(waveformWidgetRenderer) { From 5b1dfea800125ec398269c5b3c6845d05e631bba Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 14:35:36 +0200 Subject: [PATCH 15/56] Refactor Cues enumeration with a for each loop in slotCuesUpdated --- src/waveform/renderers/waveformrendermark.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index fa547ef585e..9fe0e09024d 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -85,25 +85,23 @@ void WaveformRenderMark::slotCuesUpdated() { } QList loadedCues = trackInfo->getCuePoints(); - - // This assumes no two cues can have the same hotcue assigned. - QList::iterator it = loadedCues.begin(); - while (it != loadedCues.end()) { - int hotCue = (*it)->getHotCue(); + for (const CuePointer pCue: loadedCues) { + int hotCue = pCue->getHotCue(); if (hotCue == -1) { - ++it; continue; } - QString newLabel = (*it)->getLabel(); - QColor newColor = (*it)->getColor(); + QString newLabel = pCue->getLabel(); + QColor newColor = pCue->getColor(); + + // Here we assume no two cues can have the same hotcue assigned, + // because WaveformMarkSet stores one mark for each hotcue. WaveformMark& mark = m_marks.getHotCueMark(hotCue); if (mark.m_text.isNull() || newLabel != mark.m_text || !mark.m_color.isValid() || newColor != mark.m_color) { mark.m_text = newLabel; mark.m_color = newColor; generateMarkImage(mark); } - ++it; } } From a0229f7399848568ddb4a62d168b231a25ecbe75 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 14:41:50 +0200 Subject: [PATCH 16/56] Fix empty string check in WaveformRenderMark --- src/waveform/renderers/waveformrendermark.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 9fe0e09024d..28b9c7ca762 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -107,7 +107,7 @@ void WaveformRenderMark::slotCuesUpdated() { void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { // Load the pixmap from file -- takes precedence over text. - if (mark.m_pixmapPath != "") { + if (!mark.m_pixmapPath.isEmpty()) { QString path = mark.m_pixmapPath; QImage image = QImage(path); // If loading the image didn't fail, then we're done. Otherwise fall From fb939de67b79c9dd92424df546e231af8eecc729 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 20:11:33 +0200 Subject: [PATCH 17/56] Change cue color database type to integer (QRgb) --- res/schema.xml | 2 +- src/library/dao/cuedao.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/res/schema.xml b/res/schema.xml index 832d501338b..0db6a93e323 100644 --- a/res/schema.xml +++ b/res/schema.xml @@ -422,7 +422,7 @@ METADATA See library/dao/cue.h. - ALTER TABLE cues ADD COLUMN color CHARACTER(6) DEFAULT "FF0000" NOT NULL; + ALTER TABLE cues ADD COLUMN color INTEGER DEFAULT 0xFFFF0000 NOT NULL; diff --git a/src/library/dao/cuedao.cpp b/src/library/dao/cuedao.cpp index f8bbafcd4f5..e9c5c6f3764 100644 --- a/src/library/dao/cuedao.cpp +++ b/src/library/dao/cuedao.cpp @@ -62,7 +62,7 @@ CuePointer CueDAO::cueFromRow(const QSqlQuery& query) const { int length = record.value(record.indexOf("length")).toInt(); int hotcue = record.value(record.indexOf("hotcue")).toInt(); QString label = record.value(record.indexOf("label")).toString(); - QColor color(record.value(record.indexOf("color")).toString()); + QColor color = QColor::fromRgba(record.value(record.indexOf("color")).toInt()); CuePointer pCue(new Cue(id, trackId, (Cue::CueType)type, position, length, hotcue, label, color)); m_cues[id] = pCue; @@ -156,7 +156,7 @@ bool CueDAO::saveCue(Cue* cue) { query.bindValue(":length", cue->getLength()); query.bindValue(":hotcue", cue->getHotCue()); query.bindValue(":label", cue->getLabel()); - query.bindValue(":color", cue->getColor().name()); + query.bindValue(":color", cue->getColor().rgba()); if (query.exec()) { int id = query.lastInsertId().toInt(); @@ -184,7 +184,7 @@ bool CueDAO::saveCue(Cue* cue) { query.bindValue(":length", cue->getLength()); query.bindValue(":hotcue", cue->getHotCue()); query.bindValue(":label", cue->getLabel()); - query.bindValue(":color", cue->getColor().name()); + query.bindValue(":color", cue->getColor().rgba()); if (query.exec()) { cue->setDirty(false); From e9779423fc04493b9f99b0bfd2d793dc880d429b Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Wed, 17 Aug 2016 20:16:22 +0200 Subject: [PATCH 18/56] Rename constants --- src/library/dao/cue.cpp | 4 ++-- src/waveform/renderers/waveformrendermark.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/library/dao/cue.cpp b/src/library/dao/cue.cpp index c26a410af64..b2d05216cfe 100644 --- a/src/library/dao/cue.cpp +++ b/src/library/dao/cue.cpp @@ -8,7 +8,7 @@ #include "util/assert.h" namespace { - const QColor defaultColor = QColor("#FF0000"); + const QColor kDefaultColor = QColor("#FF0000"); } Cue::~Cue() { @@ -24,7 +24,7 @@ Cue::Cue(TrackId trackId) m_iLength(0), m_iHotCue(-1), m_label(), - m_color(defaultColor) { + m_color(kDefaultColor) { } diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 28b9c7ca762..55d000365e4 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -13,7 +13,7 @@ #include "widget/wimagestore.h" namespace { - const int iMaxCueLabelLenght = 23; + const int kMaxCueLabelLength = 23; } WaveformRenderMark::WaveformRenderMark(WaveformWidgetRenderer* waveformWidgetRenderer) : @@ -133,8 +133,8 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { label.prepend(": "); } label.prepend(QString::number(mark.m_iIndex)); - if (label.size() > iMaxCueLabelLenght) { - label = label.left(iMaxCueLabelLenght - 3) + "..."; + if (label.size() > kMaxCueLabelLength) { + label = label.left(kMaxCueLabelLength - 3) + "..."; } } From c1aec4487b7f5021aa8acdee39006dfd5b30099c Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 08:25:03 +0200 Subject: [PATCH 19/56] Change references for pointers. --- src/waveform/renderers/waveformmarkset.cpp | 4 +- src/waveform/renderers/waveformmarkset.h | 6 +- src/waveform/renderers/waveformrendermark.cpp | 84 +++++++++---------- src/waveform/renderers/waveformrendermark.h | 2 +- src/widget/woverview.cpp | 26 +++--- 5 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 8648f9af325..b2d2fef3e1b 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -78,8 +78,8 @@ void WaveformMarkSet::clear() { m_marks.clear(); } -WaveformMark& WaveformMarkSet::getHotCueMark(int hotCue) { +WaveformMark* WaveformMarkSet::getHotCueMark(int hotCue) { DEBUG_ASSERT(hotCue >= 0); DEBUG_ASSERT(hotCue < NUM_HOT_CUES); - return m_marks[m_iFirstHotCue + hotCue]; + return &m_marks[m_iFirstHotCue + hotCue]; } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 9539574abb5..edc37b38bf4 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -19,12 +19,12 @@ class WaveformMarkSet { void clear(); int size() const { return m_marks.size();} - WaveformMark& operator[] (int i) { return m_marks[i]; } + WaveformMark* operator[] (int i) { return &m_marks[i]; } - const WaveformMark& getDefaultMark() const { return m_defaultMark;} + const WaveformMark* getDefaultMark() const { return &m_defaultMark;} // hotCue must be valid (>= 0 and < NUM_HOT_CUES) - WaveformMark& getHotCueMark(int hotCue); + WaveformMark* getHotCueMark(int hotCue); private: WaveformMark m_defaultMark; diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 55d000365e4..5fdee0e08c6 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -39,28 +39,28 @@ void WaveformRenderMark::draw(QPainter* painter, QPaintEvent* /*event*/) { painter->setWorldMatrixEnabled(false); for (int i = 0; i < m_marks.size(); i++) { - WaveformMark& mark = m_marks[i]; + WaveformMark* mark = m_marks[i]; - if (!mark.m_pPointCos) + if (!mark->m_pPointCos) continue; // Generate image on first paint can't be done in setup since we need // render widget to be resized yet ... - if (mark.m_image.isNull()) { + if (mark->m_image.isNull()) { generateMarkImage(mark); } - int samplePosition = mark.m_pPointCos->get(); + int samplePosition = mark->m_pPointCos->get(); if (samplePosition > 0.0) { double currentMarkPoint = m_waveformRenderer->transformSampleIndexInRendererWorld(samplePosition); // NOTE: vRince I guess image width is odd to display the center on the exact line ! //external image should respect that ... - const int markHalfWidth = mark.m_image.width() / 2.0; + const int markHalfWidth = mark->m_image.width() / 2.0; //check if the current point need to be displayed if (currentMarkPoint > -markHalfWidth && currentMarkPoint < m_waveformRenderer->getWidth() + markHalfWidth) { - painter->drawImage(QPoint(currentMarkPoint-markHalfWidth,0), mark.m_image); + painter->drawImage(QPoint(currentMarkPoint-markHalfWidth,0), mark->m_image); } } } @@ -96,25 +96,25 @@ void WaveformRenderMark::slotCuesUpdated() { // Here we assume no two cues can have the same hotcue assigned, // because WaveformMarkSet stores one mark for each hotcue. - WaveformMark& mark = m_marks.getHotCueMark(hotCue); - if (mark.m_text.isNull() || newLabel != mark.m_text || !mark.m_color.isValid() || newColor != mark.m_color) { - mark.m_text = newLabel; - mark.m_color = newColor; + WaveformMark* mark = m_marks.getHotCueMark(hotCue); + if (mark->m_text.isNull() || newLabel != mark->m_text || !mark->m_color.isValid() || newColor != mark->m_color) { + mark->m_text = newLabel; + mark->m_color = newColor; generateMarkImage(mark); } } } -void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { +void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { // Load the pixmap from file -- takes precedence over text. - if (!mark.m_pixmapPath.isEmpty()) { - QString path = mark.m_pixmapPath; + if (!mark->m_pixmapPath.isEmpty()) { + QString path = mark->m_pixmapPath; QImage image = QImage(path); // If loading the image didn't fail, then we're done. Otherwise fall // through and render a label. if (!image.isNull()) { - mark.m_image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); - WImageStore::correctImageColors(&mark.m_image); + mark->m_image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); + WImageStore::correctImageColors(&mark->m_image); return; } } @@ -125,14 +125,14 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { int labelRectHeight = 0; // If no text is provided, leave m_markImage as a null image - if (!mark.m_text.isNull()) { + if (!mark->m_text.isNull()) { // Determine mark text. - QString label = mark.m_text; - if (mark.m_iIndex != -1) { + QString label = mark->m_text; + if (mark->m_iIndex != -1) { if (!label.isEmpty()) { label.prepend(": "); } - label.prepend(QString::number(mark.m_iIndex)); + label.prepend(QString::number(mark->m_iIndex)); if (label.size() > kMaxCueLabelLength) { label = label.left(kMaxCueLabelLength - 3) + "..."; } @@ -161,26 +161,26 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { QRectF labelRect(0, 0, (float)labelRectWidth, (float)labelRectHeight); - mark.m_image = QImage(labelRectWidth+1, + mark->m_image = QImage(labelRectWidth+1, m_waveformRenderer->getHeight(), QImage::Format_ARGB32_Premultiplied); - if (mark.m_align == Qt::AlignBottom) { - labelRect.moveBottom(mark.m_image.height()-1); + if (mark->m_align == Qt::AlignBottom) { + labelRect.moveBottom(mark->m_image.height()-1); } // Fill with transparent pixels - mark.m_image.fill(QColor(0,0,0,0).rgba()); + mark->m_image.fill(QColor(0,0,0,0).rgba()); - painter.begin(&mark.m_image); + painter.begin(&mark->m_image); painter.setRenderHint(QPainter::TextAntialiasing); painter.setWorldMatrixEnabled(false); //draw the label rect - QColor rectColor = mark.m_color; + QColor rectColor = mark->m_color; rectColor.setAlpha(150); - painter.setPen(mark.m_color); + painter.setPen(mark->m_color); painter.setBrush(QBrush(rectColor)); painter.drawRoundedRect(labelRect, 2.0, 2.0); //painter.drawRect(labelRect); @@ -189,22 +189,22 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { painter.setBrush(QBrush(QColor(0,0,0,0))); font.setWeight(75); painter.setFont(font); - painter.setPen(mark.m_textColor); + painter.setPen(mark->m_textColor); painter.drawText(labelRect, Qt::AlignCenter, label); //draw line - QColor lineColor = mark.m_color; + QColor lineColor = mark->m_color; lineColor.setAlpha(200); painter.setPen(lineColor); - float middle = mark.m_image.width() / 2.0; + float middle = mark->m_image.width() / 2.0; //Default line align top float lineTop = labelRectHeight + 1; - float lineBottom = mark.m_image.height(); + float lineBottom = mark->m_image.height(); - if (mark.m_align == Qt::AlignBottom) { + if (mark->m_align == Qt::AlignBottom) { lineTop = 0.0; - lineBottom = mark.m_image.height() - labelRectHeight - 1; + lineBottom = mark->m_image.height() - labelRectHeight - 1; } painter.drawLine(middle, lineTop, middle, lineBottom); @@ -218,17 +218,17 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { else //no text draw triangle { float triangleSize = 9.0; - mark.m_image = QImage(labelRectWidth+1, + mark->m_image = QImage(labelRectWidth+1, m_waveformRenderer->getHeight(), QImage::Format_ARGB32_Premultiplied); - mark.m_image.fill(QColor(0,0,0,0).rgba()); + mark->m_image.fill(QColor(0,0,0,0).rgba()); - painter.begin(&mark.m_image); + painter.begin(&mark->m_image); painter.setRenderHint(QPainter::TextAntialiasing); painter.setWorldMatrixEnabled(false); - QColor triangleColor = mark.m_color; + QColor triangleColor = mark->m_color; triangleColor.setAlpha(140); painter.setPen(QColor(0,0,0,0)); painter.setBrush(QBrush(triangleColor)); @@ -244,21 +244,21 @@ void WaveformRenderMark::generateMarkImage(WaveformMark& mark) { painter.drawPolygon(triangle); triangle.clear(); - triangle.append(QPointF(0.0,mark.m_image.height())); - triangle.append(QPointF(triangleSize+0.5,mark.m_image.height())); - triangle.append(QPointF(triangleSize*0.5 + 0.1, mark.m_image.height() - triangleSize*0.5 - 2.1)); + triangle.append(QPointF(0.0,mark->m_image.height())); + triangle.append(QPointF(triangleSize+0.5,mark->m_image.height())); + triangle.append(QPointF(triangleSize*0.5 + 0.1, mark->m_image.height() - triangleSize*0.5 - 2.1)); painter.drawPolygon(triangle); //TODO vRince duplicated code make a method //draw line - QColor lineColor = mark.m_color; + QColor lineColor = mark->m_color; lineColor.setAlpha(140); painter.setPen(lineColor); - float middle = mark.m_image.width() / 2.0; + float middle = mark->m_image.width() / 2.0; float lineTop = triangleSize * 0.5 + 1; - float lineBottom = mark.m_image.height() - triangleSize * 0.5 - 1; + float lineBottom = mark->m_image.height() - triangleSize * 0.5 - 1; painter.drawLine(middle, lineTop, middle, lineBottom); diff --git a/src/waveform/renderers/waveformrendermark.h b/src/waveform/renderers/waveformrendermark.h index a66c3577003..ce2c581fb60 100644 --- a/src/waveform/renderers/waveformrendermark.h +++ b/src/waveform/renderers/waveformrendermark.h @@ -28,7 +28,7 @@ class WaveformRenderMark : public QObject, public WaveformRendererAbstract { void slotCuesUpdated(); private: - void generateMarkImage(WaveformMark& mark); + void generateMarkImage(WaveformMark* mark); WaveformMarkSet m_marks; DISALLOW_COPY_AND_ASSIGN(WaveformRenderMark); diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index e88d31085db..a534047f423 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -93,9 +93,9 @@ void WOverview::setup(const QDomNode& node, const SkinContext& context) { m_marks.setup(m_group, node, context, m_signalColors); for (int i = 0; i < m_marks.size(); ++i) { - WaveformMark& mark = m_marks[i]; - if (mark.m_pPointCos) { - mark.m_pPointCos->connectValueChanged(this, + WaveformMark* mark = m_marks[i]; + if (mark->m_pPointCos) { + mark->m_pPointCos->connectValueChanged(this, SLOT(onMarkChanged(double))); } } @@ -392,37 +392,37 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) { painter.setOpacity(0.9); for (int i = 0; i < m_marks.size(); ++i) { - WaveformMark& currentMark = m_marks[i]; - if (currentMark.m_pPointCos && currentMark.m_pPointCos->get() >= 0.0) { + WaveformMark* currentMark = m_marks[i]; + if (currentMark->m_pPointCos && currentMark->m_pPointCos->get() >= 0.0) { //const float markPosition = 1.0 + // (currentMark.m_pointControl->get() / (float)m_trackSamplesControl->get()) * (float)(width()-2); - const float markPosition = offset + currentMark.m_pPointCos->get() * gain; + const float markPosition = offset + currentMark->m_pPointCos->get() * gain; const QLineF line(markPosition, 0.0, markPosition, static_cast(height())); painter.setPen(shadowPen); painter.drawLine(line); - painter.setPen(currentMark.m_color); + painter.setPen(currentMark->m_color); painter.drawLine(line); - if (!currentMark.m_text.isEmpty()) { + if (!currentMark->m_text.isEmpty()) { QPointF textPoint; textPoint.setX(markPosition + 0.5f); - if (currentMark.m_align == Qt::AlignTop) { + if (currentMark->m_align == Qt::AlignTop) { QFontMetricsF metric(markerFont); - textPoint.setY(metric.tightBoundingRect(currentMark.m_text).height()+0.5f); + textPoint.setY(metric.tightBoundingRect(currentMark->m_text).height()+0.5f); } else { textPoint.setY(float(height())-0.5f); } painter.setPen(shadowPen); painter.setFont(shadowFont); - painter.drawText(textPoint,currentMark.m_text); + painter.drawText(textPoint,currentMark->m_text); - painter.setPen(currentMark.m_textColor); + painter.setPen(currentMark->m_textColor); painter.setFont(markerFont); - painter.drawText(textPoint,currentMark.m_text); + painter.drawText(textPoint,currentMark->m_text); } } } From 9f7230da286ce68c583c02c7df5fd2105f266852 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 21:37:27 +0200 Subject: [PATCH 20/56] Replace WaveformMark CO normal pointer by a unique_ptr --- src/waveform/renderers/waveformmark.cpp | 12 ++++-------- src/waveform/renderers/waveformmark.h | 4 ++-- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 39750c2c6f8..ce0ef94c67f 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -6,14 +6,10 @@ #include "control/controlobject.h" #include "control/controlproxy.h" #include "widget/wskincolor.h" +#include "util/memory.h" WaveformMark::WaveformMark() - : m_pPointCos(nullptr), - m_iIndex(-1) { -} - -WaveformMark::~WaveformMark() { - delete m_pPointCos; + : m_iIndex(-1) { } void WaveformMark::setup(const QString& group, const QDomNode& node, @@ -21,7 +17,7 @@ void WaveformMark::setup(const QString& group, const QDomNode& node, const WaveformSignalColors& signalColors) { QString item = context.selectString(node, "Control"); if (!item.isEmpty()) { - m_pPointCos = new ControlProxy(group, item); + m_pPointCos = std::make_unique(group, item); } m_color = context.selectString(node, "Color"); @@ -58,7 +54,7 @@ void WaveformMark::setup(const QString& group, const QDomNode& node, // TODO(XXX): subclass and override WaveformMark::setup void WaveformMark::setKeyAndIndex(const ConfigKey& key, int i) { DEBUG_ASSERT(m_pPointCos == NULL); - m_pPointCos = new ControlProxy(key); + m_pPointCos = std::make_unique(key); m_text = m_text.arg(i); m_iIndex = i; } diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 615b73a13ec..ea22d804fcc 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -7,6 +7,7 @@ #include "preferences/usersettings.h" #include "skin/skincontext.h" +#include "util/memory.h" class ControlProxy; class QDomNode; @@ -15,14 +16,13 @@ class WaveformSignalColors; class WaveformMark { public: WaveformMark(); - ~WaveformMark(); void setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors); void setKeyAndIndex(const ConfigKey& key, int i); private: - ControlProxy* m_pPointCos; + std::unique_ptr m_pPointCos; QColor m_color; QColor m_textColor; From 683638d86d34c3043d7af65bd7d377c5b3cfb502 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 21:43:02 +0200 Subject: [PATCH 21/56] Make WaveformMarkSet store mark pointer instead of marks --- src/waveform/renderers/waveformmarkset.cpp | 3 ++- src/waveform/renderers/waveformmarkset.h | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index b2d2fef3e1b..2b1de8191f6 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -75,11 +75,12 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, void WaveformMarkSet::clear() { m_defaultMark = WaveformMark(); + qDeleteAll(m_marks); m_marks.clear(); } WaveformMark* WaveformMarkSet::getHotCueMark(int hotCue) { DEBUG_ASSERT(hotCue >= 0); DEBUG_ASSERT(hotCue < NUM_HOT_CUES); - return &m_marks[m_iFirstHotCue + hotCue]; + return m_marks[m_iFirstHotCue + hotCue]; } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index edc37b38bf4..ccd41a7ff74 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -19,7 +19,7 @@ class WaveformMarkSet { void clear(); int size() const { return m_marks.size();} - WaveformMark* operator[] (int i) { return &m_marks[i]; } + WaveformMark* operator[] (int i) { return m_marks[i]; } const WaveformMark* getDefaultMark() const { return &m_defaultMark;} @@ -28,7 +28,7 @@ class WaveformMarkSet { private: WaveformMark m_defaultMark; - QList m_marks; + QList m_marks; int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); }; From e4b585c6312a946a92b6f2b21225c99f2d98960d Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 21:48:16 +0200 Subject: [PATCH 22/56] Fix make_unique template inference --- src/waveform/renderers/waveformmark.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index ce0ef94c67f..a908a436bf0 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -17,7 +17,7 @@ void WaveformMark::setup(const QString& group, const QDomNode& node, const WaveformSignalColors& signalColors) { QString item = context.selectString(node, "Control"); if (!item.isEmpty()) { - m_pPointCos = std::make_unique(group, item); + m_pPointCos = std::make_unique(group, item); } m_color = context.selectString(node, "Color"); From 4503e06b3279e04635ce55858b15aff7c0f95ccf Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 21:50:43 +0200 Subject: [PATCH 23/56] Fix make_unique template inference --- src/waveform/renderers/waveformmark.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index a908a436bf0..2a474cd8260 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -54,7 +54,7 @@ void WaveformMark::setup(const QString& group, const QDomNode& node, // TODO(XXX): subclass and override WaveformMark::setup void WaveformMark::setKeyAndIndex(const ConfigKey& key, int i) { DEBUG_ASSERT(m_pPointCos == NULL); - m_pPointCos = std::make_unique(key); + m_pPointCos = std::make_unique(key); m_text = m_text.arg(i); m_iIndex = i; } From 3edd68012a11bc01e784896734694226f767f530 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 21:56:55 +0200 Subject: [PATCH 24/56] Fix WaveformMarkSet access to WaveformMarks pointers --- src/waveform/renderers/waveformmarkset.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 2b1de8191f6..ff3ad9ea7a8 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -32,13 +32,13 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, m_defaultMark.setup(group, child, context, signalColors); hasDefaultMark = true; } else if (child.nodeName() == "Mark") { - m_marks.push_back(WaveformMark()); - WaveformMark& mark = m_marks.back(); - mark.setup(group, child, context, signalColors); + m_marks.push_back(new WaveformMark()); + WaveformMark* mark = m_marks.back(); + mark->setup(group, child, context, signalColors); - if (mark.m_pPointCos) { + if (mark->m_pPointCos) { // guarantee uniqueness even if there is a misdesigned skin - QString item = mark.m_pPointCos->getKey().item; + QString item = mark->m_pPointCos->getKey().item; if (!controlItemSet.insert(item).second) { qWarning() << "WaveformRenderMark::setup - redefinition of" << item; m_marks.removeAt(m_marks.size() - 1); @@ -65,9 +65,9 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - m_marks.push_back(m_defaultMark); - WaveformMark& mark = m_marks.back(); - mark.setKeyAndIndex(pHotcue->getKey(), i); + m_marks.push_back(&m_defaultMark); + WaveformMark* mark = m_marks.back(); + mark->setKeyAndIndex(pHotcue->getKey(), i); } } } From ae5b59ecc4506293928307e847caf96ca400ca83 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 21:58:47 +0200 Subject: [PATCH 25/56] Make m_defaultMark a pointer --- src/waveform/renderers/waveformmarkset.cpp | 7 ++++--- src/waveform/renderers/waveformmarkset.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index ff3ad9ea7a8..12dd005a62e 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -29,7 +29,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, QDomNode child = node.firstChild(); while (!child.isNull()) { if (child.nodeName() == "DefaultMark") { - m_defaultMark.setup(group, child, context, signalColors); + m_defaultMark->setup(group, child, context, signalColors); hasDefaultMark = true; } else if (child.nodeName() == "Mark") { m_marks.push_back(new WaveformMark()); @@ -65,7 +65,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - m_marks.push_back(&m_defaultMark); + m_marks.push_back(m_defaultMark); WaveformMark* mark = m_marks.back(); mark->setKeyAndIndex(pHotcue->getKey(), i); } @@ -74,7 +74,8 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, } void WaveformMarkSet::clear() { - m_defaultMark = WaveformMark(); + delete m_defaultMark; + m_defaultMark = new WaveformMark(); qDeleteAll(m_marks); m_marks.clear(); } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index ccd41a7ff74..a29f372d285 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -21,13 +21,13 @@ class WaveformMarkSet { int size() const { return m_marks.size();} WaveformMark* operator[] (int i) { return m_marks[i]; } - const WaveformMark* getDefaultMark() const { return &m_defaultMark;} + const WaveformMark* getDefaultMark() const { return m_defaultMark;} // hotCue must be valid (>= 0 and < NUM_HOT_CUES) WaveformMark* getHotCueMark(int hotCue); private: - WaveformMark m_defaultMark; + WaveformMark* m_defaultMark; QList m_marks; int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); From e0bfdfd9898db6fb9b83c19749b7d90a554f7b70 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 22:06:25 +0200 Subject: [PATCH 26/56] Convert m_defaultMark to a unique_ptr --- src/waveform/renderers/waveformmarkset.cpp | 3 +-- src/waveform/renderers/waveformmarkset.h | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 12dd005a62e..7755a385e8c 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -74,8 +74,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, } void WaveformMarkSet::clear() { - delete m_defaultMark; - m_defaultMark = new WaveformMark(); + m_defaultMark = std:make_unique(); qDeleteAll(m_marks); m_marks.clear(); } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index a29f372d285..17e911412e9 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -5,6 +5,7 @@ #include "waveformmark.h" #include "skin/skincontext.h" +#include "util/memory.h" class WaveformWidgetRenderer; @@ -27,7 +28,7 @@ class WaveformMarkSet { WaveformMark* getHotCueMark(int hotCue); private: - WaveformMark* m_defaultMark; + std::unique_ptr m_defaultMark; QList m_marks; int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); From bd49637150d3c56a67e2c39ea744bbd4a78857e3 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 22:07:30 +0200 Subject: [PATCH 27/56] Rename m_pointCos to m_pPointCos --- src/waveform/renderers/waveformmarkset.cpp | 6 +++--- src/waveform/renderers/waveformmarkset.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 7755a385e8c..4bddd2e0c0d 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -29,7 +29,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, QDomNode child = node.firstChild(); while (!child.isNull()) { if (child.nodeName() == "DefaultMark") { - m_defaultMark->setup(group, child, context, signalColors); + m_pDefaultMark->setup(group, child, context, signalColors); hasDefaultMark = true; } else if (child.nodeName() == "Mark") { m_marks.push_back(new WaveformMark()); @@ -65,7 +65,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - m_marks.push_back(m_defaultMark); + m_marks.push_back(m_pDefaultMark); WaveformMark* mark = m_marks.back(); mark->setKeyAndIndex(pHotcue->getKey(), i); } @@ -74,7 +74,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, } void WaveformMarkSet::clear() { - m_defaultMark = std:make_unique(); + m_pDefaultMark = std:make_unique(); qDeleteAll(m_marks); m_marks.clear(); } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 17e911412e9..1a3fbb70297 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -22,13 +22,13 @@ class WaveformMarkSet { int size() const { return m_marks.size();} WaveformMark* operator[] (int i) { return m_marks[i]; } - const WaveformMark* getDefaultMark() const { return m_defaultMark;} + const WaveformMark* getDefaultMark() const { return m_pDefaultMark;} // hotCue must be valid (>= 0 and < NUM_HOT_CUES) WaveformMark* getHotCueMark(int hotCue); private: - std::unique_ptr m_defaultMark; + std::unique_ptr m_pDefaultMark; QList m_marks; int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); From 22b05874d66fff5288e7b192bbf0eb6320bbdbcf Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 22:12:38 +0200 Subject: [PATCH 28/56] Typo --- src/waveform/renderers/waveformmarkset.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 4bddd2e0c0d..d6a8a840f5d 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -74,7 +74,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, } void WaveformMarkSet::clear() { - m_pDefaultMark = std:make_unique(); + m_pDefaultMark = std::make_unique(); qDeleteAll(m_marks); m_marks.clear(); } From 67414df9d3a8ac025b3d211c44d49e4e3c9b476e Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 22:13:48 +0200 Subject: [PATCH 29/56] Fix getDefaultMark --- src/waveform/renderers/waveformmarkset.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 1a3fbb70297..5c0b25f4fcc 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -22,7 +22,7 @@ class WaveformMarkSet { int size() const { return m_marks.size();} WaveformMark* operator[] (int i) { return m_marks[i]; } - const WaveformMark* getDefaultMark() const { return m_pDefaultMark;} + const WaveformMark* getDefaultMark() const { return m_pDefaultMark.get();} // hotCue must be valid (>= 0 and < NUM_HOT_CUES) WaveformMark* getHotCueMark(int hotCue); From 4e24c09e8fc63226df4ef6cac0a3c1ae6533716e Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 22:28:14 +0200 Subject: [PATCH 30/56] Add clone constructor to WaveformMark --- src/waveform/renderers/waveformmark.cpp | 8 ++++++++ src/waveform/renderers/waveformmark.h | 2 ++ src/waveform/renderers/waveformmarkset.cpp | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 2a474cd8260..dd3fca98ad7 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -12,6 +12,14 @@ WaveformMark::WaveformMark() : m_iIndex(-1) { } +WaveformMark::WaveformMark(WaveformMark* p_waveformMark) + : m_color(p_waveformMark->m_color), + m_textColor(p_waveformMark->m_textColor), + m_text(p_waveformMark->m_text), + m_align(p_waveformMark->m_align), + m_pixmapPath(p_waveformMark->m_pixmapPath) { +} + void WaveformMark::setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors) { diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index ea22d804fcc..8df23c84105 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -16,6 +16,8 @@ class WaveformSignalColors; class WaveformMark { public: WaveformMark(); + WaveformMark(WaveformMark* p_waveformMark); + void setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors); diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index d6a8a840f5d..60444c99dde 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -65,7 +65,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - m_marks.push_back(m_pDefaultMark); + m_marks.push_back(new WaveformMark(m_pDefaultMark.get())); WaveformMark* mark = m_marks.back(); mark->setKeyAndIndex(pHotcue->getKey(), i); } From deba2aeebffbade5980893c414ca287f0f4783c8 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Thu, 18 Aug 2016 22:45:16 +0200 Subject: [PATCH 31/56] Provide proper setter for hot cue marks in WaveformMarkSet --- src/waveform/renderers/waveformmark.cpp | 2 +- src/waveform/renderers/waveformmark.h | 2 +- src/waveform/renderers/waveformmarkset.cpp | 7 ++++++- src/waveform/renderers/waveformmarkset.h | 4 +++- src/waveform/renderers/waveformrendermark.cpp | 13 ++++++++----- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index dd3fca98ad7..6f1fbb26275 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -12,7 +12,7 @@ WaveformMark::WaveformMark() : m_iIndex(-1) { } -WaveformMark::WaveformMark(WaveformMark* p_waveformMark) +WaveformMark::WaveformMark(const WaveformMark* p_waveformMark) : m_color(p_waveformMark->m_color), m_textColor(p_waveformMark->m_textColor), m_text(p_waveformMark->m_text), diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 8df23c84105..91ba8237095 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -16,7 +16,7 @@ class WaveformSignalColors; class WaveformMark { public: WaveformMark(); - WaveformMark(WaveformMark* p_waveformMark); + WaveformMark(const WaveformMark* p_waveformMark); void setup(const QString& group, const QDomNode& node, const SkinContext& context, diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 60444c99dde..ee533d7dfe1 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -79,8 +79,13 @@ void WaveformMarkSet::clear() { m_marks.clear(); } -WaveformMark* WaveformMarkSet::getHotCueMark(int hotCue) { +const WaveformMark* WaveformMarkSet::getHotCueMark(int hotCue) { DEBUG_ASSERT(hotCue >= 0); DEBUG_ASSERT(hotCue < NUM_HOT_CUES); return m_marks[m_iFirstHotCue + hotCue]; } + +void WaveformMarkSet::setHotCueMark(int hotCue, WaveformMark* mark) { + delete m_marks[m_iFirstHotCue + hotCue]; + m_marks[m_iFirstHotCue + hotCue] = mark; +} diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 5c0b25f4fcc..1af952179ad 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -25,7 +25,9 @@ class WaveformMarkSet { const WaveformMark* getDefaultMark() const { return m_pDefaultMark.get();} // hotCue must be valid (>= 0 and < NUM_HOT_CUES) - WaveformMark* getHotCueMark(int hotCue); + const WaveformMark* getHotCueMark(int hotCue); + // Takes ownership of mark + void setHotCueMark(int hotCue, WaveformMark* mark); private: std::unique_ptr m_pDefaultMark; diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 5fdee0e08c6..f95e48ad658 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -96,11 +96,14 @@ void WaveformRenderMark::slotCuesUpdated() { // Here we assume no two cues can have the same hotcue assigned, // because WaveformMarkSet stores one mark for each hotcue. - WaveformMark* mark = m_marks.getHotCueMark(hotCue); - if (mark->m_text.isNull() || newLabel != mark->m_text || !mark->m_color.isValid() || newColor != mark->m_color) { - mark->m_text = newLabel; - mark->m_color = newColor; - generateMarkImage(mark); + const WaveformMark* p_oldMark = m_marks.getHotCueMark(hotCue); + WaveformMark* p_newMark = new WaveformMark(p_oldMark); + p_newMark->setKeyAndIndex(p_oldMark->m_pPointCos->getKey(), hotCue); + if (p_newMark->m_text.isNull() || newLabel != p_newMark->m_text || !p_newMark->m_color.isValid() || newColor != p_newMark->m_color) { + p_newMark->m_text = newLabel; + p_newMark->m_color = newColor; + generateMarkImage(p_newMark); + m_marks.setHotCueMark(hotCue, p_newMark); } } } From 1f1b1079c7e4631cac1d79fbb6f7fa0601e71784 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Fri, 19 Aug 2016 12:54:28 +0200 Subject: [PATCH 32/56] Fix last hotcue not rendered --- src/waveform/renderers/waveformmarkset.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index ee533d7dfe1..7f5e59abe2d 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -55,7 +55,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, // check if there is a default mark and compare declared // and to create all missing hot_cues if (hasDefaultMark) { - for (int i = 1; i < NUM_HOT_CUES; ++i) { + for (int i = 1; i <= NUM_HOT_CUES; ++i) { QString hotCueControlItem = "hotcue_" + QString::number(i) + "_position"; ControlObject* pHotcue = ControlObject::getControl( ConfigKey(group, hotCueControlItem)); From cf6bfc4deb22dbce2f5b24811381e279a7b617cc Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Fri, 19 Aug 2016 13:02:02 +0200 Subject: [PATCH 33/56] Fix wrong hotcue number rendered --- src/waveform/renderers/waveformrendermark.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index f95e48ad658..c921302f33d 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -98,7 +98,7 @@ void WaveformRenderMark::slotCuesUpdated() { // because WaveformMarkSet stores one mark for each hotcue. const WaveformMark* p_oldMark = m_marks.getHotCueMark(hotCue); WaveformMark* p_newMark = new WaveformMark(p_oldMark); - p_newMark->setKeyAndIndex(p_oldMark->m_pPointCos->getKey(), hotCue); + p_newMark->setKeyAndIndex(p_oldMark->m_pPointCos->getKey(), hotCue + 1); if (p_newMark->m_text.isNull() || newLabel != p_newMark->m_text || !p_newMark->m_color.isValid() || newColor != p_newMark->m_color) { p_newMark->m_text = newLabel; p_newMark->m_color = newColor; From 7be55971fe7dd1a1667d88bdeb8cdf75f1b1b7e1 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Fri, 19 Aug 2016 13:18:22 +0200 Subject: [PATCH 34/56] Remove unused getDefaultMark() from WaveformMarkSet --- src/waveform/renderers/waveformmarkset.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 1af952179ad..c1c88b2b869 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -22,8 +22,6 @@ class WaveformMarkSet { int size() const { return m_marks.size();} WaveformMark* operator[] (int i) { return m_marks[i]; } - const WaveformMark* getDefaultMark() const { return m_pDefaultMark.get();} - // hotCue must be valid (>= 0 and < NUM_HOT_CUES) const WaveformMark* getHotCueMark(int hotCue); // Takes ownership of mark From 58405eea69d0282aee335bee2823bdcd000edc02 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 02:00:49 +0200 Subject: [PATCH 35/56] Add WaveformMarkPreferences class --- build/depends.py | 1 + .../renderers/waveformmarkproperties.cpp | 47 +++++++++++++++++++ .../renderers/waveformmarkproperties.h | 27 +++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/waveform/renderers/waveformmarkproperties.cpp create mode 100644 src/waveform/renderers/waveformmarkproperties.h diff --git a/build/depends.py b/build/depends.py index c561e00d206..a0539700921 100644 --- a/build/depends.py +++ b/build/depends.py @@ -971,6 +971,7 @@ def sources(self, build): "waveform/renderers/waveformrenderersignalbase.cpp", "waveform/renderers/waveformmark.cpp", + "waveform/renderers/waveformmarkproperties.cpp", "waveform/renderers/waveformmarkset.cpp", "waveform/renderers/waveformmarkrange.cpp", "waveform/renderers/glwaveformrenderersimplesignal.cpp", diff --git a/src/waveform/renderers/waveformmarkproperties.cpp b/src/waveform/renderers/waveformmarkproperties.cpp new file mode 100644 index 00000000000..d3d0c5bb0a0 --- /dev/null +++ b/src/waveform/renderers/waveformmarkproperties.cpp @@ -0,0 +1,47 @@ +#include "skin/skincontext.h" +#include "waveform/renderers/waveformsignalcolors.h" +#include "widget/wskincolor.h" + +#include "waveform/renderers/waveformmarkproperties.h" + +WaveformMarkProperties::WaveformMarkProperties() + : m_iHotCue(-1) { +} + +WaveformMarkProperties::~WaveformMarkProperties() { +} + + +WaveformMarkProperties::WaveformMarkProperties(const QDomNode& node, + const SkinContext& context, + const WaveformSignalColors& signalColors) + : WaveformMarkProperties() { + m_color = context.selectString(node, "Color"); + if (!m_color.isValid()) { + // As a fallback, grab the color from the parent's AxesColor + m_color = signalColors.getAxesColor(); + qDebug() << "Didn't get mark , using parent's :" << m_color; + } else { + m_color = WSkinColor::getCorrectColor(m_color); + } + + m_textColor = context.selectString(node, "TextColor"); + if (!m_textColor.isValid()) { + // Read the text color, otherwise use the parent's BgColor. + m_textColor = signalColors.getBgColor(); + qDebug() << "Didn't get mark , using parent's :" << m_textColor; + } + + QString markAlign = context.selectString(node, "Align"); + if (markAlign.contains("bottom", Qt::CaseInsensitive)) { + m_align = Qt::AlignBottom; + } else { + m_align = Qt::AlignTop; // Default + } + + m_text = context.selectString(node, "Text"); + m_pixmapPath = context.selectString(node, "Pixmap"); + if (!m_pixmapPath.isEmpty()) { + m_pixmapPath = context.getSkinPath(m_pixmapPath); + } +} diff --git a/src/waveform/renderers/waveformmarkproperties.h b/src/waveform/renderers/waveformmarkproperties.h new file mode 100644 index 00000000000..22ca3a1edf5 --- /dev/null +++ b/src/waveform/renderers/waveformmarkproperties.h @@ -0,0 +1,27 @@ +#ifndef WAVEFORMMARKPROPERTIES_H +#define WAVEFORMMARKPROPERTIES_H + +#include +#include + +class SkinContext; +class WaveformSignalColors; + +class WaveformMarkProperties { + public: + WaveformMarkProperties(); + WaveformMarkProperties(const QDomNode& node, + const SkinContext& context, + const WaveformSignalColors& signalColors); + virtual ~WaveformMarkProperties(); + + QColor m_color; + QColor m_textColor; + QString m_text; + Qt::Alignment m_align; + QString m_pixmapPath; + + int m_iHotCue; +}; + +#endif // WAVEFORMMARKPROPERTIES_H From 30dd1bbd4aee09585c7e4c348c11902aeec784ab Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 02:02:20 +0200 Subject: [PATCH 36/56] Simplify WaveformMark and make it use WaveformMarkProperties --- src/waveform/renderers/waveformmark.cpp | 59 +++++-------------------- src/waveform/renderers/waveformmark.h | 26 ++++------- 2 files changed, 19 insertions(+), 66 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 6f1fbb26275..1d3c7bc250e 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -1,23 +1,12 @@ #include -#include "waveformmark.h" - -#include "waveformwidgetrenderer.h" -#include "control/controlobject.h" #include "control/controlproxy.h" -#include "widget/wskincolor.h" -#include "util/memory.h" +#include "skin/skincontext.h" +#include "waveform/renderers/waveformmarkproperties.h" -WaveformMark::WaveformMark() - : m_iIndex(-1) { -} +#include "waveformmark.h" -WaveformMark::WaveformMark(const WaveformMark* p_waveformMark) - : m_color(p_waveformMark->m_color), - m_textColor(p_waveformMark->m_textColor), - m_text(p_waveformMark->m_text), - m_align(p_waveformMark->m_align), - m_pixmapPath(p_waveformMark->m_pixmapPath) { +WaveformMark::WaveformMark() { } void WaveformMark::setup(const QString& group, const QDomNode& node, @@ -28,41 +17,13 @@ void WaveformMark::setup(const QString& group, const QDomNode& node, m_pPointCos = std::make_unique(group, item); } - m_color = context.selectString(node, "Color"); - if (!m_color.isValid()) { - // As a fallback, grab the color from the parent's AxesColor - m_color = signalColors.getAxesColor(); - qDebug() << "Didn't get mark , using parent's :" << m_color; - } else { - m_color = WSkinColor::getCorrectColor(m_color); - } - - m_textColor = context.selectString(node, "TextColor"); - if (!m_textColor.isValid()) { - // Read the text color, otherwise use the parent's BgColor. - m_textColor = signalColors.getBgColor(); - qDebug() << "Didn't get mark , using parent's :" << m_textColor; - } - - QString markAlign = context.selectString(node, "Align"); - if (markAlign.contains("bottom", Qt::CaseInsensitive)) { - m_align = Qt::AlignBottom; - } else { - m_align = Qt::AlignTop; // Default - } + m_properties = WaveformMarkProperties(node, context, signalColors); +} - m_text = context.selectString(node, "Text"); - m_pixmapPath = context.selectString(node, "Pixmap"); - if (!m_pixmapPath.isEmpty()) { - m_pixmapPath = context.getSkinPath(m_pixmapPath); - } +const WaveformMarkProperties& WaveformMark::properties() const { + return m_properties; } -// called from WaveformMarkSet::setup() for hot cues -// TODO(XXX): subclass and override WaveformMark::setup -void WaveformMark::setKeyAndIndex(const ConfigKey& key, int i) { - DEBUG_ASSERT(m_pPointCos == NULL); - m_pPointCos = std::make_unique(key); - m_text = m_text.arg(i); - m_iIndex = i; +void WaveformMark::setProperties(const WaveformMarkProperties& properties) { + m_properties = properties; } diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 91ba8237095..4e3bb20a44b 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -1,43 +1,35 @@ #ifndef WAVEFORMMARK_H #define WAVEFORMMARK_H -#include +#include #include -#include -#include "preferences/usersettings.h" -#include "skin/skincontext.h" #include "util/memory.h" +#include "waveform/renderers/waveformmarkproperties.h" + class ControlProxy; -class QDomNode; +class SkinContext; class WaveformSignalColors; class WaveformMark { public: WaveformMark(); - WaveformMark(const WaveformMark* p_waveformMark); void setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors); - void setKeyAndIndex(const ConfigKey& key, int i); - private: std::unique_ptr m_pPointCos; - QColor m_color; - QColor m_textColor; - QString m_text; - Qt::Alignment m_align; - QString m_pixmapPath; + const WaveformMarkProperties& properties() const; + void setProperties(const WaveformMarkProperties& properties); + + private: + WaveformMarkProperties m_properties; QImage m_image; - // Number of the corresponding Hotcue. - int m_iIndex; - friend class WaveformMarkSet; friend class WaveformRenderMark; - friend class WOverview; }; #endif // WAVEFORMMARK_H From da6b9d9957e6d5dd638ed1981e9da45c70b8ec5b Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 02:03:16 +0200 Subject: [PATCH 37/56] Adapt WaveformMarkSet to WaveformMarkProperties --- src/waveform/renderers/waveformmarkset.cpp | 33 +++++++++++++--------- src/waveform/renderers/waveformmarkset.h | 12 ++++---- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 7f5e59abe2d..8e85a5ab801 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -4,6 +4,7 @@ #include "waveformmarkset.h" #include "engine/cuecontrol.h" #include "control/controlobject.h" +#include "util/memory.h" WaveformMarkSet::WaveformMarkSet() : m_iFirstHotCue(-1) { @@ -29,11 +30,11 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, QDomNode child = node.firstChild(); while (!child.isNull()) { if (child.nodeName() == "DefaultMark") { - m_pDefaultMark->setup(group, child, context, signalColors); + m_pDefaultMark.setup(group, child, context, signalColors); hasDefaultMark = true; } else if (child.nodeName() == "Mark") { - m_marks.push_back(new WaveformMark()); - WaveformMark* mark = m_marks.back(); + m_marks.push_back(QSharedPointer(new WaveformMark())); + WaveformMark* mark = m_marks.back().data(); mark->setup(group, child, context, signalColors); if (mark->m_pPointCos) { @@ -65,27 +66,33 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - m_marks.push_back(new WaveformMark(m_pDefaultMark.get())); - WaveformMark* mark = m_marks.back(); - mark->setKeyAndIndex(pHotcue->getKey(), i); + m_marks.push_back(QSharedPointer(new WaveformMark())); + WaveformMark* mark = m_marks.back().data(); + WaveformMarkProperties defaultProperties = m_pDefaultMark.properties(); + defaultProperties.m_iHotCue = i; + mark->setProperties(defaultProperties); + + mark->m_pPointCos = std::make_unique(pHotcue->getKey()); } } } } void WaveformMarkSet::clear() { - m_pDefaultMark = std::make_unique(); - qDeleteAll(m_marks); + m_pDefaultMark = WaveformMark(); m_marks.clear(); } -const WaveformMark* WaveformMarkSet::getHotCueMark(int hotCue) { +QSharedPointer WaveformMarkSet::operator[] (int i) { + return QSharedPointer(m_marks[i]); +} + +QSharedPointer WaveformMarkSet::getHotCueMark(int hotCue) { DEBUG_ASSERT(hotCue >= 0); DEBUG_ASSERT(hotCue < NUM_HOT_CUES); - return m_marks[m_iFirstHotCue + hotCue]; + return operator[](m_iFirstHotCue + hotCue); } -void WaveformMarkSet::setHotCueMark(int hotCue, WaveformMark* mark) { - delete m_marks[m_iFirstHotCue + hotCue]; - m_marks[m_iFirstHotCue + hotCue] = mark; +void WaveformMarkSet::setHotCueMark(int hotCue, QSharedPointer pMark) { + m_marks[m_iFirstHotCue + hotCue] = pMark; } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index c1c88b2b869..11ce972407a 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -2,6 +2,7 @@ #define WAVEFORMMARKSET_H #include +#include #include "waveformmark.h" #include "skin/skincontext.h" @@ -20,16 +21,15 @@ class WaveformMarkSet { void clear(); int size() const { return m_marks.size();} - WaveformMark* operator[] (int i) { return m_marks[i]; } + QSharedPointer operator[] (int i); // hotCue must be valid (>= 0 and < NUM_HOT_CUES) - const WaveformMark* getHotCueMark(int hotCue); - // Takes ownership of mark - void setHotCueMark(int hotCue, WaveformMark* mark); + QSharedPointer getHotCueMark(int hotCue); + void setHotCueMark(int hotCue, QSharedPointer pMark); private: - std::unique_ptr m_pDefaultMark; - QList m_marks; + WaveformMark m_pDefaultMark; + QList> m_marks; int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); }; From db9b553cd75ca11413e039dbb4c4d1536d4b5e59 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 02:03:55 +0200 Subject: [PATCH 38/56] Adapt renderer and overview to WaveformMarkProperties --- src/waveform/renderers/waveformrendermark.cpp | 51 ++++++++++--------- src/widget/woverview.cpp | 19 +++---- 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index c921302f33d..820bc9bac81 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -39,7 +39,7 @@ void WaveformRenderMark::draw(QPainter* painter, QPaintEvent* /*event*/) { painter->setWorldMatrixEnabled(false); for (int i = 0; i < m_marks.size(); i++) { - WaveformMark* mark = m_marks[i]; + QSharedPointer mark = m_marks[i]; if (!mark->m_pPointCos) continue; @@ -47,7 +47,7 @@ void WaveformRenderMark::draw(QPainter* painter, QPaintEvent* /*event*/) { // Generate image on first paint can't be done in setup since we need // render widget to be resized yet ... if (mark->m_image.isNull()) { - generateMarkImage(mark); + generateMarkImage(mark.data()); } int samplePosition = mark->m_pPointCos->get(); @@ -96,22 +96,25 @@ void WaveformRenderMark::slotCuesUpdated() { // Here we assume no two cues can have the same hotcue assigned, // because WaveformMarkSet stores one mark for each hotcue. - const WaveformMark* p_oldMark = m_marks.getHotCueMark(hotCue); - WaveformMark* p_newMark = new WaveformMark(p_oldMark); - p_newMark->setKeyAndIndex(p_oldMark->m_pPointCos->getKey(), hotCue + 1); - if (p_newMark->m_text.isNull() || newLabel != p_newMark->m_text || !p_newMark->m_color.isValid() || newColor != p_newMark->m_color) { - p_newMark->m_text = newLabel; - p_newMark->m_color = newColor; - generateMarkImage(p_newMark); - m_marks.setHotCueMark(hotCue, p_newMark); + WaveformMark* pMark = m_marks.getHotCueMark(hotCue).data(); + WaveformMarkProperties markProperties = pMark->properties(); + markProperties.m_iHotCue = hotCue + 1; + if (markProperties.m_text.isNull() || newLabel != markProperties.m_text || + !markProperties.m_color.isValid() || newColor != markProperties.m_color) { + markProperties.m_text = newLabel; + markProperties.m_color = newColor; + pMark->setProperties(markProperties); + generateMarkImage(pMark); } } } void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { + const WaveformMarkProperties& markProperties = mark->properties(); + // Load the pixmap from file -- takes precedence over text. - if (!mark->m_pixmapPath.isEmpty()) { - QString path = mark->m_pixmapPath; + if (!markProperties.m_pixmapPath.isEmpty()) { + QString path = markProperties.m_pixmapPath; QImage image = QImage(path); // If loading the image didn't fail, then we're done. Otherwise fall // through and render a label. @@ -128,14 +131,14 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { int labelRectHeight = 0; // If no text is provided, leave m_markImage as a null image - if (!mark->m_text.isNull()) { + if (!markProperties.m_text.isNull()) { // Determine mark text. - QString label = mark->m_text; - if (mark->m_iIndex != -1) { + QString label = markProperties.m_text; + if (markProperties.m_iHotCue != -1) { if (!label.isEmpty()) { label.prepend(": "); } - label.prepend(QString::number(mark->m_iIndex)); + label.prepend(QString::number(markProperties.m_iHotCue)); if (label.size() > kMaxCueLabelLength) { label = label.left(kMaxCueLabelLength - 3) + "..."; } @@ -168,7 +171,7 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { m_waveformRenderer->getHeight(), QImage::Format_ARGB32_Premultiplied); - if (mark->m_align == Qt::AlignBottom) { + if (markProperties.m_align == Qt::AlignBottom) { labelRect.moveBottom(mark->m_image.height()-1); } @@ -181,9 +184,9 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { painter.setWorldMatrixEnabled(false); //draw the label rect - QColor rectColor = mark->m_color; + QColor rectColor = markProperties.m_color; rectColor.setAlpha(150); - painter.setPen(mark->m_color); + painter.setPen(markProperties.m_color); painter.setBrush(QBrush(rectColor)); painter.drawRoundedRect(labelRect, 2.0, 2.0); //painter.drawRect(labelRect); @@ -192,11 +195,11 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { painter.setBrush(QBrush(QColor(0,0,0,0))); font.setWeight(75); painter.setFont(font); - painter.setPen(mark->m_textColor); + painter.setPen(markProperties.m_textColor); painter.drawText(labelRect, Qt::AlignCenter, label); //draw line - QColor lineColor = mark->m_color; + QColor lineColor = markProperties.m_color; lineColor.setAlpha(200); painter.setPen(lineColor); @@ -205,7 +208,7 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { float lineTop = labelRectHeight + 1; float lineBottom = mark->m_image.height(); - if (mark->m_align == Qt::AlignBottom) { + if (markProperties.m_align == Qt::AlignBottom) { lineTop = 0.0; lineBottom = mark->m_image.height() - labelRectHeight - 1; } @@ -231,7 +234,7 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { painter.setWorldMatrixEnabled(false); - QColor triangleColor = mark->m_color; + QColor triangleColor = markProperties.m_color; triangleColor.setAlpha(140); painter.setPen(QColor(0,0,0,0)); painter.setBrush(QBrush(triangleColor)); @@ -255,7 +258,7 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { //TODO vRince duplicated code make a method //draw line - QColor lineColor = mark->m_color; + QColor lineColor = markProperties.m_color; lineColor.setAlpha(140); painter.setPen(lineColor); float middle = mark->m_image.width() / 2.0; diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index a534047f423..d503e905bad 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -93,7 +93,7 @@ void WOverview::setup(const QDomNode& node, const SkinContext& context) { m_marks.setup(m_group, node, context, m_signalColors); for (int i = 0; i < m_marks.size(); ++i) { - WaveformMark* mark = m_marks[i]; + WaveformMark* mark = m_marks[i].data(); if (mark->m_pPointCos) { mark->m_pPointCos->connectValueChanged(this, SLOT(onMarkChanged(double))); @@ -392,7 +392,8 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) { painter.setOpacity(0.9); for (int i = 0; i < m_marks.size(); ++i) { - WaveformMark* currentMark = m_marks[i]; + WaveformMark* currentMark = m_marks[i].data(); + const WaveformMarkProperties& markProperties = currentMark->properties(); if (currentMark->m_pPointCos && currentMark->m_pPointCos->get() >= 0.0) { //const float markPosition = 1.0 + // (currentMark.m_pointControl->get() / (float)m_trackSamplesControl->get()) * (float)(width()-2); @@ -402,27 +403,27 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) { painter.setPen(shadowPen); painter.drawLine(line); - painter.setPen(currentMark->m_color); + painter.setPen(markProperties.m_color); painter.drawLine(line); - if (!currentMark->m_text.isEmpty()) { + if (!markProperties.m_text.isEmpty()) { QPointF textPoint; textPoint.setX(markPosition + 0.5f); - if (currentMark->m_align == Qt::AlignTop) { + if (markProperties.m_align == Qt::AlignTop) { QFontMetricsF metric(markerFont); - textPoint.setY(metric.tightBoundingRect(currentMark->m_text).height()+0.5f); + textPoint.setY(metric.tightBoundingRect(markProperties.m_text).height()+0.5f); } else { textPoint.setY(float(height())-0.5f); } painter.setPen(shadowPen); painter.setFont(shadowFont); - painter.drawText(textPoint,currentMark->m_text); + painter.drawText(textPoint,markProperties.m_text); - painter.setPen(currentMark->m_textColor); + painter.setPen(markProperties.m_textColor); painter.setFont(markerFont); - painter.drawText(textPoint,currentMark->m_text); + painter.drawText(textPoint,markProperties.m_text); } } } From 2f8863b7b8266565a97581fd38cfa6e87ab0ac36 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 13:20:40 +0200 Subject: [PATCH 39/56] Fix cue mark label rectangle too small for long label --- src/waveform/renderers/waveformrendermark.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 820bc9bac81..84a5c546a84 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -149,6 +149,7 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { QFont font; // Uses the application default font.setPointSize(10); font.setStretch(100); + font.setWeight(75); QFontMetrics metrics(font); @@ -193,7 +194,6 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { //draw text painter.setBrush(QBrush(QColor(0,0,0,0))); - font.setWeight(75); painter.setFont(font); painter.setPen(markProperties.m_textColor); painter.drawText(labelRect, Qt::AlignCenter, label); From 1d8ef7777c3c5fb644015e1e7d3ac4088432cc39 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 14:35:58 +0200 Subject: [PATCH 40/56] Rename WaveformMarkSet::m_pDefaultMark to m_defaultMark --- src/waveform/renderers/waveformmarkset.cpp | 6 +++--- src/waveform/renderers/waveformmarkset.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 8e85a5ab801..effb292f94c 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -30,7 +30,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, QDomNode child = node.firstChild(); while (!child.isNull()) { if (child.nodeName() == "DefaultMark") { - m_pDefaultMark.setup(group, child, context, signalColors); + m_defaultMark.setup(group, child, context, signalColors); hasDefaultMark = true; } else if (child.nodeName() == "Mark") { m_marks.push_back(QSharedPointer(new WaveformMark())); @@ -68,7 +68,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; m_marks.push_back(QSharedPointer(new WaveformMark())); WaveformMark* mark = m_marks.back().data(); - WaveformMarkProperties defaultProperties = m_pDefaultMark.properties(); + WaveformMarkProperties defaultProperties = m_defaultMark.properties(); defaultProperties.m_iHotCue = i; mark->setProperties(defaultProperties); @@ -79,7 +79,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, } void WaveformMarkSet::clear() { - m_pDefaultMark = WaveformMark(); + m_defaultMark = WaveformMark(); m_marks.clear(); } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 11ce972407a..613e9162c3d 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -28,7 +28,7 @@ class WaveformMarkSet { void setHotCueMark(int hotCue, QSharedPointer pMark); private: - WaveformMark m_pDefaultMark; + WaveformMark m_defaultMark; QList> m_marks; int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); From 74bb3bc012420e4b5caad6986f512fd733bafcdf Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 14:42:24 +0200 Subject: [PATCH 41/56] Remove explicit WaveformMark constructor --- src/waveform/renderers/waveformmark.cpp | 3 --- src/waveform/renderers/waveformmark.h | 2 -- 2 files changed, 5 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 1d3c7bc250e..6ba8897bafd 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -6,9 +6,6 @@ #include "waveformmark.h" -WaveformMark::WaveformMark() { -} - void WaveformMark::setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors) { diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 4e3bb20a44b..620a8bdcae1 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -14,8 +14,6 @@ class WaveformSignalColors; class WaveformMark { public: - WaveformMark(); - void setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors); From f3f92c296d9fcf385276696eb054f42347d9be7f Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 14:44:05 +0200 Subject: [PATCH 42/56] Rename WaveformMark:properties() to getProperties() --- src/waveform/renderers/waveformmark.cpp | 2 +- src/waveform/renderers/waveformmark.h | 2 +- src/waveform/renderers/waveformmarkset.cpp | 2 +- src/waveform/renderers/waveformrendermark.cpp | 4 ++-- src/widget/woverview.cpp | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 6ba8897bafd..18b4648e079 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -17,7 +17,7 @@ void WaveformMark::setup(const QString& group, const QDomNode& node, m_properties = WaveformMarkProperties(node, context, signalColors); } -const WaveformMarkProperties& WaveformMark::properties() const { +const WaveformMarkProperties& WaveformMark::getProperties() const { return m_properties; } diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 620a8bdcae1..7e4f831fdf1 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -20,7 +20,7 @@ class WaveformMark { std::unique_ptr m_pPointCos; - const WaveformMarkProperties& properties() const; + const WaveformMarkProperties& getProperties() const; void setProperties(const WaveformMarkProperties& properties); private: diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index effb292f94c..23e97a018d3 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -68,7 +68,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; m_marks.push_back(QSharedPointer(new WaveformMark())); WaveformMark* mark = m_marks.back().data(); - WaveformMarkProperties defaultProperties = m_defaultMark.properties(); + WaveformMarkProperties defaultProperties = m_defaultMark.getProperties(); defaultProperties.m_iHotCue = i; mark->setProperties(defaultProperties); diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 84a5c546a84..18f10fbe3c2 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -97,7 +97,7 @@ void WaveformRenderMark::slotCuesUpdated() { // Here we assume no two cues can have the same hotcue assigned, // because WaveformMarkSet stores one mark for each hotcue. WaveformMark* pMark = m_marks.getHotCueMark(hotCue).data(); - WaveformMarkProperties markProperties = pMark->properties(); + WaveformMarkProperties markProperties = pMark->getProperties(); markProperties.m_iHotCue = hotCue + 1; if (markProperties.m_text.isNull() || newLabel != markProperties.m_text || !markProperties.m_color.isValid() || newColor != markProperties.m_color) { @@ -110,7 +110,7 @@ void WaveformRenderMark::slotCuesUpdated() { } void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { - const WaveformMarkProperties& markProperties = mark->properties(); + const WaveformMarkProperties& markProperties = mark->getProperties(); // Load the pixmap from file -- takes precedence over text. if (!markProperties.m_pixmapPath.isEmpty()) { diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index d503e905bad..e393a6a2ae1 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -393,7 +393,7 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) { for (int i = 0; i < m_marks.size(); ++i) { WaveformMark* currentMark = m_marks[i].data(); - const WaveformMarkProperties& markProperties = currentMark->properties(); + const WaveformMarkProperties& markProperties = currentMark->getProperties(); if (currentMark->m_pPointCos && currentMark->m_pPointCos->get() >= 0.0) { //const float markPosition = 1.0 + // (currentMark.m_pointControl->get() / (float)m_trackSamplesControl->get()) * (float)(width()-2); From f05d1b2a73ede5f8a03eac42a1e8509687d63c4f Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 14:49:59 +0200 Subject: [PATCH 43/56] Improve WaveformMarkSet::setup code --- src/waveform/renderers/waveformmarkset.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 23e97a018d3..7210b7f4d77 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -66,13 +66,12 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - m_marks.push_back(QSharedPointer(new WaveformMark())); - WaveformMark* mark = m_marks.back().data(); + QSharedPointer pMark(new WaveformMark()); WaveformMarkProperties defaultProperties = m_defaultMark.getProperties(); defaultProperties.m_iHotCue = i; - mark->setProperties(defaultProperties); - - mark->m_pPointCos = std::make_unique(pHotcue->getKey()); + pMark->setProperties(defaultProperties); + pMark->m_pPointCos = std::make_unique(pHotcue->getKey()); + m_marks.push_back(pMark); } } } From 3c4f6daa5b4d407f9c956ca4e671ca4043aa6e8d Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 14:53:59 +0200 Subject: [PATCH 44/56] Make WaveformProperties final. --- src/waveform/renderers/waveformmarkproperties.cpp | 4 ---- src/waveform/renderers/waveformmarkproperties.h | 3 +-- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/waveform/renderers/waveformmarkproperties.cpp b/src/waveform/renderers/waveformmarkproperties.cpp index d3d0c5bb0a0..7b2167f87ce 100644 --- a/src/waveform/renderers/waveformmarkproperties.cpp +++ b/src/waveform/renderers/waveformmarkproperties.cpp @@ -8,10 +8,6 @@ WaveformMarkProperties::WaveformMarkProperties() : m_iHotCue(-1) { } -WaveformMarkProperties::~WaveformMarkProperties() { -} - - WaveformMarkProperties::WaveformMarkProperties(const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors) diff --git a/src/waveform/renderers/waveformmarkproperties.h b/src/waveform/renderers/waveformmarkproperties.h index 22ca3a1edf5..0c8a89c18b2 100644 --- a/src/waveform/renderers/waveformmarkproperties.h +++ b/src/waveform/renderers/waveformmarkproperties.h @@ -7,13 +7,12 @@ class SkinContext; class WaveformSignalColors; -class WaveformMarkProperties { +class WaveformMarkProperties final { public: WaveformMarkProperties(); WaveformMarkProperties(const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors); - virtual ~WaveformMarkProperties(); QColor m_color; QColor m_textColor; From 360467fc5bd4a7182b5c15bc4f1143725e70e3db Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 15:18:00 +0200 Subject: [PATCH 45/56] Move hotcue property to WaveformMark --- src/waveform/renderers/waveformmark.cpp | 4 ++++ src/waveform/renderers/waveformmark.h | 6 ++++++ src/waveform/renderers/waveformmarkproperties.cpp | 7 +------ src/waveform/renderers/waveformmarkproperties.h | 4 +--- src/waveform/renderers/waveformmarkset.cpp | 2 +- src/waveform/renderers/waveformrendermark.cpp | 5 ++--- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 18b4648e079..420a96761bf 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -6,6 +6,10 @@ #include "waveformmark.h" +WaveformMark::WaveformMark() + : m_iHotCue(-1) { +} + void WaveformMark::setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors) { diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 7e4f831fdf1..f19a0065070 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -14,6 +14,8 @@ class WaveformSignalColors; class WaveformMark { public: + WaveformMark(); + void setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors); @@ -23,8 +25,12 @@ class WaveformMark { const WaveformMarkProperties& getProperties() const; void setProperties(const WaveformMarkProperties& properties); + int getHotCue() const { return m_iHotCue; }; + void setHotCue(int hotCue) { m_iHotCue = hotCue; }; + private: WaveformMarkProperties m_properties; + int m_iHotCue; QImage m_image; friend class WaveformRenderMark; diff --git a/src/waveform/renderers/waveformmarkproperties.cpp b/src/waveform/renderers/waveformmarkproperties.cpp index 7b2167f87ce..4c05a5dfd9e 100644 --- a/src/waveform/renderers/waveformmarkproperties.cpp +++ b/src/waveform/renderers/waveformmarkproperties.cpp @@ -4,14 +4,9 @@ #include "waveform/renderers/waveformmarkproperties.h" -WaveformMarkProperties::WaveformMarkProperties() - : m_iHotCue(-1) { -} - WaveformMarkProperties::WaveformMarkProperties(const QDomNode& node, const SkinContext& context, - const WaveformSignalColors& signalColors) - : WaveformMarkProperties() { + const WaveformSignalColors& signalColors) { m_color = context.selectString(node, "Color"); if (!m_color.isValid()) { // As a fallback, grab the color from the parent's AxesColor diff --git a/src/waveform/renderers/waveformmarkproperties.h b/src/waveform/renderers/waveformmarkproperties.h index 0c8a89c18b2..7cdcb946a78 100644 --- a/src/waveform/renderers/waveformmarkproperties.h +++ b/src/waveform/renderers/waveformmarkproperties.h @@ -9,7 +9,7 @@ class WaveformSignalColors; class WaveformMarkProperties final { public: - WaveformMarkProperties(); + WaveformMarkProperties() = default; WaveformMarkProperties(const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors); @@ -19,8 +19,6 @@ class WaveformMarkProperties final { QString m_text; Qt::Alignment m_align; QString m_pixmapPath; - - int m_iHotCue; }; #endif // WAVEFORMMARKPROPERTIES_H diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 7210b7f4d77..8f2e142f0e6 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -68,7 +68,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; QSharedPointer pMark(new WaveformMark()); WaveformMarkProperties defaultProperties = m_defaultMark.getProperties(); - defaultProperties.m_iHotCue = i; + pMark->setHotCue(i); pMark->setProperties(defaultProperties); pMark->m_pPointCos = std::make_unique(pHotcue->getKey()); m_marks.push_back(pMark); diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 18f10fbe3c2..77f0c1417ef 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -98,7 +98,6 @@ void WaveformRenderMark::slotCuesUpdated() { // because WaveformMarkSet stores one mark for each hotcue. WaveformMark* pMark = m_marks.getHotCueMark(hotCue).data(); WaveformMarkProperties markProperties = pMark->getProperties(); - markProperties.m_iHotCue = hotCue + 1; if (markProperties.m_text.isNull() || newLabel != markProperties.m_text || !markProperties.m_color.isValid() || newColor != markProperties.m_color) { markProperties.m_text = newLabel; @@ -134,11 +133,11 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { if (!markProperties.m_text.isNull()) { // Determine mark text. QString label = markProperties.m_text; - if (markProperties.m_iHotCue != -1) { + if (mark->m_iHotCue != -1) { if (!label.isEmpty()) { label.prepend(": "); } - label.prepend(QString::number(markProperties.m_iHotCue)); + label.prepend(QString::number(mark->m_iHotCue)); if (label.size() > kMaxCueLabelLength) { label = label.left(kMaxCueLabelLength - 3) + "..."; } From 09a501ae9fede4c0b2968016264a9430790c307e Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 15:20:26 +0200 Subject: [PATCH 46/56] Move setter/getter definition to .h --- src/waveform/renderers/waveformmark.cpp | 8 -------- src/waveform/renderers/waveformmark.h | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 420a96761bf..2c826d388aa 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -20,11 +20,3 @@ void WaveformMark::setup(const QString& group, const QDomNode& node, m_properties = WaveformMarkProperties(node, context, signalColors); } - -const WaveformMarkProperties& WaveformMark::getProperties() const { - return m_properties; -} - -void WaveformMark::setProperties(const WaveformMarkProperties& properties) { - m_properties = properties; -} diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index f19a0065070..e53b71f689c 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -22,8 +22,8 @@ class WaveformMark { std::unique_ptr m_pPointCos; - const WaveformMarkProperties& getProperties() const; - void setProperties(const WaveformMarkProperties& properties); + const WaveformMarkProperties& getProperties() const { return m_properties; }; + void setProperties(const WaveformMarkProperties& properties) { m_properties = properties; }; int getHotCue() const { return m_iHotCue; }; void setHotCue(int hotCue) { m_iHotCue = hotCue; }; From a89470c0b6702bc97247f91019816c5be6eb6c77 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 15:26:48 +0200 Subject: [PATCH 47/56] Add hotCue constructor to Waveformmark --- src/waveform/renderers/waveformmark.cpp | 4 ++++ src/waveform/renderers/waveformmark.h | 1 + src/waveform/renderers/waveformmarkset.cpp | 3 +-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 2c826d388aa..ecc9be13415 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -10,6 +10,10 @@ WaveformMark::WaveformMark() : m_iHotCue(-1) { } +WaveformMark::WaveformMark(int hotCue) + : m_iHotCue(hotCue) { +} + void WaveformMark::setup(const QString& group, const QDomNode& node, const SkinContext& context, const WaveformSignalColors& signalColors) { diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index e53b71f689c..5b78639a6bb 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -15,6 +15,7 @@ class WaveformSignalColors; class WaveformMark { public: WaveformMark(); + WaveformMark(int hotCue); void setup(const QString& group, const QDomNode& node, const SkinContext& context, diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 8f2e142f0e6..510f6ede8fa 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -66,9 +66,8 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - QSharedPointer pMark(new WaveformMark()); + QSharedPointer pMark(new WaveformMark(i)); WaveformMarkProperties defaultProperties = m_defaultMark.getProperties(); - pMark->setHotCue(i); pMark->setProperties(defaultProperties); pMark->m_pPointCos = std::make_unique(pHotcue->getKey()); m_marks.push_back(pMark); From 4ef4caef5c7bc061df6462a694b03c3aeadba19d Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 15:28:25 +0200 Subject: [PATCH 48/56] Remove redundant type conv. and move operator[] impl. to.h --- src/waveform/renderers/waveformmarkset.cpp | 4 ---- src/waveform/renderers/waveformmarkset.h | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 510f6ede8fa..057a0e64457 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -81,10 +81,6 @@ void WaveformMarkSet::clear() { m_marks.clear(); } -QSharedPointer WaveformMarkSet::operator[] (int i) { - return QSharedPointer(m_marks[i]); -} - QSharedPointer WaveformMarkSet::getHotCueMark(int hotCue) { DEBUG_ASSERT(hotCue >= 0); DEBUG_ASSERT(hotCue < NUM_HOT_CUES); diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 613e9162c3d..33527b0c34d 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -21,7 +21,7 @@ class WaveformMarkSet { void clear(); int size() const { return m_marks.size();} - QSharedPointer operator[] (int i); + QSharedPointer operator[] (int i) { return m_marks[i]; }; // hotCue must be valid (>= 0 and < NUM_HOT_CUES) QSharedPointer getHotCueMark(int hotCue); From 6eeea370cb27b4723fcbab47efa3115d4d2ddec9 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 20:41:13 +0200 Subject: [PATCH 49/56] Fix missing include --- src/waveform/renderers/waveformmark.cpp | 1 - src/waveform/renderers/waveformmark.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index ecc9be13415..5f3c320ae3c 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -1,6 +1,5 @@ #include -#include "control/controlproxy.h" #include "skin/skincontext.h" #include "waveform/renderers/waveformmarkproperties.h" diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 5b78639a6bb..e9c508e7db4 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -4,11 +4,11 @@ #include #include +#include "control/controlproxy.h" #include "util/memory.h" #include "waveform/renderers/waveformmarkproperties.h" -class ControlProxy; class SkinContext; class WaveformSignalColors; From 2859e50f4086c04e670aad8567665b32c6c50026 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 20:42:12 +0200 Subject: [PATCH 50/56] Make WaveformMarkSet getter methods const. --- src/waveform/renderers/waveformmarkset.cpp | 2 +- src/waveform/renderers/waveformmarkset.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 057a0e64457..78798aa7c81 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -81,7 +81,7 @@ void WaveformMarkSet::clear() { m_marks.clear(); } -QSharedPointer WaveformMarkSet::getHotCueMark(int hotCue) { +QSharedPointer WaveformMarkSet::getHotCueMark(int hotCue) const { DEBUG_ASSERT(hotCue >= 0); DEBUG_ASSERT(hotCue < NUM_HOT_CUES); return operator[](m_iFirstHotCue + hotCue); diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index 33527b0c34d..d23684bf0cc 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -21,10 +21,10 @@ class WaveformMarkSet { void clear(); int size() const { return m_marks.size();} - QSharedPointer operator[] (int i) { return m_marks[i]; }; + QSharedPointer operator[] (int i) const { return m_marks[i]; }; // hotCue must be valid (>= 0 and < NUM_HOT_CUES) - QSharedPointer getHotCueMark(int hotCue); + QSharedPointer getHotCueMark(int hotCue) const; void setHotCueMark(int hotCue, QSharedPointer pMark); private: From 030c904f1ffc97ccedfe57cd7fdf346715497417 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 20:47:10 +0200 Subject: [PATCH 51/56] Replace QSharedPointer::data() by a const ref --- src/widget/woverview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index e393a6a2ae1..3e468d82f9a 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -93,7 +93,7 @@ void WOverview::setup(const QDomNode& node, const SkinContext& context) { m_marks.setup(m_group, node, context, m_signalColors); for (int i = 0; i < m_marks.size(); ++i) { - WaveformMark* mark = m_marks[i].data(); + const QSharedPointer& mark = m_marks[i]; if (mark->m_pPointCos) { mark->m_pPointCos->connectValueChanged(this, SLOT(onMarkChanged(double))); @@ -392,7 +392,7 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) { painter.setOpacity(0.9); for (int i = 0; i < m_marks.size(); ++i) { - WaveformMark* currentMark = m_marks[i].data(); + const QSharedPointer currentMark = m_marks[i]; const WaveformMarkProperties& markProperties = currentMark->getProperties(); if (currentMark->m_pPointCos && currentMark->m_pPointCos->get() >= 0.0) { //const float markPosition = 1.0 + From 7c7dea96aaaba6a0dac0c6b862806a5ac4af4c19 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 21:00:52 +0200 Subject: [PATCH 52/56] Improve WaveformMarkSet::setup code --- src/waveform/renderers/waveformmarkset.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 78798aa7c81..abf67428fb4 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -33,18 +33,21 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, m_defaultMark.setup(group, child, context, signalColors); hasDefaultMark = true; } else if (child.nodeName() == "Mark") { - m_marks.push_back(QSharedPointer(new WaveformMark())); - WaveformMark* mark = m_marks.back().data(); - mark->setup(group, child, context, signalColors); + QSharedPointer pMark(new WaveformMark()); + pMark->setup(group, child, context, signalColors); - if (mark->m_pPointCos) { + bool uniqueMark = true; + if (pMark->m_pPointCos) { // guarantee uniqueness even if there is a misdesigned skin - QString item = mark->m_pPointCos->getKey().item; + QString item = pMark->m_pPointCos->getKey().item; if (!controlItemSet.insert(item).second) { qWarning() << "WaveformRenderMark::setup - redefinition of" << item; - m_marks.removeAt(m_marks.size() - 1); + uniqueMark = false; } } + if (uniqueMark) { + m_marks.push_back(pMark); + } } child = child.nextSibling(); } From b682f11e8142bb2d5c6f9ab5cbccfaa311b67ab0 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Sun, 21 Aug 2016 21:06:08 +0200 Subject: [PATCH 53/56] Introduce WaveformmarkPointer --- src/waveform/renderers/waveformmark.h | 2 ++ src/waveform/renderers/waveformmarkset.cpp | 8 ++++---- src/waveform/renderers/waveformmarkset.h | 9 ++++----- src/waveform/renderers/waveformrendermark.cpp | 2 +- src/widget/woverview.cpp | 4 ++-- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index e9c508e7db4..59d183deaa0 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -37,4 +37,6 @@ class WaveformMark { friend class WaveformRenderMark; }; +typedef QSharedPointer WaveformMarkPointer; + #endif // WAVEFORMMARK_H diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index abf67428fb4..81b8d12bc63 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -33,7 +33,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, m_defaultMark.setup(group, child, context, signalColors); hasDefaultMark = true; } else if (child.nodeName() == "Mark") { - QSharedPointer pMark(new WaveformMark()); + WaveformMarkPointer pMark(new WaveformMark()); pMark->setup(group, child, context, signalColors); bool uniqueMark = true; @@ -69,7 +69,7 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, if (controlItemSet.insert(hotCueControlItem).second) { //qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; - QSharedPointer pMark(new WaveformMark(i)); + WaveformMarkPointer pMark(new WaveformMark(i)); WaveformMarkProperties defaultProperties = m_defaultMark.getProperties(); pMark->setProperties(defaultProperties); pMark->m_pPointCos = std::make_unique(pHotcue->getKey()); @@ -84,12 +84,12 @@ void WaveformMarkSet::clear() { m_marks.clear(); } -QSharedPointer WaveformMarkSet::getHotCueMark(int hotCue) const { +WaveformMarkPointer WaveformMarkSet::getHotCueMark(int hotCue) const { DEBUG_ASSERT(hotCue >= 0); DEBUG_ASSERT(hotCue < NUM_HOT_CUES); return operator[](m_iFirstHotCue + hotCue); } -void WaveformMarkSet::setHotCueMark(int hotCue, QSharedPointer pMark) { +void WaveformMarkSet::setHotCueMark(int hotCue, WaveformMarkPointer pMark) { m_marks[m_iFirstHotCue + hotCue] = pMark; } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index d23684bf0cc..5dad5d0ff98 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -2,7 +2,6 @@ #define WAVEFORMMARKSET_H #include -#include #include "waveformmark.h" #include "skin/skincontext.h" @@ -21,15 +20,15 @@ class WaveformMarkSet { void clear(); int size() const { return m_marks.size();} - QSharedPointer operator[] (int i) const { return m_marks[i]; }; + WaveformMarkPointer operator[] (int i) const { return m_marks[i]; }; // hotCue must be valid (>= 0 and < NUM_HOT_CUES) - QSharedPointer getHotCueMark(int hotCue) const; - void setHotCueMark(int hotCue, QSharedPointer pMark); + WaveformMarkPointer getHotCueMark(int hotCue) const; + void setHotCueMark(int hotCue, WaveformMarkPointer pMark); private: WaveformMark m_defaultMark; - QList> m_marks; + QList m_marks; int m_iFirstHotCue; DISALLOW_COPY_AND_ASSIGN(WaveformMarkSet); }; diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 77f0c1417ef..99bf2ec3389 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -39,7 +39,7 @@ void WaveformRenderMark::draw(QPainter* painter, QPaintEvent* /*event*/) { painter->setWorldMatrixEnabled(false); for (int i = 0; i < m_marks.size(); i++) { - QSharedPointer mark = m_marks[i]; + WaveformMarkPointer mark = m_marks[i]; if (!mark->m_pPointCos) continue; diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index 3e468d82f9a..5e8c8c558f9 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -93,7 +93,7 @@ void WOverview::setup(const QDomNode& node, const SkinContext& context) { m_marks.setup(m_group, node, context, m_signalColors); for (int i = 0; i < m_marks.size(); ++i) { - const QSharedPointer& mark = m_marks[i]; + const WaveformMarkPointer& mark = m_marks[i]; if (mark->m_pPointCos) { mark->m_pPointCos->connectValueChanged(this, SLOT(onMarkChanged(double))); @@ -392,7 +392,7 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) { painter.setOpacity(0.9); for (int i = 0; i < m_marks.size(); ++i) { - const QSharedPointer currentMark = m_marks[i]; + const WaveformMarkPointer currentMark = m_marks[i]; const WaveformMarkProperties& markProperties = currentMark->getProperties(); if (currentMark->m_pPointCos && currentMark->m_pPointCos->get() >= 0.0) { //const float markPosition = 1.0 + From 6f5770f7eaa4ca88122990b7cbe89f6a72be3251 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Mon, 22 Aug 2016 01:07:05 +0200 Subject: [PATCH 54/56] Change parameter naming --- src/waveform/renderers/waveformrendermark.cpp | 42 +++++++++---------- src/waveform/renderers/waveformrendermark.h | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index 99bf2ec3389..79b8d6cc736 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -108,8 +108,8 @@ void WaveformRenderMark::slotCuesUpdated() { } } -void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { - const WaveformMarkProperties& markProperties = mark->getProperties(); +void WaveformRenderMark::generateMarkImage(WaveformMark* pMark) { + const WaveformMarkProperties& markProperties = pMark->getProperties(); // Load the pixmap from file -- takes precedence over text. if (!markProperties.m_pixmapPath.isEmpty()) { @@ -118,8 +118,8 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { // If loading the image didn't fail, then we're done. Otherwise fall // through and render a label. if (!image.isNull()) { - mark->m_image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); - WImageStore::correctImageColors(&mark->m_image); + pMark->m_image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); + WImageStore::correctImageColors(&pMark->m_image); return; } } @@ -133,11 +133,11 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { if (!markProperties.m_text.isNull()) { // Determine mark text. QString label = markProperties.m_text; - if (mark->m_iHotCue != -1) { + if (pMark->m_iHotCue != -1) { if (!label.isEmpty()) { label.prepend(": "); } - label.prepend(QString::number(mark->m_iHotCue)); + label.prepend(QString::number(pMark->m_iHotCue)); if (label.size() > kMaxCueLabelLength) { label = label.left(kMaxCueLabelLength - 3) + "..."; } @@ -167,18 +167,18 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { QRectF labelRect(0, 0, (float)labelRectWidth, (float)labelRectHeight); - mark->m_image = QImage(labelRectWidth+1, + pMark->m_image = QImage(labelRectWidth+1, m_waveformRenderer->getHeight(), QImage::Format_ARGB32_Premultiplied); if (markProperties.m_align == Qt::AlignBottom) { - labelRect.moveBottom(mark->m_image.height()-1); + labelRect.moveBottom(pMark->m_image.height()-1); } // Fill with transparent pixels - mark->m_image.fill(QColor(0,0,0,0).rgba()); + pMark->m_image.fill(QColor(0,0,0,0).rgba()); - painter.begin(&mark->m_image); + painter.begin(&pMark->m_image); painter.setRenderHint(QPainter::TextAntialiasing); painter.setWorldMatrixEnabled(false); @@ -202,14 +202,14 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { lineColor.setAlpha(200); painter.setPen(lineColor); - float middle = mark->m_image.width() / 2.0; + float middle = pMark->m_image.width() / 2.0; //Default line align top float lineTop = labelRectHeight + 1; - float lineBottom = mark->m_image.height(); + float lineBottom = pMark->m_image.height(); if (markProperties.m_align == Qt::AlignBottom) { lineTop = 0.0; - lineBottom = mark->m_image.height() - labelRectHeight - 1; + lineBottom = pMark->m_image.height() - labelRectHeight - 1; } painter.drawLine(middle, lineTop, middle, lineBottom); @@ -223,12 +223,12 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { else //no text draw triangle { float triangleSize = 9.0; - mark->m_image = QImage(labelRectWidth+1, + pMark->m_image = QImage(labelRectWidth+1, m_waveformRenderer->getHeight(), QImage::Format_ARGB32_Premultiplied); - mark->m_image.fill(QColor(0,0,0,0).rgba()); + pMark->m_image.fill(QColor(0,0,0,0).rgba()); - painter.begin(&mark->m_image); + painter.begin(&pMark->m_image); painter.setRenderHint(QPainter::TextAntialiasing); painter.setWorldMatrixEnabled(false); @@ -249,9 +249,9 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { painter.drawPolygon(triangle); triangle.clear(); - triangle.append(QPointF(0.0,mark->m_image.height())); - triangle.append(QPointF(triangleSize+0.5,mark->m_image.height())); - triangle.append(QPointF(triangleSize*0.5 + 0.1, mark->m_image.height() - triangleSize*0.5 - 2.1)); + triangle.append(QPointF(0.0,pMark->m_image.height())); + triangle.append(QPointF(triangleSize+0.5,pMark->m_image.height())); + triangle.append(QPointF(triangleSize*0.5 + 0.1, pMark->m_image.height() - triangleSize*0.5 - 2.1)); painter.drawPolygon(triangle); @@ -260,10 +260,10 @@ void WaveformRenderMark::generateMarkImage(WaveformMark* mark) { QColor lineColor = markProperties.m_color; lineColor.setAlpha(140); painter.setPen(lineColor); - float middle = mark->m_image.width() / 2.0; + float middle = pMark->m_image.width() / 2.0; float lineTop = triangleSize * 0.5 + 1; - float lineBottom = mark->m_image.height() - triangleSize * 0.5 - 1; + float lineBottom = pMark->m_image.height() - triangleSize * 0.5 - 1; painter.drawLine(middle, lineTop, middle, lineBottom); diff --git a/src/waveform/renderers/waveformrendermark.h b/src/waveform/renderers/waveformrendermark.h index ce2c581fb60..1ab006b6bce 100644 --- a/src/waveform/renderers/waveformrendermark.h +++ b/src/waveform/renderers/waveformrendermark.h @@ -28,7 +28,7 @@ class WaveformRenderMark : public QObject, public WaveformRendererAbstract { void slotCuesUpdated(); private: - void generateMarkImage(WaveformMark* mark); + void generateMarkImage(WaveformMark* pMark); WaveformMarkSet m_marks; DISALLOW_COPY_AND_ASSIGN(WaveformRenderMark); From 10e5ef8249ad173c82e3ab26c0951fc543501c52 Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Mon, 22 Aug 2016 01:10:35 +0200 Subject: [PATCH 55/56] Rewrite cue default color in database schema to decimal --- res/schema.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/schema.xml b/res/schema.xml index 0db6a93e323..904f2512b3d 100644 --- a/res/schema.xml +++ b/res/schema.xml @@ -422,7 +422,7 @@ METADATA See library/dao/cue.h. - ALTER TABLE cues ADD COLUMN color INTEGER DEFAULT 0xFFFF0000 NOT NULL; + ALTER TABLE cues ADD COLUMN color INTEGER DEFAULT 4294901760 NOT NULL; From 5b2fb04d9b7b65a73f793766c616aeff8b87076e Mon Sep 17 00:00:00 2001 From: Ferran Pujol Camins Date: Mon, 22 Aug 2016 01:14:56 +0200 Subject: [PATCH 56/56] Add comment for cue color in database scheme --- res/schema.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/res/schema.xml b/res/schema.xml index 904f2512b3d..e58c8033f68 100644 --- a/res/schema.xml +++ b/res/schema.xml @@ -422,6 +422,7 @@ METADATA See library/dao/cue.h. + ALTER TABLE cues ADD COLUMN color INTEGER DEFAULT 4294901760 NOT NULL;