Add push button support for OFX plugins

This commit adds support for push buttons in OFX plugins by:

- Adding `kPushButton` to `NodeValue` enum
- Implementing `pushButtonClicked` slot in `PluginNode`
- Creating `NodeParamButton` widget for UI representation
- Updating `paraminstance.h` to handle push button instances
- Modifying `nodeparamviewwidgetbridge.cpp` to connect push button signals
This commit is contained in:
2025-11-10 13:57:04 +08:00
parent 8a7b6cf869
commit 5aaa49c515
10 changed files with 188 additions and 66 deletions
+61 -27
View File
@@ -21,20 +21,21 @@
#ifndef PARAM_INSTANCE_H
#define PARAM_INSTANCE_H
#include "OlivePluginInstance.h"
#include "ofxhParam.h"
#include "node/plugins/Plugin.h"
namespace olive
{
namespace plugin
{
class PushbuttonInstance : public OFX::Host::Param::PushbuttonInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor *_descriptor;
public:
PushbuttonInstance(OlivePluginInstance *effect, const std::string &name,
PushbuttonInstance(PluginNode *effect, const std::string &name,
OFX::Host::Param::Descriptor &descriptor)
: OFX::Host::Param::PushbuttonInstance( descriptor)
: OFX::Host::Param::PushbuttonInstance(descriptor)
, node(effect)
{
_descriptor = &descriptor;
};
@@ -42,22 +43,58 @@ public:
class IntegerInstance : public OFX::Host::Param::IntegerInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* _node;
OFX::Host::Param::Descriptor& _descriptor;
QString id;
public:
IntegerInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(int&);
OfxStatus get(OfxTime time, int&);
OfxStatus set(int);
OfxStatus set(OfxTime time, int);
IntegerInstance(PluginNode *node, OFX::Host::Param::Descriptor &descriptor)
: _node(node), _descriptor(descriptor),
OFX::Host::Param::IntegerInstance(_descriptor){}
OfxStatus get(int &a)
{
if (id.isEmpty()) {
return kOfxStatErrBadHandle;
}
QVariant variant=_node->GetStandardValue(id);
if (variant.typeId()==QVariant::Int) {
a=variant.toInt();
return kOfxStatOK;
}
a=0;
return kOfxStatErrValue;
}
OfxStatus get(OfxTime time, int &data)
{
if (id.isEmpty()) {
return kOfxStatErrBadHandle;
}
QVariant variant=_node->GetValueAtTime(id, rational::fromDouble(time));
if (variant.typeId()==QVariant::Int) {
data=variant.toInt();
return kOfxStatOK;
}
data=0;
return kOfxStatErrValue;
}
OfxStatus set(int data)
{
_node->SetStandardValue(_descriptor.getName().c_str(), data);
id=_descriptor.getName().c_str();
return kOfxStatOK;
}
OfxStatus set(OfxTime time, int)
{
_node->SetValueAtTime()
}
};
class DoubleInstance : public OFX::Host::Param::DoubleInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor& _descriptor;
public:
DoubleInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
DoubleInstance(PluginNode* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(double&);
OfxStatus get(OfxTime time, double&);
OfxStatus set(double);
@@ -68,10 +105,10 @@ public:
class BooleanInstance : public OFX::Host::Param::BooleanInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor& _descriptor;
public:
BooleanInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
BooleanInstance(PluginNode* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(bool&);
OfxStatus get(OfxTime time, bool&);
OfxStatus set(bool);
@@ -80,10 +117,10 @@ public:
class ChoiceInstance : public OFX::Host::Param::ChoiceInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor& _descriptor;
public:
ChoiceInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
ChoiceInstance(PluginNode* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(int&);
OfxStatus get(OfxTime time, int&);
OfxStatus set(int);
@@ -92,10 +129,10 @@ public:
class RGBAInstance : public OFX::Host::Param::RGBAInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor& _descriptor;
public:
RGBAInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
RGBAInstance(PluginNode* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(double&,double&,double&,double&);
OfxStatus get(OfxTime time, double&,double&,double&,double&);
OfxStatus set(double,double,double,double);
@@ -105,10 +142,10 @@ public:
class RGBInstance : public OFX::Host::Param::RGBInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor& _descriptor;
public:
RGBInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
RGBInstance(PluginNode* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(double&,double&,double&);
OfxStatus get(OfxTime time, double&,double&,double&);
OfxStatus set(double,double,double);
@@ -117,10 +154,10 @@ public:
class Double2DInstance : public OFX::Host::Param::Double2DInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor& _descriptor;
public:
Double2DInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
Double2DInstance(PluginNode* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(double&,double&);
OfxStatus get(OfxTime time,double&,double&);
OfxStatus set(double,double);
@@ -129,10 +166,10 @@ public:
class Integer2DInstance : public OFX::Host::Param::Integer2DInstance {
protected:
OlivePluginInstance* _effect;
PluginNode* node;
OFX::Host::Param::Descriptor& _descriptor;
public:
Integer2DInstance(OlivePluginInstance* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
Integer2DInstance(PluginNode* effect, const std::string& name, OFX::Host::Param::Descriptor& descriptor);
OfxStatus get(int&,int&);
OfxStatus get(OfxTime time,int&,int&);
OfxStatus set(int,int);
@@ -144,6 +181,3 @@ public:
#endif // HOST_DEMO_PARAM_INSTANCE_H
#endif //PARAMINSTANCE_H