From 001834cbfa0015bf7126ac9e8f7139e616a47070 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Tue, 26 Apr 2022 15:07:01 -0700 Subject: [PATCH] node: implemented bypassing --- app/node/audio/pan/pan.cpp | 4 +++ app/node/audio/volume/volume.cpp | 4 +++ app/node/block/block.cpp | 3 -- app/node/block/block.h | 1 - app/node/color/colormanager/colormanager.cpp | 4 +++ .../cornerpin/cornerpindistortnode.cpp | 4 +++ app/node/distort/crop/cropdistortnode.cpp | 4 +++ app/node/distort/flip/flipdistortnode.cpp | 4 +++ .../transform/transformdistortnode.cpp | 6 ++-- app/node/filter/blur/blur.cpp | 4 +++ app/node/filter/mosaic/mosaicfilternode.cpp | 4 +++ app/node/filter/stroke/stroke.cpp | 4 +++ app/node/generator/matrix/matrix.cpp | 4 +++ app/node/generator/noise/noise.cpp | 4 +++ app/node/generator/polygon/polygon.cpp | 4 +++ app/node/generator/solid/solid.cpp | 4 +++ app/node/generator/text/textv1.cpp | 4 +++ app/node/group/group.cpp | 2 ++ app/node/input/value/valuenode.cpp | 2 ++ .../colordifferencekey/colordifferencekey.cpp | 4 +++ app/node/keying/despill/despill.cpp | 5 ++- app/node/math/math/math.cpp | 4 ++- app/node/math/merge/merge.cpp | 4 +++ app/node/math/trigonometry/trigonometry.cpp | 4 +++ app/node/node.cpp | 7 +++-- app/node/node.h | 7 ++--- app/node/output/track/track.cpp | 2 +- .../projectsettings/projectsettings.cpp | 4 +++ app/node/time/timeoffset/timeoffsetnode.cpp | 2 ++ app/node/time/timeremap/timeremap.cpp | 2 ++ app/node/traverser.cpp | 31 +++++++++++++------ .../nodeparamview/nodeparamviewitem.cpp | 5 +++ .../nodeparamviewitemtitlebar.cpp | 5 +++ .../nodeparamview/nodeparamviewitemtitlebar.h | 15 +++++++++ 34 files changed, 145 insertions(+), 26 deletions(-) diff --git a/app/node/audio/pan/pan.cpp b/app/node/audio/pan/pan.cpp index e6458bfaa..5e6d87a39 100644 --- a/app/node/audio/pan/pan.cpp +++ b/app/node/audio/pan/pan.cpp @@ -27,6 +27,8 @@ namespace olive { const QString PanNode::kSamplesInput = QStringLiteral("samples_in"); const QString PanNode::kPanningInput = QStringLiteral("panning_in"); +#define super Node + PanNode::PanNode() { AddInput(kSamplesInput, NodeValue::kSamples, InputFlags(kInputFlagNotKeyframable)); @@ -118,6 +120,8 @@ void PanNode::ProcessSamples(const NodeValueRow &values, const SampleBufferPtr i void PanNode::Retranslate() { + super::Retranslate(); + SetInputName(kSamplesInput, tr("Samples")); SetInputName(kPanningInput, tr("Pan")); } diff --git a/app/node/audio/volume/volume.cpp b/app/node/audio/volume/volume.cpp index 6617dcae3..79feef607 100644 --- a/app/node/audio/volume/volume.cpp +++ b/app/node/audio/volume/volume.cpp @@ -27,6 +27,8 @@ namespace olive { const QString VolumeNode::kSamplesInput = QStringLiteral("samples_in"); const QString VolumeNode::kVolumeInput = QStringLiteral("volume_in"); +#define super MathNodeBase + VolumeNode::VolumeNode() { AddInput(kSamplesInput, NodeValue::kSamples, InputFlags(kInputFlagNotKeyframable)); @@ -83,6 +85,8 @@ void VolumeNode::ProcessSamples(const NodeValueRow &values, const SampleBufferPt void VolumeNode::Retranslate() { + super::Retranslate(); + SetInputName(kSamplesInput, tr("Samples")); SetInputName(kVolumeInput, tr("Volume")); } diff --git a/app/node/block/block.cpp b/app/node/block/block.cpp index a726d6b0f..68ee09863 100644 --- a/app/node/block/block.cpp +++ b/app/node/block/block.cpp @@ -32,7 +32,6 @@ namespace olive { #define super Node const QString Block::kLengthInput = QStringLiteral("length_in"); -const QString Block::kEnabledInput = QStringLiteral("enabled_in"); Block::Block() : previous_(nullptr), @@ -46,8 +45,6 @@ Block::Block() : SetInputProperty(kLengthInput, QStringLiteral("viewlock"), true); IgnoreHashingFrom(kLengthInput); - AddInput(kEnabledInput, NodeValue::kBoolean, true, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); - SetFlags(kDontShowInParamView); } diff --git a/app/node/block/block.h b/app/node/block/block.h index 7f03ec805..a555cb065 100644 --- a/app/node/block/block.h +++ b/app/node/block/block.h @@ -118,7 +118,6 @@ public: virtual void InvalidateCache(const TimeRange& range, const QString& from, int element = -1, InvalidateCacheOptions options = InvalidateCacheOptions()) override; static const QString kLengthInput; - static const QString kEnabledInput; public slots: diff --git a/app/node/color/colormanager/colormanager.cpp b/app/node/color/colormanager/colormanager.cpp index 4f946a513..895a522b4 100644 --- a/app/node/color/colormanager/colormanager.cpp +++ b/app/node/color/colormanager/colormanager.cpp @@ -34,6 +34,8 @@ const QString ColorManager::kConfigFilenameIn = QStringLiteral("config"); const QString ColorManager::kDefaultColorspaceIn = QStringLiteral("default_input"); const QString ColorManager::kReferenceSpaceIn = QStringLiteral("reference_space"); +#define super Node + OCIO::ConstConfigRcPtr ColorManager::default_config_ = nullptr; ColorManager::ColorManager() : @@ -253,6 +255,8 @@ void ColorManager::GetDefaultLumaCoefs(double *rgb) const void ColorManager::Retranslate() { + super::Retranslate(); + SetInputName(kConfigFilenameIn, tr("Configuration")); SetInputName(kDefaultColorspaceIn, tr("Default Input")); SetInputName(kReferenceSpaceIn, tr("Reference Space")); diff --git a/app/node/distort/cornerpin/cornerpindistortnode.cpp b/app/node/distort/cornerpin/cornerpindistortnode.cpp index 54c5870da..febb41061 100644 --- a/app/node/distort/cornerpin/cornerpindistortnode.cpp +++ b/app/node/distort/cornerpin/cornerpindistortnode.cpp @@ -33,6 +33,8 @@ const QString CornerPinDistortNode::kBottomRightInput = QStringLiteral("bottom_r const QString CornerPinDistortNode::kBottomLeftInput = QStringLiteral("bottom_left_in"); const QString CornerPinDistortNode::kPerspectiveInput = QStringLiteral("perspective_in"); +#define super Node + CornerPinDistortNode::CornerPinDistortNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -55,6 +57,8 @@ CornerPinDistortNode::CornerPinDistortNode() void CornerPinDistortNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Texture")); SetInputName(kPerspectiveInput, tr("Perspective")); SetInputName(kTopLeftInput, tr("Top Left")); diff --git a/app/node/distort/crop/cropdistortnode.cpp b/app/node/distort/crop/cropdistortnode.cpp index e60b9afe3..18274109d 100644 --- a/app/node/distort/crop/cropdistortnode.cpp +++ b/app/node/distort/crop/cropdistortnode.cpp @@ -33,6 +33,8 @@ const QString CropDistortNode::kRightInput = QStringLiteral("right_in"); const QString CropDistortNode::kBottomInput = QStringLiteral("bottom_in"); const QString CropDistortNode::kFeatherInput = QStringLiteral("feather_in"); +#define super Node + CropDistortNode::CropDistortNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -63,6 +65,8 @@ CropDistortNode::CropDistortNode() void CropDistortNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Texture")); SetInputName(kLeftInput, tr("Left")); SetInputName(kTopInput, tr("Top")); diff --git a/app/node/distort/flip/flipdistortnode.cpp b/app/node/distort/flip/flipdistortnode.cpp index 3bc78536d..21a835e0c 100644 --- a/app/node/distort/flip/flipdistortnode.cpp +++ b/app/node/distort/flip/flipdistortnode.cpp @@ -26,6 +26,8 @@ const QString FlipDistortNode::kTextureInput = QStringLiteral("tex_in"); const QString FlipDistortNode::kHorizontalInput = QStringLiteral("horiz_in"); const QString FlipDistortNode::kVerticalInput = QStringLiteral("vert_in"); +#define super Node + FlipDistortNode::FlipDistortNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -65,6 +67,8 @@ QString FlipDistortNode::Description() const void FlipDistortNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Input")); SetInputName(kHorizontalInput, tr("Horizontal")); SetInputName(kVerticalInput, tr("Vertical")); diff --git a/app/node/distort/transform/transformdistortnode.cpp b/app/node/distort/transform/transformdistortnode.cpp index 0f2bcfac2..e60d901f2 100644 --- a/app/node/distort/transform/transformdistortnode.cpp +++ b/app/node/distort/transform/transformdistortnode.cpp @@ -32,7 +32,7 @@ const QString TransformDistortNode::kTextureInput = QStringLiteral("tex_in"); const QString TransformDistortNode::kAutoscaleInput = QStringLiteral("autoscale_in"); const QString TransformDistortNode::kInterpolationInput = QStringLiteral("interpolation_in"); -#define super Node +#define super MatrixGenerator TransformDistortNode::TransformDistortNode() { @@ -71,7 +71,7 @@ TransformDistortNode::TransformDistortNode() void TransformDistortNode::Retranslate() { - MatrixGenerator::Retranslate(); + super::Retranslate(); SetInputName(kAutoscaleInput, tr("Auto-Scale")); SetInputName(kTextureInput, tr("Texture")); @@ -153,7 +153,7 @@ void TransformDistortNode::Hash(QCryptographicHash &hash, const NodeGlobals &glo } } - Node::Hash(out, GetValueHintForInput(kTextureInput), hash, globals, video_params); + super::Hash(out, GetValueHintForInput(kTextureInput), hash, globals, video_params); } void TransformDistortNode::GizmoDragStart(const NodeValueRow &row, double x, double y, const rational &time) diff --git a/app/node/filter/blur/blur.cpp b/app/node/filter/blur/blur.cpp index aa159dcce..1865afbca 100644 --- a/app/node/filter/blur/blur.cpp +++ b/app/node/filter/blur/blur.cpp @@ -29,6 +29,8 @@ const QString BlurFilterNode::kHorizInput = QStringLiteral("horiz_in"); const QString BlurFilterNode::kVertInput = QStringLiteral("vert_in"); const QString BlurFilterNode::kRepeatEdgePixelsInput = QStringLiteral("repeat_edge_pixels_in"); +#define super Node + BlurFilterNode::BlurFilterNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -75,6 +77,8 @@ QString BlurFilterNode::Description() const void BlurFilterNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Input")); SetInputName(kMethodInput, tr("Method")); SetComboBoxStrings(kMethodInput, { tr("Box"), tr("Gaussian") }); diff --git a/app/node/filter/mosaic/mosaicfilternode.cpp b/app/node/filter/mosaic/mosaicfilternode.cpp index 0dc562218..e6f5f0545 100644 --- a/app/node/filter/mosaic/mosaicfilternode.cpp +++ b/app/node/filter/mosaic/mosaicfilternode.cpp @@ -26,6 +26,8 @@ const QString MosaicFilterNode::kTextureInput = QStringLiteral("tex_in"); const QString MosaicFilterNode::kHorizInput = QStringLiteral("horiz_in"); const QString MosaicFilterNode::kVertInput = QStringLiteral("vert_in"); +#define super Node + MosaicFilterNode::MosaicFilterNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -42,6 +44,8 @@ MosaicFilterNode::MosaicFilterNode() void MosaicFilterNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Texture")); SetInputName(kHorizInput, tr("Horizontal")); SetInputName(kVertInput, tr("Vertical")); diff --git a/app/node/filter/stroke/stroke.cpp b/app/node/filter/stroke/stroke.cpp index d6e784146..8883a9047 100644 --- a/app/node/filter/stroke/stroke.cpp +++ b/app/node/filter/stroke/stroke.cpp @@ -31,6 +31,8 @@ const QString StrokeFilterNode::kRadiusInput = QStringLiteral("radius_in"); const QString StrokeFilterNode::kOpacityInput = QStringLiteral("opacity_in"); const QString StrokeFilterNode::kInnerInput = QStringLiteral("inner_in"); +#define super Node + StrokeFilterNode::StrokeFilterNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -78,6 +80,8 @@ QString StrokeFilterNode::Description() const void StrokeFilterNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Input")); SetInputName(kColorInput, tr("Color")); SetInputName(kRadiusInput, tr("Radius")); diff --git a/app/node/generator/matrix/matrix.cpp b/app/node/generator/matrix/matrix.cpp index 461d2ca3f..bbd5c9ba6 100644 --- a/app/node/generator/matrix/matrix.cpp +++ b/app/node/generator/matrix/matrix.cpp @@ -33,6 +33,8 @@ const QString MatrixGenerator::kScaleInput = QStringLiteral("scale_in"); const QString MatrixGenerator::kUniformScaleInput = QStringLiteral("uniform_scale_in"); const QString MatrixGenerator::kAnchorInput = QStringLiteral("anchor_in"); +#define super Node + MatrixGenerator::MatrixGenerator() { AddInput(kPositionInput, NodeValue::kVec2, QVector2D(0.0, 0.0)); @@ -81,6 +83,8 @@ QString MatrixGenerator::Description() const void MatrixGenerator::Retranslate() { + super::Retranslate(); + SetInputName(kPositionInput, tr("Position")); SetInputName(kRotationInput, tr("Rotation")); SetInputName(kScaleInput, tr("Scale")); diff --git a/app/node/generator/noise/noise.cpp b/app/node/generator/noise/noise.cpp index 21eaa215e..7ed7eb2b9 100644 --- a/app/node/generator/noise/noise.cpp +++ b/app/node/generator/noise/noise.cpp @@ -25,6 +25,8 @@ namespace olive { const QString NoiseGeneratorNode::kColorInput = QStringLiteral("color_in"); const QString NoiseGeneratorNode::kStrengthInput = QStringLiteral("strength_in"); +#define super Node + NoiseGeneratorNode::NoiseGeneratorNode() { AddInput(kStrengthInput, NodeValue::kFloat, 20); @@ -59,6 +61,8 @@ QString NoiseGeneratorNode::Description() const void NoiseGeneratorNode::Retranslate() { + super::Retranslate(); + SetInputName(kStrengthInput, tr("Strength")); SetInputName(kColorInput, tr("Color")); } diff --git a/app/node/generator/polygon/polygon.cpp b/app/node/generator/polygon/polygon.cpp index bd3ae07cf..c96d5b932 100644 --- a/app/node/generator/polygon/polygon.cpp +++ b/app/node/generator/polygon/polygon.cpp @@ -30,6 +30,8 @@ namespace olive { const QString PolygonGenerator::kPointsInput = QStringLiteral("points_in"); const QString PolygonGenerator::kColorInput = QStringLiteral("color_in"); +#define super Node + PolygonGenerator::PolygonGenerator() { AddInput(kPointsInput, NodeValue::kBezier, QVector2D(0, 0), InputFlags(kInputFlagArray)); @@ -86,6 +88,8 @@ QString PolygonGenerator::Description() const void PolygonGenerator::Retranslate() { + super::Retranslate(); + SetInputName(kPointsInput, tr("Points")); SetInputName(kColorInput, tr("Color")); } diff --git a/app/node/generator/solid/solid.cpp b/app/node/generator/solid/solid.cpp index 76b2340df..0327af098 100644 --- a/app/node/generator/solid/solid.cpp +++ b/app/node/generator/solid/solid.cpp @@ -26,6 +26,8 @@ namespace olive { const QString SolidGenerator::kColorInput = QStringLiteral("color_in"); +#define super Node + SolidGenerator::SolidGenerator() { // Default to a color that isn't black @@ -59,6 +61,8 @@ QString SolidGenerator::Description() const void SolidGenerator::Retranslate() { + super::Retranslate(); + SetInputName(kColorInput, tr("Color")); } diff --git a/app/node/generator/text/textv1.cpp b/app/node/generator/text/textv1.cpp index d6c4c8588..45dd1fad7 100644 --- a/app/node/generator/text/textv1.cpp +++ b/app/node/generator/text/textv1.cpp @@ -38,6 +38,8 @@ const QString TextGeneratorV1::kVAlignInput = QStringLiteral("valign_in"); const QString TextGeneratorV1::kFontInput = QStringLiteral("font_in"); const QString TextGeneratorV1::kFontSizeInput = QStringLiteral("font_size_in"); +#define super Node + TextGeneratorV1::TextGeneratorV1() { AddInput(kTextInput, NodeValue::kText, tr("Sample Text")); @@ -75,6 +77,8 @@ QString TextGeneratorV1::Description() const void TextGeneratorV1::Retranslate() { + super::Retranslate(); + SetInputName(kTextInput, tr("Text")); SetInputName(kHtmlInput, tr("Enable HTML")); SetInputName(kFontInput, tr("Font")); diff --git a/app/node/group/group.cpp b/app/node/group/group.cpp index 793140c8a..a3089478d 100644 --- a/app/node/group/group.cpp +++ b/app/node/group/group.cpp @@ -53,6 +53,8 @@ QString NodeGroup::Description() const void NodeGroup::Retranslate() { + super::Retranslate(); + for (auto it=GetContextPositions().cbegin(); it!=GetContextPositions().cend(); it++) { it.key()->Retranslate(); } diff --git a/app/node/input/value/valuenode.cpp b/app/node/input/value/valuenode.cpp index 215e7a08c..00b3d0c5c 100644 --- a/app/node/input/value/valuenode.cpp +++ b/app/node/input/value/valuenode.cpp @@ -48,6 +48,8 @@ ValueNode::ValueNode() void ValueNode::Retranslate() { + super::Retranslate(); + SetInputName(kTypeInput, QStringLiteral("Type")); SetInputName(kValueInput, QStringLiteral("Value")); diff --git a/app/node/keying/colordifferencekey/colordifferencekey.cpp b/app/node/keying/colordifferencekey/colordifferencekey.cpp index a805ab550..5770d0f55 100644 --- a/app/node/keying/colordifferencekey/colordifferencekey.cpp +++ b/app/node/keying/colordifferencekey/colordifferencekey.cpp @@ -25,6 +25,8 @@ const QString ColorDifferenceKeyNode::kShadowsInput = QStringLiteral("shadows_in const QString ColorDifferenceKeyNode::kHighlightsInput = QStringLiteral("highlights_in"); const QString ColorDifferenceKeyNode::kMaskOnlyInput = QStringLiteral("mask_only_in"); +#define super Node + ColorDifferenceKeyNode::ColorDifferenceKeyNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -74,6 +76,8 @@ QString ColorDifferenceKeyNode::Description() const void ColorDifferenceKeyNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Input")); SetInputName(kGarbageMatteInput, tr("Garbage Matte")); SetInputName(kCoreMatteInput, tr("Core Matte")); diff --git a/app/node/keying/despill/despill.cpp b/app/node/keying/despill/despill.cpp index 09a8f2f45..344b1f869 100644 --- a/app/node/keying/despill/despill.cpp +++ b/app/node/keying/despill/despill.cpp @@ -24,6 +24,8 @@ const QString DespillNode::kColorInput = QStringLiteral("color_in"); const QString DespillNode::kMethodInput = QStringLiteral("method_in"); const QString DespillNode::kPreserveLuminanceInput = QStringLiteral("preserve_luminance_input"); +#define super Node + DespillNode::DespillNode() { AddInput(kTextureInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -65,12 +67,13 @@ QString DespillNode::Description() const void DespillNode::Retranslate() { + super::Retranslate(); + SetInputName(kTextureInput, tr("Input")); SetInputName(kColorInput, tr("Key Color")); SetComboBoxStrings(kColorInput, {tr("Green"), tr("Blue")}); - SetInputName(kMethodInput, tr("Method")); SetComboBoxStrings(kMethodInput, {tr("Average"), tr("Double Red Average"), tr("Double Average"), tr("Limit")}); diff --git a/app/node/math/math/math.cpp b/app/node/math/math/math.cpp index d601c2a8d..932a963d1 100644 --- a/app/node/math/math/math.cpp +++ b/app/node/math/math/math.cpp @@ -27,6 +27,8 @@ const QString MathNode::kParamAIn = QStringLiteral("param_a_in"); const QString MathNode::kParamBIn = QStringLiteral("param_b_in"); const QString MathNode::kParamCIn = QStringLiteral("param_c_in"); +#define super MathNodeBase + MathNode::MathNode() { AddInput(kMethodIn, NodeValue::kCombo, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); @@ -67,7 +69,7 @@ QString MathNode::Description() const void MathNode::Retranslate() { - Node::Retranslate(); + super::Retranslate(); SetInputName(kMethodIn, tr("Method")); SetInputName(kParamAIn, tr("Value")); diff --git a/app/node/math/merge/merge.cpp b/app/node/math/merge/merge.cpp index 5b1582c84..5940358aa 100644 --- a/app/node/math/merge/merge.cpp +++ b/app/node/math/merge/merge.cpp @@ -27,6 +27,8 @@ namespace olive { const QString MergeNode::kBaseIn = QStringLiteral("base_in"); const QString MergeNode::kBlendIn = QStringLiteral("blend_in"); +#define super Node + MergeNode::MergeNode() { AddInput(kBaseIn, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); @@ -63,6 +65,8 @@ QString MergeNode::Description() const void MergeNode::Retranslate() { + super::Retranslate(); + SetInputName(kBaseIn, tr("Base")); SetInputName(kBlendIn, tr("Blend")); diff --git a/app/node/math/trigonometry/trigonometry.cpp b/app/node/math/trigonometry/trigonometry.cpp index 3899cc6e4..5c6e16663 100644 --- a/app/node/math/trigonometry/trigonometry.cpp +++ b/app/node/math/trigonometry/trigonometry.cpp @@ -25,6 +25,8 @@ namespace olive { const QString TrigonometryNode::kMethodIn = QStringLiteral("method_in"); const QString TrigonometryNode::kXIn = QStringLiteral("x_in"); +#define super Node + TrigonometryNode::TrigonometryNode() { AddInput(kMethodIn, NodeValue::kCombo, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); @@ -59,6 +61,8 @@ QString TrigonometryNode::Description() const void TrigonometryNode::Retranslate() { + super::Retranslate(); + QStringList strings = {tr("Sine"), tr("Cosine"), tr("Tangent"), diff --git a/app/node/node.cpp b/app/node/node.cpp index b0a7ec8aa..12b92d665 100644 --- a/app/node/node.cpp +++ b/app/node/node.cpp @@ -42,6 +42,8 @@ namespace olive { #define super QObject +const QString Node::kEnabledInput = QStringLiteral("enabled_in"); + Node::Node() : can_be_deleted_(true), override_color_(-1), @@ -49,9 +51,9 @@ Node::Node() : operation_stack_(0), cache_result_(false), flags_(kNone), - effect_element_(-1), - bypass_(false) + effect_element_(-1) { + AddInput(kEnabledInput, NodeValue::kBoolean, true); } Node::~Node() @@ -105,6 +107,7 @@ QString Node::Description() const void Node::Retranslate() { + SetInputName(kEnabledInput, tr("Enabled")); } QIcon Node::icon() const diff --git a/app/node/node.h b/app/node/node.h index 66b5497fe..106448c1c 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -896,9 +896,6 @@ public: cache_result_ = e; } - bool IsBypassed() const { return bypass_; } - void SetBypassed(bool e) { bypass_ = e; } - class ArrayRemoveCommand : public UndoCommand { public: @@ -959,6 +956,8 @@ public: static void SetValueAtTime(const NodeInput &input, const rational &time, const QVariant &value, int track, MultiUndoCommand *command, bool insert_on_all_tracks_if_no_key); + static const QString kEnabledInput; + protected: virtual void Hash(QCryptographicHash& hash, const NodeGlobals &globals, const VideoParams& video_params) const; @@ -1361,8 +1360,6 @@ private: QString effect_input_; int effect_element_; - bool bypass_; - private slots: /** * @brief Slot when a keyframe's time changes to keep the keyframes correctly sorted by time diff --git a/app/node/output/track/track.cpp b/app/node/output/track/track.cpp index 6325285d0..f4244804b 100644 --- a/app/node/output/track/track.cpp +++ b/app/node/output/track/track.cpp @@ -277,7 +277,7 @@ void Track::InputValueChangedEvent(const QString &input, int element) void Track::Retranslate() { - Node::Retranslate(); + super::Retranslate(); SetInputName(kBlockInput, tr("Blocks")); SetInputName(kMutedInput, tr("Muted")); diff --git a/app/node/project/projectsettings/projectsettings.cpp b/app/node/project/projectsettings/projectsettings.cpp index 2ed08b05b..59b3bedc0 100644 --- a/app/node/project/projectsettings/projectsettings.cpp +++ b/app/node/project/projectsettings/projectsettings.cpp @@ -25,6 +25,8 @@ namespace olive { const QString ProjectSettingsNode::kCacheSetting = QStringLiteral("cache_setting"); const QString ProjectSettingsNode::kCachePath = QStringLiteral("cache_path"); +#define super Node + ProjectSettingsNode::ProjectSettingsNode() { AddInput(kCacheSetting, NodeValue::kCombo, 0, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); @@ -36,6 +38,8 @@ ProjectSettingsNode::ProjectSettingsNode() void ProjectSettingsNode::Retranslate() { + super::Retranslate(); + SetInputName(kCacheSetting, tr("Disk Cache Location")); SetInputName(kCachePath, tr("Disk Cache Path")); SetComboBoxStrings(kCacheSetting, {tr("Use Default Location"), tr("Store Alongside Project"), tr("Use Custom Location")}); diff --git a/app/node/time/timeoffset/timeoffsetnode.cpp b/app/node/time/timeoffset/timeoffsetnode.cpp index d137847ee..0ef179393 100644 --- a/app/node/time/timeoffset/timeoffsetnode.cpp +++ b/app/node/time/timeoffset/timeoffsetnode.cpp @@ -41,6 +41,8 @@ TimeOffsetNode::TimeOffsetNode() void TimeOffsetNode::Retranslate() { + super::Retranslate(); + SetInputName(kTimeInput, QStringLiteral("Time")); SetInputName(kInputInput, QStringLiteral("Input")); } diff --git a/app/node/time/timeremap/timeremap.cpp b/app/node/time/timeremap/timeremap.cpp index 1f52a27c4..ff2b1ff77 100644 --- a/app/node/time/timeremap/timeremap.cpp +++ b/app/node/time/timeremap/timeremap.cpp @@ -87,6 +87,8 @@ TimeRange TimeRemapNode::OutputTimeAdjustment(const QString &input, int element, void TimeRemapNode::Retranslate() { + super::Retranslate(); + SetInputName(kTimeInput, QStringLiteral("Time")); SetInputName(kInputInput, QStringLiteral("Input")); } diff --git a/app/node/traverser.cpp b/app/node/traverser.cpp index 754995a5d..62dca9c79 100644 --- a/app/node/traverser.cpp +++ b/app/node/traverser.cpp @@ -246,20 +246,33 @@ NodeValueTable NodeTraverser::GenerateTable(const Node *n, const Node::ValueHint // Generate row for node NodeValueDatabase database = GenerateDatabase(n, range); - NodeValueRow row = GenerateRow(&database, n, range); - //qDebug() << "FIXME: Implement pre-process of row"; + // Check for bypass + bool is_enabled; + if (!database[Node::kEnabledInput].Has(NodeValue::kBoolean)) { + // Fallback if we couldn't find a bool value + is_enabled = true; + } else { + is_enabled = database[Node::kEnabledInput].Get(NodeValue::kBoolean).toBool(); + } - // Generate output table - NodeValueTable table = database.Merge(); + if (is_enabled) { + NodeValueRow row = GenerateRow(&database, n, range); + //qDebug() << "FIXME: Implement pre-process of row"; - // By this point, the node should have all the inputs it needs to render correctly - n->Value(row, GenerateGlobals(video_params_, range), &table); + // Generate output table + NodeValueTable table = database.Merge(); - // Post-process table - PostProcessTable(n, hint, range, table); + // By this point, the node should have all the inputs it needs to render correctly + n->Value(row, GenerateGlobals(video_params_, range), &table); - return table; + // Post-process table + PostProcessTable(n, hint, range, table); + + return table; + } else { + return database.Merge(); + } } NodeValueTable NodeTraverser::GenerateBlockTable(const Track *track, const TimeRange &range) diff --git a/app/widget/nodeparamview/nodeparamviewitem.cpp b/app/widget/nodeparamview/nodeparamviewitem.cpp index 7fedb2fea..9a61e0718 100644 --- a/app/widget/nodeparamview/nodeparamviewitem.cpp +++ b/app/widget/nodeparamview/nodeparamviewitem.cpp @@ -63,6 +63,11 @@ NodeParamViewItem::NodeParamViewItem(Node *node, NodeParamViewCheckBoxBehavior c setBackgroundRole(QPalette::Window); + // Connect title bar enabled checkbox + //title_bar()->SetEnabledCheckBoxVisible(true); + //title_bar()->SetEnabledCheckBoxChecked(node_->IsEnabled()); + //connect(title_bar(), &NodeParamViewItemTitleBar::EnabledCheckBoxClicked, node_, &Node::SetEnabled); + Retranslate(); } diff --git a/app/widget/nodeparamview/nodeparamviewitemtitlebar.cpp b/app/widget/nodeparamview/nodeparamviewitemtitlebar.cpp index 6d61bd1ba..1d79ff4d9 100644 --- a/app/widget/nodeparamview/nodeparamviewitemtitlebar.cpp +++ b/app/widget/nodeparamview/nodeparamviewitemtitlebar.cpp @@ -56,6 +56,11 @@ NodeParamViewItemTitleBar::NodeParamViewItemTitleBar(QWidget *parent) : pin_btn_->setVisible(false); layout->addWidget(pin_btn_); connect(pin_btn_, &QPushButton::clicked, this, &NodeParamViewItemTitleBar::PinToggled); + + enabled_checkbox_ = new QCheckBox(); + enabled_checkbox_->setVisible(false); + layout->addWidget(enabled_checkbox_); + connect(enabled_checkbox_, &QCheckBox::clicked, this, &NodeParamViewItemTitleBar::EnabledCheckBoxClicked); } void NodeParamViewItemTitleBar::SetExpanded(bool e) diff --git a/app/widget/nodeparamview/nodeparamviewitemtitlebar.h b/app/widget/nodeparamview/nodeparamviewitemtitlebar.h index 7ddaac1aa..9bea7f06f 100644 --- a/app/widget/nodeparamview/nodeparamviewitemtitlebar.h +++ b/app/widget/nodeparamview/nodeparamviewitemtitlebar.h @@ -21,6 +21,7 @@ #ifndef NODEPARAMVIEWITEMTITLEBAR_H #define NODEPARAMVIEWITEMTITLEBAR_H +#include #include #include @@ -59,6 +60,16 @@ public slots: add_fx_btn_->setVisible(e); } + void SetEnabledCheckBoxVisible(bool e) + { + enabled_checkbox_->setVisible(e); + } + + void SetEnabledCheckBoxChecked(bool e) + { + enabled_checkbox_->setChecked(e); + } + signals: void ExpandedStateChanged(bool e); @@ -66,6 +77,8 @@ signals: void AddEffectButtonClicked(); + void EnabledCheckBoxClicked(bool e); + protected: virtual void paintEvent(QPaintEvent *event) override; @@ -82,6 +95,8 @@ private: QPushButton *add_fx_btn_; + QCheckBox *enabled_checkbox_; + }; }