added ability to open viewers on any viewer node or derivative

Fixes #1362

Also fixes some other bugs that impeded this from working.
This commit is contained in:
itsmattkc
2021-04-12 22:58:34 +10:00
parent 17f40cf91f
commit c03c197412
26 changed files with 173 additions and 85 deletions
+37
View File
@@ -261,6 +261,27 @@ ScopePanel *MainWindow::AppendScopePanel()
return AppendFloatingPanelInternal<ScopePanel>(scope_panels_);
}
void MainWindow::OpenNodeInViewer(ViewerOutput *node)
{
if (viewer_panels_.contains(node)) {
// This node already has a viewer, raise it
viewer_panels_.value(node)->raise();
} else {
// Create a viewer for this node
ViewerPanel* viewer = PanelManager::instance()->CreatePanel<ViewerPanel>(this);
viewer->SetSignalInsteadOfClose(true);
viewer->setFloating(true);
viewer->setVisible(true);
viewer->ConnectViewerNode(node);
connect(viewer, &ViewerPanel::CloseRequested, this, &MainWindow::ViewerCloseRequested);
connect(node, &ViewerOutput::RemovedFromGraph, this, &MainWindow::ViewerWithPanelRemovedFromGraph);
viewer_panels_.insert(node, viewer);
}
}
void MainWindow::SetFullscreen(bool fullscreen)
{
if (fullscreen) {
@@ -481,6 +502,22 @@ void MainWindow::ProjectCloseRequested()
Core::instance()->CloseProject(p, true);
}
void MainWindow::ViewerCloseRequested()
{
ViewerPanel* panel = static_cast<ViewerPanel*>(sender());
viewer_panels_.remove(viewer_panels_.key(panel));
panel->deleteLater();
}
void MainWindow::ViewerWithPanelRemovedFromGraph()
{
ViewerOutput* vo = static_cast<ViewerOutput*>(sender());
viewer_panels_.take(vo)->deleteLater();
disconnect(vo, &ViewerOutput::RemovedFromGraph, this, &MainWindow::ViewerWithPanelRemovedFromGraph);
}
void MainWindow::FloatingPanelCloseRequested()
{
PanelWidget* panel = static_cast<PanelWidget*>(sender());
+7
View File
@@ -71,6 +71,8 @@ public:
ScopePanel* AppendScopePanel();
void OpenNodeInViewer(ViewerOutput* node);
enum ProgressStatus {
kProgressNone,
kProgressShow,
@@ -155,6 +157,7 @@ private:
PixelSamplerPanel* pixel_sampler_panel_;
QList<ScopePanel*> scope_panels_;
NodeTablePanel* table_panel_;
QMap<ViewerOutput*, ViewerPanel*> viewer_panels_;
#ifdef Q_OS_WINDOWS
unsigned int taskbar_btn_id_;
@@ -173,6 +176,10 @@ private slots:
void ProjectCloseRequested();
void ViewerCloseRequested();
void ViewerWithPanelRemovedFromGraph();
void FloatingPanelCloseRequested();
void StatusBarDoubleClicked();