updated scope panel to be permanent

Never liked how this was set up before. This makes more sense to me.
This commit is contained in:
itsmattkc
2022-01-02 14:05:25 -08:00
parent 61f65a3def
commit f6f67e895d
10 changed files with 88 additions and 59 deletions
+1 -2
View File
@@ -29,8 +29,7 @@ FootageViewerPanel::FootageViewerPanel(QWidget *parent) :
{
// Set ViewerWidget as the central widget
FootageViewerWidget* fvw = new FootageViewerWidget();
connect(fvw, &FootageViewerWidget::RequestScopePanel, this, &FootageViewerPanel::CreateScopePanel);
SetTimeBasedWidget(fvw);
SetViewerWidget(fvw);
// Set strings
Retranslate();
+27 -2
View File
@@ -27,7 +27,8 @@
namespace olive {
ScopePanel::ScopePanel(QWidget* parent) :
PanelWidget(QStringLiteral("ScopePanel"), parent)
PanelWidget(QStringLiteral("ScopePanel"), parent),
viewer_(nullptr)
{
QWidget* central = new QWidget();
setWidget(central);
@@ -84,6 +85,30 @@ QString ScopePanel::TypeToName(ScopePanel::Type t)
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();
}
}
void ScopePanel::SetReferenceBuffer(TexturePtr frame)
{
histogram_->SetBuffer(frame);
@@ -98,7 +123,7 @@ void ScopePanel::SetColorManager(ColorManager *manager)
void ScopePanel::Retranslate()
{
SetTitle(tr("Scope"));
SetTitle(tr("Scopes"));
for (int i=0;i<ScopePanel::kTypeCount;i++) {
scope_type_combobox_->setItemText(i, TypeToName(static_cast<Type>(i)));
+10 -2
View File
@@ -24,14 +24,13 @@
#include <QComboBox>
#include <QStackedWidget>
#include "panel/viewer/viewerbase.h"
#include "widget/panel/panel.h"
#include "widget/scope/histogram/histogram.h"
#include "widget/scope/waveform/waveform.h"
namespace olive {
class ViewerPanel;
class ScopePanel : public PanelWidget
{
Q_OBJECT
@@ -49,6 +48,13 @@ public:
static QString TypeToName(Type t);
void SetViewerPanel(ViewerPanelBase *vp);
ViewerPanelBase *GetConnectedViewerPanel() const
{
return viewer_;
}
public slots:
void SetReferenceBuffer(TexturePtr frame);
@@ -68,6 +74,8 @@ private:
HistogramScope* histogram_;
ViewerPanelBase *viewer_;
};
}
+1 -2
View File
@@ -27,8 +27,7 @@ ViewerPanel::ViewerPanel(const QString &object_name, QWidget *parent) :
{
// Set ViewerWidget as the central widget
ViewerWidget* vw = new ViewerWidget();
connect(vw, &ViewerWidget::RequestScopePanel, this, &ViewerPanel::CreateScopePanel);
SetTimeBasedWidget(vw);
SetViewerWidget(vw);
// Set strings
Retranslate();
+5 -12
View File
@@ -92,20 +92,13 @@ void ViewerPanelBase::CacheSequenceInOut()
static_cast<ViewerWidget*>(GetTimeBasedWidget())->CacheSequenceInOut();
}
void ViewerPanelBase::CreateScopePanel(ScopePanel::Type type)
void ViewerPanelBase::SetViewerWidget(ViewerWidget *vw)
{
ViewerWidget* vw = static_cast<ViewerWidget*>(GetTimeBasedWidget());
ScopePanel* p = Core::instance()->main_window()->AppendScopePanel();
connect(vw, &ViewerWidget::TextureChanged, this, &ViewerPanelBase::TextureChanged);
connect(vw, &ViewerWidget::ColorProcessorChanged, this, &ViewerPanelBase::ColorProcessorChanged);
connect(vw, &ViewerWidget::ColorManagerChanged, this, &ViewerPanelBase::ColorManagerChanged);
p->SetType(type);
// Connect viewer widget texture drawing to scope panel
connect(vw, &ViewerWidget::TextureChanged, p, &ScopePanel::SetReferenceBuffer);
connect(vw, &ViewerWidget::ColorManagerChanged, p, &ScopePanel::SetColorManager);
p->SetColorManager(vw->color_manager());
vw->UpdateTextureFromNode();
SetTimeBasedWidget(vw);
}
void ViewerPanelBase::closeEvent(QCloseEvent *e)
+27 -1
View File
@@ -52,6 +52,16 @@ public:
*/
void SetFullScreen(QScreen* screen = nullptr);
ColorManager *GetColorManager()
{
return static_cast<ViewerWidget*>(GetTimeBasedWidget())->color_manager();
}
void UpdateTextureFromNode()
{
static_cast<ViewerWidget*>(GetTimeBasedWidget())->UpdateTextureFromNode();
}
public slots:
void SetGizmos(Node* node);
@@ -59,8 +69,24 @@ public slots:
void CacheSequenceInOut();
signals:
/**
* @brief Signal emitted when a new frame is loaded
*/
void TextureChanged(TexturePtr t);
/**
* @brief Wrapper for ViewerGLWidget::ColorProcessorChanged()
*/
void ColorProcessorChanged(ColorProcessorPtr processor);
/**
* @brief Wrapper for ViewerGLWidget::ColorManagerChanged()
*/
void ColorManagerChanged(ColorManager* color_manager);
protected:
void CreateScopePanel(ScopePanel::Type type);
void SetViewerWidget(ViewerWidget *vw);
virtual void closeEvent(QCloseEvent* e) override;
-20
View File
@@ -973,11 +973,6 @@ void ViewerWidget::WindowAboutToClose()
windows_.remove(windows_.key(static_cast<ViewerWindow*>(sender())));
}
void ViewerWidget::ContextMenuScopeTriggered(QAction *action)
{
emit RequestScopePanel(static_cast<ScopePanel::Type>(action->data().toInt()));
}
void ViewerWidget::RendererGeneratedFrame()
{
RenderTicketWatcher* ticket = static_cast<RenderTicketWatcher*>(sender());
@@ -1117,21 +1112,6 @@ void ViewerWidget::ShowContextMenu(const QPoint &pos)
menu.addSeparator();
{
// Scopes
Menu* scopes_menu = new Menu(tr("Scopes"), &menu);
menu.addMenu(scopes_menu);
for (int i=0;i<ScopePanel::kTypeCount;i++) {
QAction* scope_action = scopes_menu->addAction(ScopePanel::TypeToName(static_cast<ScopePanel::Type>(i)));
scope_action->setData(i);
}
connect(scopes_menu, &Menu::triggered, this, &ViewerWidget::ContextMenuScopeTriggered);
}
menu.addSeparator();
{
Menu* cache_menu = new Menu(tr("Cache"), &menu);
menu.addMenu(cache_menu);
-10
View File
@@ -33,7 +33,6 @@
#include "audiowaveformview.h"
#include "common/rational.h"
#include "node/output/viewer/viewer.h"
#include "panel/scope/scope.h"
#include "render/previewaudiodevice.h"
#include "render/previewautocacher.h"
#include "threading/threadticketwatcher.h"
@@ -131,13 +130,6 @@ signals:
*/
void TextureChanged(TexturePtr t);
/**
* @brief Request a scope panel
*
* As a widget, we don't handle panels, but a parent panel may pick this signal up.
*/
void RequestScopePanel(ScopePanel::Type type);
/**
* @brief Wrapper for ViewerGLWidget::ColorProcessorChanged()
*/
@@ -296,8 +288,6 @@ private slots:
void WindowAboutToClose();
void ContextMenuScopeTriggered(QAction* action);
void RendererGeneratedFrame();
void RendererGeneratedFrameForQueue();
+16 -5
View File
@@ -89,6 +89,7 @@ MainWindow::MainWindow(QWidget *parent) :
task_man_panel_ = new TaskManagerPanel(this);
AppendTimelinePanel();
audio_monitor_panel_ = new AudioMonitorPanel(this);
scope_panel_ = new ScopePanel(this);
// Make node-related connections
connect(node_panel_, &NodePanel::NodesSelected, param_panel_, &ParamPanel::SelectNodes);
@@ -113,6 +114,8 @@ MainWindow::MainWindow(QWidget *parent) :
sequence_viewer_panel_->ConnectTimeBasedPanel(param_panel_);
sequence_viewer_panel_->ConnectTimeBasedPanel(curve_panel_);
scope_panel_->SetViewerPanel(sequence_viewer_panel_);
UpdateTitle();
QMetaObject::invokeMethod(this, &MainWindow::SetDefaultLayout, Qt::QueuedConnection);
@@ -245,11 +248,6 @@ void MainWindow::FolderOpen(Project* p, Folder *i, bool floating)
folder_panels_.append(panel);
}
ScopePanel *MainWindow::AppendScopePanel()
{
return AppendFloatingPanelInternal<ScopePanel>(scope_panels_);
}
void MainWindow::OpenNodeInViewer(ViewerOutput *node)
{
if (viewer_panels_.contains(node)) {
@@ -414,6 +412,8 @@ void MainWindow::closeEvent(QCloseEvent *e)
return;
}
scope_panel_->SetViewerPanel(nullptr);
PanelManager::instance()->DeleteAllPanels();
SaveCustomShortcuts();
@@ -521,6 +521,10 @@ void MainWindow::ViewerCloseRequested()
{
ViewerPanel* panel = static_cast<ViewerPanel*>(sender());
if (panel == scope_panel_->GetConnectedViewerPanel()) {
scope_panel_->SetViewerPanel(sequence_viewer_panel_);
}
viewer_panels_.remove(viewer_panels_.key(panel));
panel->deleteLater();
@@ -753,6 +757,9 @@ void MainWindow::FocusedPanelChanged(PanelWidget *panel)
} else if (ProjectPanel* project = dynamic_cast<ProjectPanel*>(panel)) {
// Signal project panel focus
UpdateTitle();
} else if (ViewerPanelBase *viewer = dynamic_cast<ViewerPanelBase*>(panel)) {
// Update scopes for viewer
scope_panel_->SetViewerPanel(viewer);
}
}
@@ -772,6 +779,10 @@ void MainWindow::SetDefaultLayout()
curve_panel_->setFloating(true);
addDockWidget(Qt::TopDockWidgetArea, curve_panel_);
scope_panel_->hide();
scope_panel_->setFloating(true);
addDockWidget(Qt::TopDockWidgetArea, scope_panel_);
sequence_viewer_panel_->show();
addDockWidget(Qt::TopDockWidgetArea, sequence_viewer_panel_);
+1 -3
View File
@@ -69,8 +69,6 @@ public:
void FolderOpen(Project* p, Folder *i, bool floating);
ScopePanel* AppendScopePanel();
void OpenNodeInViewer(ViewerOutput* node);
enum ProgressStatus {
@@ -159,7 +157,7 @@ private:
AudioMonitorPanel* audio_monitor_panel_;
TaskManagerPanel* task_man_panel_;
PixelSamplerPanel* pixel_sampler_panel_;
QList<ScopePanel*> scope_panels_;
ScopePanel* scope_panel_;
QMap<ViewerOutput*, ViewerPanel*> viewer_panels_;
#ifdef Q_OS_WINDOWS