//
// C++ Implementation: woverview
//
// Description:
//
//
// Author: Tue Haste Andersen <haste@diku.dk>, (C) 2003
//
// Copyright: See COPYING file that comes with this distribution
//
//
#include <QBrush>
#include <QtDebug>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QPainter>
#include <QtDebug>
#include <QPixmap>
#include <QUrl>
#include <QMimeData>
#include "analyzer/analyzerprogress.h"
#include "control/controlobject.h"
#include "control/controlproxy.h"
#include "engine/engine.h"
#include "mixer/playermanager.h"
#include "track/track.h"
#include "util/color/color.h"
#include "util/compatibility.h"
#include "util/dnd.h"
#include "util/duration.h"
#include "util/math.h"
#include "util/painterscope.h"
#include "util/timer.h"
#include "widget/controlwidgetconnection.h"
#include "woverview.h"
#include "wskincolor.h"
#include "waveform/waveform.h"
#include "waveform/waveformwidgetfactory.h"
WOverview::WOverview(
const char* group,
PlayerManager* pPlayerManager,
UserSettingsPointer pConfig,
QWidget* parent)
: WWidget(parent),
m_actualCompletion(0),
m_pixmapDone(false),
m_waveformPeak(-1.0),
m_diffGain(0),
m_devicePixelRatio(1.0),
m_group(group),
m_pConfig(pConfig),
m_endOfTrack(false),
m_pCueMenu(std::make_unique<CueMenu>(this)),
m_bShowCueTimes(true),
m_iPosSeconds(0),
m_bLeftClickDragging(false),
m_iPos(0),
m_pHoveredMark(nullptr),
m_bHotcueMenuShowing(false),
m_bTimeRulerActive(false),
m_orientation(Qt::Horizontal),
m_a(1.0),
m_b(0.0),
m_analyzerProgress(kAnalyzerProgressUnknown),
m_trackLoaded(false),
m_scaleFactor(1.0) {
m_endOfTrackControl = new ControlProxy(
m_group, "end_of_track", this);
m_endOfTrackControl->connectValueChanged(this, &WOverview::onEndOfTrackChange);
m_pRateDirControl = new ControlProxy(m_group, "rate_dir", this);
m_pRateRangeControl = new ControlProxy(m_group, "rateRange", this);
m_pRateSliderControl = new ControlProxy(m_group, "rate", this);
// Needed to recalculate range durations when rate slider is moved without the deck playing
// TODO: connect to rate_ratio instead in PR #1765
m_pRateSliderControl->connectValueChanged(this, &WOverview::onRateSliderChange);
m_trackSampleRateControl = new ControlProxy(m_group, "track_samplerate", this);
m_trackSamplesControl =
new ControlProxy(m_group, "track_samples", this);
m_playpositionControl = new ControlProxy(m_group, "playposition", this);
setAcceptDrops(true);
setMouseTracking(true);
connect(pPlayerManager, &PlayerManager::trackAnalyzerProgress,
this, &WOverview::onTrackAnalyzerProgress);
connect(m_pCueMenu.get(), &QMenu::aboutToHide, this, &WOverview::slotCueMenuAboutToHide);
}
void WOverview::setup(const QDomNode& node, const SkinContext& context) {
m_scaleFactor = context.getScaleFactor();
m_signalColors.setup(node, context);
m_qColorBackground = m_signalColors.getBgColor();
m_labelBackgroundColor = context.selectColor(node, "LabelBackgroundColor");
if (!m_labelBackgroundColor.isValid()) {
m_labelBackgroundColor = m_qColorBackground;
m_labelBackgroundColor.setAlpha(255 / 2); // 0 == fully transparent
}
m_labelTextColor = context.selectColor(node, "LabelTextColor");
if (!m_labelTextColor.isValid()) {
m_labelTextColor = Qt::white;
}
bool okay = false;
m_iLabelFontSize = context.selectInt(node, "LabelFontSize"