Mark edited resources with an (Edited) suffix on their names

This commit is contained in:
baldurk
2020-04-03 12:45:43 +01:00
parent ecd8dd0ade
commit 590785c470
6 changed files with 95 additions and 20 deletions
+34 -6
View File
@@ -989,11 +989,13 @@ void CaptureContext::LoadCaptureThreaded(const QString &captureFile, const Repla
void CaptureContext::CacheResources()
{
m_CustomNameCachedID++;
m_Resources.clear();
std::sort(m_ResourceList.begin(), m_ResourceList.end(),
[this](const ResourceDescription &a, const ResourceDescription &b) {
return GetResourceName(&a) < GetResourceName(&b);
return GetResourceNameUnsuffixed(&a) < GetResourceNameUnsuffixed(&b);
});
for(ResourceDescription &res : m_ResourceList)
@@ -1453,6 +1455,24 @@ void CaptureContext::SetRemoteHost(int hostIdx)
m_MainWindow->setRemoteHost(hostIdx);
}
void CaptureContext::RegisterReplacement(ResourceId id)
{
m_ReplacedResources.push_back(id);
CacheResources();
RefreshUIStatus({}, true, true);
}
void CaptureContext::UnregisterReplacement(ResourceId id)
{
m_ReplacedResources.removeOne(id);
CacheResources();
RefreshUIStatus({}, true, true);
}
void CaptureContext::RefreshUIStatus(const rdcarray<ICaptureViewer *> &exclude,
bool updateSelectedEvent, bool updateEvent)
{
@@ -1754,7 +1774,7 @@ bool CaptureContext::OpenRGPProfile(const rdcstr &filename)
return true;
}
rdcstr CaptureContext::GetResourceName(ResourceId id)
rdcstr CaptureContext::GetResourceNameUnsuffixed(ResourceId id)
{
if(id == ResourceId())
return tr("No Resource");
@@ -1762,14 +1782,14 @@ rdcstr CaptureContext::GetResourceName(ResourceId id)
ResourceDescription *desc = GetResource(id);
if(desc)
return GetResourceName(desc);
return GetResourceNameUnsuffixed(desc);
uint64_t num;
memcpy(&num, &id, sizeof(num));
return tr("Unknown Resource %1").arg(num);
}
rdcstr CaptureContext::GetResourceName(const ResourceDescription *desc)
rdcstr CaptureContext::GetResourceNameUnsuffixed(const ResourceDescription *desc)
{
if(m_CustomNames.contains(desc->resourceId))
return m_CustomNames[desc->resourceId];
@@ -1777,6 +1797,16 @@ rdcstr CaptureContext::GetResourceName(const ResourceDescription *desc)
return desc->name;
}
rdcstr CaptureContext::GetResourceName(ResourceId id)
{
rdcstr ret = GetResourceNameUnsuffixed(id);
if(m_ReplacedResources.contains(id))
ret += tr(" (Edited)");
return ret;
}
bool CaptureContext::IsAutogeneratedName(ResourceId id)
{
if(id == ResourceId())
@@ -1810,8 +1840,6 @@ void CaptureContext::SetResourceCustomName(ResourceId id, const rdcstr &name)
m_CustomNames[id] = name;
}
m_CustomNameCachedID++;
m_CaptureMods |= CaptureModifications::Renames;
m_MainWindow->captureModified();
+6 -1
View File
@@ -114,6 +114,8 @@ public:
uint32_t eventId, bool force = false) override;
void SetRemoteHost(int hostIndex);
void RefreshStatus() override { SetEventID({}, m_SelectedEventID, m_EventID, true); }
void RegisterReplacement(ResourceId id) override;
void UnregisterReplacement(ResourceId id) override;
void RefreshUIStatus(const rdcarray<ICaptureViewer *> &exclude, bool updateSelectedEvent,
bool updateEvent);
@@ -159,6 +161,7 @@ public:
ResourceDescription *GetResource(ResourceId id) override { return m_Resources[id]; }
const rdcarray<ResourceDescription> &GetResources() override { return m_ResourceList; }
rdcstr GetResourceName(ResourceId id) override;
rdcstr GetResourceNameUnsuffixed(ResourceId id) override;
bool IsAutogeneratedName(ResourceId id) override;
bool HasResourceCustomName(ResourceId id) override;
void SetResourceCustomName(ResourceId id, const rdcstr &name) override;
@@ -299,7 +302,7 @@ private:
void LoadNotes(const QString &data);
void CacheResources();
rdcstr GetResourceName(const ResourceDescription *desc);
rdcstr GetResourceNameUnsuffixed(const ResourceDescription *desc);
float m_LoadProgress = 0.0f;
float m_PostloadProgress = 0.0f;
@@ -359,6 +362,8 @@ private:
QMap<ResourceId, QString> m_CustomNames;
int m_CustomNameCachedID = 1;
QVector<ResourceId> m_ReplacedResources;
const SDFile *m_StructuredFile = NULL;
SDFile m_DummySDFile;
+28
View File
@@ -1162,6 +1162,26 @@ been made.
)");
virtual void RefreshStatus() = 0;
DOCUMENT(R"(Register that a resource has replaced, so that the UI can be updated to reflect the
change.
This should be called at the same time as :meth:`ReplayController.ReplaceResource`.
:param ResourceId id: The id of the resource that has been replaced.
)");
virtual void RegisterReplacement(ResourceId id) = 0;
DOCUMENT(R"(Register that a replacement has been removed, so that the UI can be updated to reflect
the change.
This should be called at the same time as :meth:`ReplayController.RemoveReplacement`.
See :meth:`ReplaceResource`.
:param ResourceId id: The id of the original resource that was previously replaced.
)");
virtual void UnregisterReplacement(ResourceId id) = 0;
DOCUMENT(R"(Register a new instance of :class:`CaptureViewer` to receive capture event notifications.
:param CaptureViewer viewer: The viewer to register.
@@ -1344,6 +1364,14 @@ the resource type.
)");
virtual rdcstr GetResourceName(ResourceId id) = 0;
DOCUMENT(R"(Returns the same name as :meth:`GetResourceName` but without any added suffix, e.g. to
indicate the resource's status such as (Edited).
:return: The unsuffixed resource name.
:rtype: ``str``
)");
virtual rdcstr GetResourceNameUnsuffixed(ResourceId id) = 0;
DOCUMENT(R"(Determines whether the name for the given resource has been customised at all, either
during capture time or with :meth:`SetResourceCustomName`.
@@ -829,14 +829,17 @@ IShaderViewer *PipelineStateViewer::EditShader(ResourceId id, ShaderStage shader
if(to == ResourceId())
{
r->RemoveReplacement(from);
if(ptr)
GUIInvoke::call(ptr, [ctx]() { ctx->RefreshStatus(); });
// this GUIInvoke call always needs to go through even if the viewer has been closed.
GUIInvoke::call(ctx->GetMainWindow()->Widget(),
[ctx, from]() { ctx->UnregisterReplacement(from); });
}
else
{
r->ReplaceResource(from, to);
if(ptr)
GUIInvoke::call(ptr, [ctx]() { ctx->RefreshStatus(); });
GUIInvoke::call(ctx->GetMainWindow()->Widget(),
[ctx, from]() { ctx->RegisterReplacement(from); });
}
});
};
@@ -846,7 +849,7 @@ IShaderViewer *PipelineStateViewer::EditShader(ResourceId id, ShaderStage shader
// was a place to control replaced resources/shaders).
ctx->Replay().AsyncInvoke([ctx, id](IReplayController *r) {
r->RemoveReplacement(id);
GUIInvoke::call(ctx->GetMainWindow()->Widget(), [ctx] { ctx->RefreshStatus(); });
GUIInvoke::call(ctx->GetMainWindow()->Widget(), [ctx, id] { ctx->UnregisterReplacement(id); });
});
};
+12
View File
@@ -95,6 +95,10 @@ struct CaptureContextInvoker : ICaptureContext
return m_Ctx.GetResources();
}
virtual rdcstr GetResourceName(ResourceId id) override { return m_Ctx.GetResourceName(id); }
virtual rdcstr GetResourceNameUnsuffixed(ResourceId id) override
{
return m_Ctx.GetResourceNameUnsuffixed(id);
}
virtual bool IsAutogeneratedName(ResourceId id) override { return m_Ctx.IsAutogeneratedName(id); }
virtual bool HasResourceCustomName(ResourceId id) override
{
@@ -202,6 +206,14 @@ struct CaptureContextInvoker : ICaptureContext
InvokeVoidFunction(&ICaptureContext::SetEventID, exclude, selectedEventID, eventId, force);
}
virtual void RefreshStatus() override { InvokeVoidFunction(&ICaptureContext::RefreshStatus); }
virtual void RegisterReplacement(ResourceId id) override
{
InvokeVoidFunction(&ICaptureContext::RegisterReplacement, id);
}
virtual void UnregisterReplacement(ResourceId id) override
{
InvokeVoidFunction(&ICaptureContext::UnregisterReplacement, id);
}
virtual void AddCaptureViewer(ICaptureViewer *viewer) override
{
InvokeVoidFunction(&ICaptureContext::AddCaptureViewer, viewer);
+7 -8
View File
@@ -387,6 +387,7 @@ void ResourceInspector::OnEventChanged(uint32_t eventId)
{
m_ResourceCacheID = m_Ctx.ResourceNameCacheID();
m_ResourceModel->reset();
SetResourceNameDisplay(m_Ctx.GetResourceName(m_Resource));
}
}
@@ -394,9 +395,7 @@ void ResourceInspector::on_renameResource_clicked()
{
if(!ui->resourceNameEdit->isVisible())
{
ui->resourceNameEdit->setText(ui->resourceName->text()
.replace(QFormatStr(" (%1)").arg(ToQStr(m_Resource)), QString())
.trimmed());
ui->resourceNameEdit->setText(m_Ctx.GetResourceNameUnsuffixed(m_Resource).trimmed());
ui->resourceName->hide();
ui->resourceNameEdit->show();
ui->resourceNameEdit->setFocus();
@@ -406,14 +405,14 @@ void ResourceInspector::on_renameResource_clicked()
QString name = ui->resourceNameEdit->text();
// apply the edit
SetResourceNameDisplay(name);
m_Ctx.SetResourceCustomName(m_Resource, name);
SetResourceNameDisplay(m_Ctx.GetResourceName(m_Resource));
ui->resourceNameEdit->hide();
ui->resourceName->show();
ui->resetName->show();
m_Ctx.SetResourceCustomName(m_Resource, name);
}
}
@@ -434,12 +433,12 @@ void ResourceInspector::on_resourceNameEdit_keyPress(QKeyEvent *event)
void ResourceInspector::on_resetName_clicked()
{
m_Ctx.SetResourceCustomName(m_Resource, QString());
SetResourceNameDisplay(m_Ctx.GetResourceName(m_Resource));
ui->resetName->hide();
m_Ctx.SetResourceCustomName(m_Resource, QString());
// force a refresh to pick up the new name
ResourceId id = m_Resource;
m_Resource = ResourceId();