mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 13:00:32 +00:00
Let capture context manage singleton window panes
This commit is contained in:
@@ -33,7 +33,10 @@
|
||||
#include <QProgressDialog>
|
||||
#include <QStandardPaths>
|
||||
#include <QTimer>
|
||||
#include "Windows/Dialogs/CaptureDialog.h"
|
||||
#include "Windows/EventBrowser.h"
|
||||
#include "Windows/MainWindow.h"
|
||||
#include "Windows/TextureViewer.h"
|
||||
#include "QRDUtils.h"
|
||||
|
||||
CaptureContext::CaptureContext(QString paramFilename, QString remoteHost, uint32_t remoteIdent,
|
||||
@@ -391,3 +394,74 @@ void *CaptureContext::FillWindowingData(WId widget)
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
EventBrowser *CaptureContext::eventBrowser()
|
||||
{
|
||||
if(m_EventBrowser)
|
||||
return m_EventBrowser;
|
||||
|
||||
m_EventBrowser = new EventBrowser(this, m_MainWindow);
|
||||
m_EventBrowser->setObjectName("eventBrowser");
|
||||
|
||||
return m_EventBrowser;
|
||||
}
|
||||
|
||||
TextureViewer *CaptureContext::textureViewer()
|
||||
{
|
||||
if(m_TextureViewer)
|
||||
return m_TextureViewer;
|
||||
|
||||
m_TextureViewer = new TextureViewer(this, m_MainWindow);
|
||||
m_TextureViewer->setObjectName("textureViewer");
|
||||
|
||||
return m_TextureViewer;
|
||||
}
|
||||
|
||||
CaptureDialog *CaptureContext::captureDialog()
|
||||
{
|
||||
if(m_CaptureDialog)
|
||||
return m_CaptureDialog;
|
||||
|
||||
m_CaptureDialog = new CaptureDialog(
|
||||
this,
|
||||
[this](const QString &exe, const QString &workingDir, const QString &cmdLine,
|
||||
const QList<EnvironmentModification> &env, CaptureOptions opts) {
|
||||
return m_MainWindow->OnCaptureTrigger(exe, workingDir, cmdLine, env, opts);
|
||||
},
|
||||
[this](uint32_t PID, const QList<EnvironmentModification> &env, const QString &name,
|
||||
CaptureOptions opts) { return m_MainWindow->OnInjectTrigger(PID, env, name, opts); },
|
||||
m_MainWindow);
|
||||
m_CaptureDialog->setObjectName("capDialog");
|
||||
|
||||
return m_CaptureDialog;
|
||||
}
|
||||
|
||||
QWidget *CaptureContext::createToolWindow(const QString &objectName)
|
||||
{
|
||||
if(objectName == "textureViewer")
|
||||
{
|
||||
return textureViewer();
|
||||
}
|
||||
else if(objectName == "eventBrowser")
|
||||
{
|
||||
return eventBrowser();
|
||||
}
|
||||
else if(objectName == "capDialog")
|
||||
{
|
||||
return captureDialog();
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CaptureContext::windowClosed(QWidget *window)
|
||||
{
|
||||
if((QWidget *)m_EventBrowser == window)
|
||||
m_EventBrowser = NULL;
|
||||
else if((QWidget *)m_TextureViewer == window)
|
||||
m_TextureViewer = NULL;
|
||||
else if((QWidget *)m_CaptureDialog == window)
|
||||
m_CaptureDialog = NULL;
|
||||
else
|
||||
qCritical() << "Unrecognised window being closed: " << window;
|
||||
}
|
||||
|
||||
@@ -46,6 +46,9 @@ struct ILogViewerForm
|
||||
};
|
||||
|
||||
class MainWindow;
|
||||
class EventBrowser;
|
||||
class TextureViewer;
|
||||
class CaptureDialog;
|
||||
class QProgressDialog;
|
||||
|
||||
struct Formatter
|
||||
@@ -90,19 +93,6 @@ public:
|
||||
}
|
||||
|
||||
void RemoveLogViewer(ILogViewerForm *f) { m_LogViewers.removeAll(f); }
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Singleton windows
|
||||
|
||||
/*
|
||||
private MainWindow m_MainWindow = null;
|
||||
private EventBrowser m_EventBrowser = null;
|
||||
private APIInspector m_APIInspector = null;
|
||||
private DebugMessages m_DebugMessages = null;
|
||||
private TimelineBar m_TimelineBar = null;
|
||||
private TextureViewer m_TextureViewer = null;
|
||||
private PipelineStateViewer m_PipelineStateViewer = null;
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Accessors
|
||||
|
||||
@@ -133,6 +123,17 @@ public:
|
||||
WindowingSystem m_CurWinSystem;
|
||||
void *FillWindowingData(WId widget);
|
||||
|
||||
MainWindow *mainWindow() { return m_MainWindow; }
|
||||
EventBrowser *eventBrowser();
|
||||
TextureViewer *textureViewer();
|
||||
CaptureDialog *captureDialog();
|
||||
|
||||
bool hasEventBrowser() { return m_EventBrowser != NULL; }
|
||||
bool hasTextureViewer() { return m_TextureViewer != NULL; }
|
||||
bool hasCaptureDialog() { return m_CaptureDialog != NULL; }
|
||||
QWidget *createToolWindow(const QString &objectName);
|
||||
void windowClosed(QWidget *window);
|
||||
|
||||
D3D11PipelineState CurD3D11PipelineState;
|
||||
D3D12PipelineState CurD3D12PipelineState;
|
||||
GLPipelineState CurGLPipelineState;
|
||||
@@ -191,5 +192,8 @@ private:
|
||||
|
||||
// Windows
|
||||
QProgressDialog *m_Progress;
|
||||
MainWindow *m_MainWindow;
|
||||
MainWindow *m_MainWindow = NULL;
|
||||
EventBrowser *m_EventBrowser = NULL;
|
||||
TextureViewer *m_TextureViewer = NULL;
|
||||
CaptureDialog *m_CaptureDialog = NULL;
|
||||
};
|
||||
|
||||
@@ -167,6 +167,8 @@ CaptureDialog::CaptureDialog(CaptureContext *ctx, OnCaptureMethod captureCallbac
|
||||
|
||||
CaptureDialog::~CaptureDialog()
|
||||
{
|
||||
m_Ctx->windowClosed(this);
|
||||
|
||||
if(ui->toggleGlobal->isChecked())
|
||||
{
|
||||
ui->toggleGlobal->setChecked(false);
|
||||
|
||||
@@ -86,6 +86,7 @@ EventBrowser::EventBrowser(CaptureContext *ctx, QWidget *parent)
|
||||
|
||||
EventBrowser::~EventBrowser()
|
||||
{
|
||||
m_Ctx->windowClosed(this);
|
||||
m_Ctx->RemoveLogViewer(this);
|
||||
delete ui;
|
||||
delete m_SizeDelegate;
|
||||
|
||||
@@ -55,18 +55,6 @@ struct Version
|
||||
static bool isMismatched() { return RENDERDOC_GetVersionString() != bareString(); }
|
||||
};
|
||||
|
||||
void MainWindow::ShowLiveCapture(LiveCapture *live)
|
||||
{
|
||||
m_LiveCaptures.push_back(live);
|
||||
ui->toolWindowManager->addToolWindow(
|
||||
live, ToolWindowManager::AreaReference(ToolWindowManager::LastUsedArea));
|
||||
}
|
||||
|
||||
void MainWindow::LiveCaptureClosed(LiveCapture *live)
|
||||
{
|
||||
m_LiveCaptures.removeOne(live);
|
||||
}
|
||||
|
||||
MainWindow::MainWindow(CaptureContext *ctx) : QMainWindow(NULL), ui(new Ui::MainWindow), m_Ctx(ctx)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
@@ -128,25 +116,7 @@ MainWindow::MainWindow(CaptureContext *ctx) : QMainWindow(NULL), ui(new Ui::Main
|
||||
|
||||
ui->toolWindowManager->setRubberBandLineWidth(50);
|
||||
ui->toolWindowManager->setToolWindowCreateCallback([this](const QString &objectName) -> QWidget * {
|
||||
if(objectName == "textureViewer")
|
||||
{
|
||||
TextureViewer *textureViewer = new TextureViewer(m_Ctx);
|
||||
textureViewer->setObjectName("textureViewer");
|
||||
return textureViewer;
|
||||
}
|
||||
else if(objectName == "eventBrowser")
|
||||
{
|
||||
EventBrowser *eventBrowser = new EventBrowser(m_Ctx);
|
||||
eventBrowser->setObjectName("eventBrowser");
|
||||
return eventBrowser;
|
||||
}
|
||||
else if(objectName == "capDialog")
|
||||
{
|
||||
CaptureDialog *capDialog = this->createCaptureDialog();
|
||||
return capDialog;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return m_Ctx->createToolWindow(objectName);
|
||||
});
|
||||
|
||||
bool loaded = LoadLayout(0);
|
||||
@@ -154,20 +124,18 @@ MainWindow::MainWindow(CaptureContext *ctx) : QMainWindow(NULL), ui(new Ui::Main
|
||||
// create default layout if layout failed to load
|
||||
if(!loaded)
|
||||
{
|
||||
EventBrowser *eventBrowser = new EventBrowser(m_Ctx, this);
|
||||
eventBrowser->setObjectName("eventBrowser");
|
||||
EventBrowser *eventBrowser = m_Ctx->eventBrowser();
|
||||
|
||||
ui->toolWindowManager->addToolWindow(eventBrowser, ToolWindowManager::EmptySpace);
|
||||
|
||||
TextureViewer *textureViewer = new TextureViewer(m_Ctx, this);
|
||||
textureViewer->setObjectName("textureViewer");
|
||||
TextureViewer *textureViewer = m_Ctx->textureViewer();
|
||||
|
||||
ui->toolWindowManager->addToolWindow(
|
||||
textureViewer,
|
||||
ToolWindowManager::AreaReference(ToolWindowManager::RightOf,
|
||||
ui->toolWindowManager->areaOf(eventBrowser), 0.75f));
|
||||
|
||||
CaptureDialog *capDialog = createCaptureDialog();
|
||||
CaptureDialog *capDialog = m_Ctx->captureDialog();
|
||||
|
||||
ui->toolWindowManager->addToolWindow(
|
||||
capDialog, ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
|
||||
@@ -466,14 +434,15 @@ void MainWindow::LoadLogfile(const QString &filename, bool temporary, bool local
|
||||
|
||||
void MainWindow::OpenCaptureConfigFile(const QString &filename, bool exe)
|
||||
{
|
||||
CaptureDialog *capDialog = createCaptureDialog();
|
||||
CaptureDialog *capDialog = m_Ctx->captureDialog();
|
||||
|
||||
if(exe)
|
||||
capDialog->setExecutableFilename(filename);
|
||||
else
|
||||
capDialog->loadSettings(filename);
|
||||
|
||||
ui->toolWindowManager->addToolWindow(capDialog, ToolWindowManager::EmptySpace);
|
||||
if(!ui->toolWindowManager->toolWindows().contains(capDialog))
|
||||
ui->toolWindowManager->addToolWindow(capDialog, mainToolArea());
|
||||
}
|
||||
|
||||
QString MainWindow::GetSavePath()
|
||||
@@ -607,21 +576,6 @@ void MainWindow::CloseLogfile()
|
||||
ui->action_Save_Log->setEnabled(false);
|
||||
}
|
||||
|
||||
CaptureDialog *MainWindow::createCaptureDialog()
|
||||
{
|
||||
CaptureDialog *ret = new CaptureDialog(
|
||||
m_Ctx,
|
||||
[this](const QString &exe, const QString &workingDir, const QString &cmdLine,
|
||||
const QList<EnvironmentModification> &env, CaptureOptions opts) {
|
||||
return this->OnCaptureTrigger(exe, workingDir, cmdLine, env, opts);
|
||||
},
|
||||
[this](uint32_t PID, const QList<EnvironmentModification> &env, const QString &name,
|
||||
CaptureOptions opts) { return this->OnInjectTrigger(PID, env, name, opts); },
|
||||
this);
|
||||
ret->setObjectName("capDialog");
|
||||
return ret;
|
||||
}
|
||||
|
||||
void MainWindow::SetTitle(const QString &filename)
|
||||
{
|
||||
QString prefix = "";
|
||||
@@ -698,6 +652,50 @@ void MainWindow::PopulateRecentCaptures()
|
||||
ui->menu_Recent_Capture_Settings->addAction(ui->action_Clear_Log_History);
|
||||
}
|
||||
|
||||
void MainWindow::ShowLiveCapture(LiveCapture *live)
|
||||
{
|
||||
m_LiveCaptures.push_back(live);
|
||||
ui->toolWindowManager->addToolWindow(live, mainToolArea());
|
||||
}
|
||||
|
||||
void MainWindow::LiveCaptureClosed(LiveCapture *live)
|
||||
{
|
||||
m_LiveCaptures.removeOne(live);
|
||||
}
|
||||
|
||||
ToolWindowManager::AreaReference MainWindow::mainToolArea()
|
||||
{
|
||||
// bit of a hack. Maybe the ToolWindowManager should track this?
|
||||
// Try and identify where to add new windows, by searching a
|
||||
// priority list of other windows to use their area
|
||||
if(m_Ctx->hasTextureViewer() &&
|
||||
ui->toolWindowManager->toolWindows().contains(m_Ctx->textureViewer()))
|
||||
return ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
|
||||
ui->toolWindowManager->areaOf(m_Ctx->textureViewer()));
|
||||
else if(m_Ctx->hasCaptureDialog() &&
|
||||
ui->toolWindowManager->toolWindows().contains(m_Ctx->captureDialog()))
|
||||
return ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
|
||||
ui->toolWindowManager->areaOf(m_Ctx->captureDialog()));
|
||||
|
||||
// if all else fails just add to the last place we placed something.
|
||||
return ToolWindowManager::AreaReference(ToolWindowManager::LastUsedArea);
|
||||
}
|
||||
|
||||
ToolWindowManager::AreaReference MainWindow::leftToolArea()
|
||||
{
|
||||
// see mainToolArea()
|
||||
if(m_Ctx->hasTextureViewer() &&
|
||||
ui->toolWindowManager->toolWindows().contains(m_Ctx->textureViewer()))
|
||||
return ToolWindowManager::AreaReference(ToolWindowManager::LeftOf,
|
||||
ui->toolWindowManager->areaOf(m_Ctx->textureViewer()));
|
||||
else if(m_Ctx->hasCaptureDialog() &&
|
||||
ui->toolWindowManager->toolWindows().contains(m_Ctx->captureDialog()))
|
||||
return ToolWindowManager::AreaReference(ToolWindowManager::LeftOf,
|
||||
ui->toolWindowManager->areaOf(m_Ctx->captureDialog()));
|
||||
|
||||
return ToolWindowManager::AreaReference(ToolWindowManager::LastUsedArea);
|
||||
}
|
||||
|
||||
void MainWindow::recentLog(const QString &filename)
|
||||
{
|
||||
if(QFileInfo::exists(filename))
|
||||
@@ -829,38 +827,48 @@ void MainWindow::on_action_Mesh_Output_triggered()
|
||||
// TODO Mesh view
|
||||
}
|
||||
|
||||
void MainWindow::on_action_Event_Viewer_triggered()
|
||||
void MainWindow::on_action_Event_Browser_triggered()
|
||||
{
|
||||
EventBrowser *eventBrowser = new EventBrowser(m_Ctx, this);
|
||||
eventBrowser->setObjectName("eventBrowser");
|
||||
EventBrowser *eventBrowser = m_Ctx->eventBrowser();
|
||||
|
||||
ui->toolWindowManager->addToolWindow(eventBrowser, ToolWindowManager::EmptySpace);
|
||||
if(ui->toolWindowManager->toolWindows().contains(eventBrowser))
|
||||
eventBrowser->activateWindow();
|
||||
else
|
||||
ui->toolWindowManager->addToolWindow(eventBrowser, leftToolArea());
|
||||
}
|
||||
|
||||
void MainWindow::on_action_Texture_Viewer_triggered()
|
||||
{
|
||||
TextureViewer *textureViewer = new TextureViewer(m_Ctx, this);
|
||||
textureViewer->setObjectName("textureViewer");
|
||||
TextureViewer *textureViewer = m_Ctx->textureViewer();
|
||||
|
||||
ui->toolWindowManager->addToolWindow(textureViewer, ToolWindowManager::EmptySpace);
|
||||
if(ui->toolWindowManager->toolWindows().contains(textureViewer))
|
||||
textureViewer->activateWindow();
|
||||
else
|
||||
ui->toolWindowManager->addToolWindow(textureViewer, mainToolArea());
|
||||
}
|
||||
|
||||
void MainWindow::on_action_Capture_Log_triggered()
|
||||
{
|
||||
CaptureDialog *capDialog = createCaptureDialog();
|
||||
|
||||
ui->toolWindowManager->addToolWindow(capDialog, ToolWindowManager::EmptySpace);
|
||||
CaptureDialog *capDialog = m_Ctx->captureDialog();
|
||||
|
||||
capDialog->setInjectMode(false);
|
||||
|
||||
if(ui->toolWindowManager->toolWindows().contains(capDialog))
|
||||
capDialog->activateWindow();
|
||||
else
|
||||
ui->toolWindowManager->addToolWindow(capDialog, mainToolArea());
|
||||
}
|
||||
|
||||
void MainWindow::on_action_Inject_into_Process_triggered()
|
||||
{
|
||||
CaptureDialog *capDialog = createCaptureDialog();
|
||||
|
||||
ui->toolWindowManager->addToolWindow(capDialog, ToolWindowManager::EmptySpace);
|
||||
CaptureDialog *capDialog = m_Ctx->captureDialog();
|
||||
|
||||
capDialog->setInjectMode(true);
|
||||
|
||||
if(ui->toolWindowManager->toolWindows().contains(capDialog))
|
||||
capDialog->activateWindow();
|
||||
else
|
||||
ui->toolWindowManager->addToolWindow(capDialog, mainToolArea());
|
||||
}
|
||||
|
||||
void MainWindow::saveLayout_triggered()
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <stdint.h>
|
||||
#include <QMainWindow>
|
||||
#include "Code/CaptureContext.h"
|
||||
#include "ToolWindowManager.h"
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
@@ -76,7 +77,7 @@ private slots:
|
||||
void on_action_Open_Log_triggered();
|
||||
void on_action_Close_Log_triggered();
|
||||
void on_action_Mesh_Output_triggered();
|
||||
void on_action_Event_Viewer_triggered();
|
||||
void on_action_Event_Browser_triggered();
|
||||
void on_action_Texture_Viewer_triggered();
|
||||
void on_action_Capture_Log_triggered();
|
||||
void on_action_Inject_into_Process_triggered();
|
||||
@@ -93,6 +94,9 @@ private:
|
||||
|
||||
QString dragFilename(const QMimeData *mimeData);
|
||||
|
||||
ToolWindowManager::AreaReference mainToolArea();
|
||||
ToolWindowManager::AreaReference leftToolArea();
|
||||
|
||||
Ui::MainWindow *ui;
|
||||
CaptureContext *m_Ctx;
|
||||
|
||||
@@ -107,8 +111,6 @@ private:
|
||||
|
||||
QString m_LastSaveCapturePath = "";
|
||||
|
||||
CaptureDialog *createCaptureDialog();
|
||||
|
||||
void SetTitle(const QString &filename);
|
||||
void SetTitle();
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
<addaction name="menu_Load_Layout"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_Python_Shell"/>
|
||||
<addaction name="action_Event_Viewer"/>
|
||||
<addaction name="action_Event_Browser"/>
|
||||
<addaction name="action_Texture_Viewer"/>
|
||||
<addaction name="action_Pipeline_State"/>
|
||||
<addaction name="action_API_Inspector"/>
|
||||
@@ -203,9 +203,9 @@
|
||||
<string>P&ython Shell</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Event_Viewer">
|
||||
<action name="action_Event_Browser">
|
||||
<property name="text">
|
||||
<string>&Event Viewer</string>
|
||||
<string>&Event Browser</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Texture_Viewer">
|
||||
|
||||
@@ -629,6 +629,7 @@ TextureViewer::TextureViewer(CaptureContext *ctx, QWidget *parent)
|
||||
|
||||
TextureViewer::~TextureViewer()
|
||||
{
|
||||
m_Ctx->windowClosed(this);
|
||||
m_Ctx->RemoveLogViewer(this);
|
||||
delete ui;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user