Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/2.2'
Browse files Browse the repository at this point in the history
  • Loading branch information
daschuer committed Feb 4, 2019
2 parents 5d2651d + 5c76976 commit 59f4670
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 86 deletions.
95 changes: 42 additions & 53 deletions src/waveform/renderers/waveformmarkrange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,54 +4,16 @@
#include "waveformmarkrange.h"

#include "waveformsignalcolors.h"
#include "control/controlobject.h"
#include "control/controlproxy.h"
#include "skin/skincontext.h"
#include "widget/wskincolor.h"

WaveformMarkRange::WaveformMarkRange()
: m_markStartPointControl(NULL),
m_markEndPointControl(NULL),
m_markEnabledControl(NULL) {
}

WaveformMarkRange::~WaveformMarkRange() {
delete m_markStartPointControl;
delete m_markEndPointControl;
delete m_markEnabledControl;
}

bool WaveformMarkRange::active() {
const double startValue = start();
const double endValue = end();
return startValue != endValue && startValue != -1.0 && endValue != -1.0;
}

bool WaveformMarkRange::enabled() {
// Default to enabled if there is no enabled control.
return !m_markEnabledControl || !m_markEnabledControl->valid() ||
m_markEnabledControl->get() > 0.0;
}

double WaveformMarkRange::start() {
double start = -1.0;
if (m_markStartPointControl && m_markStartPointControl->valid()) {
start = m_markStartPointControl->get();
}
return start;
}

double WaveformMarkRange::end() {
double end = -1.0;
if (m_markEndPointControl && m_markEndPointControl->valid()) {
end = m_markEndPointControl->get();
}
return end;
}

