/*** Olive - Non-Linear Video Editor Copyright (C) 2022 Olive Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ***/ #include "scope.h" #include #include "panel/viewer/viewer.h" namespace olive { ScopePanel::ScopePanel() : PanelWidget(QStringLiteral("ScopePanel")), viewer_(nullptr) { QWidget* central = new QWidget(this); setWidget(central); QVBoxLayout* layout = new QVBoxLayout(central); QHBoxLayout* toolbar_layout = new QHBoxLayout(); toolbar_layout->setContentsMargins(0, 0, 0, 0); scope_type_combobox_ = new QComboBox(); for (int i=0;iaddItem(QString()); } toolbar_layout->addWidget(scope_type_combobox_); toolbar_layout->addStretch(); layout->addLayout(toolbar_layout); stack_ = new QStackedWidget(); layout->addWidget(stack_); // Create waveform view waveform_view_ = new WaveformScope(); stack_->addWidget(waveform_view_); // Create histogram histogram_ = new HistogramScope(); stack_->addWidget(histogram_); connect(scope_type_combobox_, static_cast(&QComboBox::currentIndexChanged), stack_, &QStackedWidget::setCurrentIndex); Retranslate(); } void ScopePanel::SetType(ScopePanel::Type t) { scope_type_combobox_->setCurrentIndex(t); } QString ScopePanel::TypeToName(ScopePanel::Type t) { switch (t) { case kTypeWaveform: return tr("Waveform"); case kTypeHistogram: return tr("Histogram"); case kTypeCount: break; } return QString(); } void ScopePanel::SetViewerPanel(ViewerPanelBase *vp) { if (viewer_ == vp) { return; } if (viewer_) { disconnect(viewer_, &ViewerPanelBase::TextureChanged, this, &ScopePanel::SetReferenceBuffer); disconnect(viewer_, &ViewerPanelBase::ColorManagerChanged, this, &ScopePanel::SetColorManager); } viewer_ = vp; if (viewer_) { // Connect viewer widget texture drawing to scope panel connect(viewer_, &ViewerPanelBase::TextureChanged, this, &ScopePanel::SetReferenceBuffer); connect(viewer_, &ViewerPanelBase::ColorManagerChanged, this, &ScopePanel::SetColorManager); SetColorManager(viewer_->GetColorManager()); viewer_->UpdateTextureFromNode(); } else { SetReferenceBuffer(nullptr); SetColorManager(nullptr); } } void ScopePanel::SetReferenceBuffer(TexturePtr frame) { histogram_->SetBuffer(frame); waveform_view_->SetBuffer(frame); } void ScopePanel::SetColorManager(ColorManager *manager) { histogram_->ConnectColorManager(manager); waveform_view_->ConnectColorManager(manager); } void ScopePanel::Retranslate() { SetTitle(tr("Scopes")); for (int i=0;isetItemText(i, TypeToName(static_cast(i))); } } }