void WaveformMarkRange::setup(const QString& group, const QDomNode& node,
const SkinContext& context,
const WaveformSignalColors& signalColors) {
m_activeColor = context.selectString(node, "Color");
WaveformMarkRange::WaveformMarkRange(
const QString& group,
const QDomNode& node,
const SkinContext& context,
const WaveformSignalColors& signalColors)
: m_activeColor(context.selectString(node, "Color")),
m_disabledColor(context.selectString(node, "DisabledColor")) {
if (!m_activeColor.isValid()) {
//vRince kind of legacy fallback ...
// As a fallback, grab the mark color from the parent's MarkerColor
Expand All @@ -61,7 +23,6 @@ void WaveformMarkRange::setup(const QString& group, const QDomNode& node,
m_activeColor = WSkinColor::getCorrectColor(m_activeColor);
}

m_disabledColor = context.selectString(node, "DisabledColor");
if (!m_disabledColor.isValid()) {
//vRince kind of legacy fallback ...
// Read the text color, otherwise use the parent's SignalColor.
Expand All @@ -71,19 +32,47 @@ void WaveformMarkRange::setup(const QString& group, const QDomNode& node,

QString startControl = context.selectString(node, "StartControl");
if (!startControl.isEmpty()) {
m_markStartPointControl =
new ControlProxy(group, startControl);
DEBUG_ASSERT(!m_markStartPointControl); // has not been created yet
m_markStartPointControl = std::make_unique<ControlProxy>(group, startControl);
}
QString endControl = context.selectString(node, "EndControl");
if (!endControl.isEmpty()) {
m_markEndPointControl =
new ControlProxy(group, endControl);
DEBUG_ASSERT(!m_markEndPointControl); // has not been created yet
m_markEndPointControl = std::make_unique<ControlProxy>(group, endControl);
}
QString enabledControl = context.selectString(node, "EnabledControl");
if (!enabledControl.isEmpty()) {
m_markEnabledControl =
new ControlProxy(group, enabledControl);
DEBUG_ASSERT(!m_markEnabledControl); // has not been created yet
m_markEnabledControl = std::make_unique<ControlProxy>(group, enabledControl);
}
}

bool WaveformMarkRange::active() const {
const double startValue = start();
const double endValue = end();
return startValue != endValue && startValue != -1.0 && endValue != -1.0;
}

bool WaveformMarkRange::enabled() const {
// Default to enabled if there is no enabled control.
return !m_markEnabledControl || !m_markEnabledControl->valid() ||
m_markEnabledControl->get() > 0.0;
}

double WaveformMarkRange::start() const {
double start = -1.0;
if (m_markStartPointControl && m_markStartPointControl->valid()) {
start = m_markStartPointControl->get();
}
return start;
}

double WaveformMarkRange::end() const {
double end = -1.0;
if (m_markEndPointControl && m_markEndPointControl->valid()) {
end = m_markEndPointControl->get();
}
return end;
}

void WaveformMarkRange::generateImage(int weidth, int height) {
Expand Down
40 changes: 21 additions & 19 deletions src/waveform/renderers/waveformmarkrange.h
Original file line number Diff line number Diff line change
@@ -1,40 +1,44 @@
#ifndef WAVEFORMMARKRANGE_H
#define WAVEFORMMARKRANGE_H
#pragma once

#include <QColor>
#include <QImage>
#include <QString>

#include "skin/skincontext.h"
#include "control/controlproxy.h"
#include "util/memory.h"

class ControlProxy;
class QDomNode;
class SkinContext;
class WaveformSignalColors;

class WaveformMarkRange {
public:
WaveformMarkRange();
~WaveformMarkRange();
WaveformMarkRange(
const QString& group,
const QDomNode& node,
const SkinContext& context,
const WaveformSignalColors& signalColors);
// This class is only moveable, but not copyable!
WaveformMarkRange(WaveformMarkRange&&) = default;
WaveformMarkRange(const WaveformMarkRange&) = delete;

// If a mark range is active it has valid start/end points so it should be
// drawn on waveforms.
bool active();
bool active() const;
// If a mark range is enabled that means it should be painted with its
// active color instead of its disabled color.
bool enabled();
bool enabled() const;
// Returns start value or -1 if the start control doesn't exist.
double start();
double start() const;
// Returns end value or -1 if the end control doesn't exist.
double end();

void setup(const QString &group, const QDomNode& node,
const SkinContext& context,
const WaveformSignalColors& signalColors);
double end() const;

private:
void generateImage(int weidth, int height);

ControlProxy* m_markStartPointControl;
ControlProxy* m_markEndPointControl;
ControlProxy* m_markEnabledControl;
std::unique_ptr<ControlProxy> m_markStartPointControl;
std::unique_ptr<ControlProxy> m_markEndPointControl;
std::unique_ptr<ControlProxy> m_markEnabledControl;

QColor m_activeColor;
QColor m_disabledColor;
Expand All @@ -45,5 +49,3 @@ class WaveformMarkRange {
friend class WaveformRenderMarkRange;
friend class WOverview;
};

#endif // WAVEFORMMARKRANGE_H
12 changes: 6 additions & 6 deletions src/waveform/renderers/waveformrendermarkrange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@ WaveformRenderMarkRange::WaveformRenderMarkRange(WaveformWidgetRenderer* wavefor
WaveformRendererAbstract(waveformWidgetRenderer) {
}

WaveformRenderMarkRange::~WaveformRenderMarkRange() {
}

void WaveformRenderMarkRange::setup(const QDomNode& node, const SkinContext& context) {
m_markRanges.clear();
m_markRanges.reserve(1);

QDomNode child = node.firstChild();
while (!child.isNull()) {
if (child.nodeName() == "MarkRange") {
m_markRanges.push_back(WaveformMarkRange());
m_markRanges.back().setup(m_waveformRenderer->getGroup(), child,
context, *m_waveformRenderer->getWaveformSignalColors());
m_markRanges.push_back(
WaveformMarkRange(
m_waveformRenderer->getGroup(),
child,
context,
*m_waveformRenderer->getWaveformSignalColors()));
}
child = child.nextSibling();
}
Expand Down
9 changes: 3 additions & 6 deletions src/waveform/renderers/waveformrendermarkrange.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

#include "preferences/usersettings.h"
#include "skin/skincontext.h"
#include "util/class.h"
#include "waveform/renderers/waveformmarkrange.h"
#include "waveform/renderers/waveformrendererabstract.h"

Expand All @@ -21,17 +20,15 @@ class ControlObject;
class WaveformRenderMarkRange : public WaveformRendererAbstract {
public:
explicit WaveformRenderMarkRange(WaveformWidgetRenderer* waveformWidgetRenderer);
virtual ~WaveformRenderMarkRange();
~WaveformRenderMarkRange() override = default;

virtual void setup(const QDomNode& node, const SkinContext& context);
virtual void draw(QPainter* painter, QPaintEvent* event);
void setup(const QDomNode& node, const SkinContext& context) override;
void draw(QPainter* painter, QPaintEvent* event) override;

private:
void generateImages();

std::vector<WaveformMarkRange> m_markRanges;

DISALLOW_COPY_AND_ASSIGN(WaveformRenderMarkRange);
};

#endif
3 changes: 1 addition & 2 deletions src/widget/woverview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,8 @@ void WOverview::setup(const QDomNode& node, const SkinContext& context) {
QDomNode child = node.firstChild();
while (!child.isNull()) {
if (child.nodeName() == "MarkRange") {
m_markRanges.push_back(WaveformMarkRange());
m_markRanges.push_back(WaveformMarkRange(m_group, child, context, m_signalColors));
WaveformMarkRange& markRange = m_markRanges.back();
markRange.setup(m_group, child, context, m_signalColors);

if (markRange.m_markEnabledControl) {
markRange.m_markEnabledControl->connectValueChanged(
Expand Down

0 comments on commit 59f4670

Please sign in to comment.