From 2c4347e9a6ad36e10715e393c70eed54411648de Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Sun, 19 Feb 2023 21:16:05 -0800 Subject: [PATCH 1/3] node: merge various metadata functions into one --- .../footagerelink/footagerelinkdialog.cpp | 4 +- app/node/node.cpp | 10 +- app/node/node.h | 16 ++-- app/node/output/viewer/viewer.cpp | 91 ++++++++++--------- app/node/output/viewer/viewer.h | 3 +- app/node/project/folder/folder.cpp | 8 +- app/node/project/folder/folder.h | 2 +- app/node/project/footage/footage.cpp | 77 ++++++++-------- app/node/project/footage/footage.h | 5 +- app/node/project/sequence/sequence.cpp | 8 +- app/node/project/sequence/sequence.h | 2 +- .../projectexplorer/projectviewmodel.cpp | 8 +- 12 files changed, 127 insertions(+), 107 deletions(-) diff --git a/app/dialog/footagerelink/footagerelinkdialog.cpp b/app/dialog/footagerelink/footagerelinkdialog.cpp index 066c163e6..a608a049c 100644 --- a/app/dialog/footagerelink/footagerelinkdialog.cpp +++ b/app/dialog/footagerelink/footagerelinkdialog.cpp @@ -64,7 +64,7 @@ FootageRelinkDialog::FootageRelinkDialog(const QVector &footage, QWid connect(item_browse_btn, &QPushButton::clicked, this, &FootageRelinkDialog::BrowseForFootage); item_actions_layout->addWidget(item_browse_btn); - item->setIcon(0, f->icon()); + item->setIcon(0, f->data(Node::ICON).value()); item->setText(0, f->GetLabel()); item->setText(1, f->filename()); @@ -89,7 +89,7 @@ void FootageRelinkDialog::UpdateFootageItem(int index) { Footage* f = footage_.at(index); QTreeWidgetItem* item = table_->topLevelItem(index); - item->setIcon(0, f->icon()); + item->setIcon(0, f->data(Node::ICON).value()); item->setText(1, f->filename()); } diff --git a/app/node/node.cpp b/app/node/node.cpp index 89d3fe145..94af73f63 100644 --- a/app/node/node.cpp +++ b/app/node/node.cpp @@ -103,10 +103,14 @@ void Node::Retranslate() SetInputName(kEnabledInput, tr("Enabled")); } -QIcon Node::icon() const +QVariant Node::data(const DataType &d) const { - // Just a meaningless default icon to be used where necessary - return icon::New; + if (d == ICON) { + // Just a meaningless default icon to be used where necessary + return icon::New; + } + + return QVariant(); } bool Node::SetNodePositionInContext(Node *node, const QPointF &pos) diff --git a/app/node/node.h b/app/node/node.h index 05ec9f725..01be83327 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -194,14 +194,16 @@ public: */ virtual void Retranslate(); - virtual QIcon icon() const; + enum DataType + { + ICON, + DURATION, + CREATED_TIME, + MODIFIED_TIME, + FREQUENCY_RATE + }; - virtual QString duration() const {return QString();} - - virtual qint64 creation_time() const {return 0;} - virtual qint64 mod_time() const {return 0;} - - virtual QString rate() const {return QString();} + virtual QVariant data(const DataType &d) const; const QVector& inputs() const { diff --git a/app/node/output/viewer/viewer.cpp b/app/node/output/viewer/viewer.cpp index 5f2437889..f93583a66 100644 --- a/app/node/output/viewer/viewer.cpp +++ b/app/node/output/viewer/viewer.cpp @@ -87,56 +87,61 @@ QString ViewerOutput::Description() const return tr("Interface between a Viewer panel and the node system."); } -QString ViewerOutput::duration() const +QVariant ViewerOutput::data(const DataType &d) const { - rational using_timebase; - Timecode::Display using_display = Core::instance()->GetTimecodeDisplay(); + switch (d) { + case DURATION: + { + rational using_timebase; + Timecode::Display using_display = Core::instance()->GetTimecodeDisplay(); - // Get first enabled streams - VideoParams video = GetFirstEnabledVideoStream(); - AudioParams audio = GetFirstEnabledAudioStream(); - SubtitleParams sub = GetFirstEnabledSubtitleStream(); + // Get first enabled streams + VideoParams video = GetFirstEnabledVideoStream(); + AudioParams audio = GetFirstEnabledAudioStream(); + SubtitleParams sub = GetFirstEnabledSubtitleStream(); - if (video.is_valid() && video.video_type() != VideoParams::kVideoTypeStill) { - // Prioritize video - using_timebase = video.frame_rate_as_time_base(); - } else if (audio.is_valid()) { - // Use audio as a backup - // If we're showing in a timecode, we prefer showing audio in seconds instead - if (using_display == Timecode::kTimecodeDropFrame - || using_display == Timecode::kTimecodeNonDropFrame) { - using_display = Timecode::kTimecodeSeconds; + if (video.is_valid() && video.video_type() != VideoParams::kVideoTypeStill) { + // Prioritize video + using_timebase = video.frame_rate_as_time_base(); + } else if (audio.is_valid()) { + // Use audio as a backup + // If we're showing in a timecode, we prefer showing audio in seconds instead + if (using_display == Timecode::kTimecodeDropFrame + || using_display == Timecode::kTimecodeNonDropFrame) { + using_display = Timecode::kTimecodeSeconds; + } + + using_timebase = audio.sample_rate_as_time_base(); + } else if (sub.is_valid()) { + using_timebase = OLIVE_CONFIG("DefaultSequenceFrameRate").value(); } - using_timebase = audio.sample_rate_as_time_base(); - } else if (sub.is_valid()) { - using_timebase = OLIVE_CONFIG("DefaultSequenceFrameRate").value(); + if (!using_timebase.isNull()) { + // Return time transformed to timecode + return QString::fromStdString(Timecode::time_to_timecode(GetLength(), using_timebase, using_display)); + } + break; + } + case FREQUENCY_RATE: + { + VideoParams video_stream; + + if (HasEnabledVideoStreams() + && (video_stream = GetFirstEnabledVideoStream()).video_type() != VideoParams::kVideoTypeStill) { + // This is a video editor, prioritize video streams + return tr("%1 FPS").arg(video_stream.frame_rate().toDouble()); + } else if (HasEnabledAudioStreams()) { + // No video streams, return audio + AudioParams audio_stream = GetFirstEnabledAudioStream(); + return tr("%1 Hz").arg(audio_stream.sample_rate()); + } + break; + } + default: + break; } - if (using_timebase.isNull()) { - // No timebase, return null - return QString(); - } else { - // Return time transformed to timecode - return QString::fromStdString(Timecode::time_to_timecode(GetLength(), using_timebase, using_display)); - } -} - -QString ViewerOutput::rate() const -{ - VideoParams video_stream; - - if (HasEnabledVideoStreams() - && (video_stream = GetFirstEnabledVideoStream()).video_type() != VideoParams::kVideoTypeStill) { - // This is a video editor, prioritize video streams - return tr("%1 FPS").arg(video_stream.frame_rate().toDouble()); - } else if (HasEnabledAudioStreams()) { - // No video streams, return audio - AudioParams audio_stream = GetFirstEnabledAudioStream(); - return tr("%1 Hz").arg(audio_stream.sample_rate()); - } - - return QString(); + return super::data(d); } bool ViewerOutput::HasEnabledVideoStreams() const diff --git a/app/node/output/viewer/viewer.h b/app/node/output/viewer/viewer.h index 70d40dd2a..053d76e67 100644 --- a/app/node/output/viewer/viewer.h +++ b/app/node/output/viewer/viewer.h @@ -53,8 +53,7 @@ public: virtual QVector Category() const override; virtual QString Description() const override; - virtual QString duration() const override; - virtual QString rate() const override; + virtual QVariant data(const DataType &d) const override; void set_default_parameters(); diff --git a/app/node/project/folder/folder.cpp b/app/node/project/folder/folder.cpp index 9df90a03f..3a3918aba 100644 --- a/app/node/project/folder/folder.cpp +++ b/app/node/project/folder/folder.cpp @@ -37,9 +37,13 @@ Folder::Folder() AddInput(kChildInput, NodeValue::kNone, InputFlags(kInputFlagArray | kInputFlagNotKeyframable)); } -QIcon Folder::icon() const +QVariant Folder::data(const DataType &d) const { - return icon::Folder; + if (d == ICON) { + return icon::Folder; + } + + return super::data(d); } void Folder::Retranslate() diff --git a/app/node/project/folder/folder.h b/app/node/project/folder/folder.h index 2afb0ac1c..ceb224e06 100644 --- a/app/node/project/folder/folder.h +++ b/app/node/project/folder/folder.h @@ -59,7 +59,7 @@ public: return tr("Organize several items into a single collection."); } - virtual QIcon icon() const override; + virtual QVariant data(const DataType &d) const override; virtual void Retranslate() override; diff --git a/app/node/project/footage/footage.cpp b/app/node/project/footage/footage.cpp index 4a316c751..630964939 100644 --- a/app/node/project/footage/footage.cpp +++ b/app/node/project/footage/footage.cpp @@ -203,26 +203,6 @@ const QString &Footage::decoder() const return decoder_; } -QIcon Footage::icon() const -{ - if (valid_ && GetTotalStreamCount()) { - // Prioritize video > audio > image - VideoParams s = GetFirstEnabledVideoStream(); - - if (s.is_valid() && s.video_type() != VideoParams::kVideoTypeStill) { - return icon::Video; - } else if (HasEnabledAudioStreams()) { - return icon::Audio; - } else if (s.is_valid() && s.video_type() == VideoParams::kVideoTypeStill) { - return icon::Image; - } else if (HasEnabledSubtitleStreams()) { - return icon::Subtitles; - } - } - - return icon::Error; -} - QString Footage::DescribeVideoStream(const VideoParams ¶ms) { if (params.video_type() == VideoParams::kVideoTypeStill) { @@ -375,26 +355,51 @@ void Footage::LoadFinishedEvent() } } -qint64 Footage::creation_time() const +QVariant Footage::data(const DataType &d) const { - QFileInfo info(filename()); + switch (d) { + case CREATED_TIME: + { + QFileInfo info(filename()); - if (info.exists()) { - return QtUtils::GetCreationDate(info).toSecsSinceEpoch(); + if (info.exists()) { + return QtUtils::GetCreationDate(info).toSecsSinceEpoch(); + } + break; + } + case MODIFIED_TIME: + { + QFileInfo info(filename()); + + if (info.exists()) { + return info.lastModified().toSecsSinceEpoch(); + } + break; + } + case ICON: + { + if (valid_ && GetTotalStreamCount()) { + // Prioritize video > audio > image + VideoParams s = GetFirstEnabledVideoStream(); + + if (s.is_valid() && s.video_type() != VideoParams::kVideoTypeStill) { + return icon::Video; + } else if (HasEnabledAudioStreams()) { + return icon::Audio; + } else if (s.is_valid() && s.video_type() == VideoParams::kVideoTypeStill) { + return icon::Image; + } else if (HasEnabledSubtitleStreams()) { + return icon::Subtitles; + } + } + + return icon::Error; + } + default: + break; } - return 0; -} - -qint64 Footage::mod_time() const -{ - QFileInfo info(filename()); - - if (info.exists()) { - return info.lastModified().toSecsSinceEpoch(); - } - - return 0; + return super::data(d); } void Footage::UpdateTooltip() diff --git a/app/node/project/footage/footage.h b/app/node/project/footage/footage.h index 794e5062d..516dda563 100644 --- a/app/node/project/footage/footage.h +++ b/app/node/project/footage/footage.h @@ -153,8 +153,6 @@ public: */ const QString& decoder() const; - virtual QIcon icon() const override; - virtual bool IsItem() const override { return true; @@ -176,8 +174,7 @@ public: virtual void LoadFinishedEvent() override; - virtual qint64 creation_time() const override; - virtual qint64 mod_time() const override; + virtual QVariant data(const DataType &d) const override; virtual int GetTotalStreamCount() const override { return total_stream_count_; } diff --git a/app/node/project/sequence/sequence.cpp b/app/node/project/sequence/sequence.cpp index df0a970fd..54b19e0cd 100644 --- a/app/node/project/sequence/sequence.cpp +++ b/app/node/project/sequence/sequence.cpp @@ -71,9 +71,13 @@ void Sequence::add_default_nodes(MultiUndoCommand* command) } } -QIcon Sequence::icon() const +QVariant Sequence::data(const DataType &d) const { - return icon::Sequence; + if (d == ICON) { + return icon::Sequence; + } + + return super::data(d); } QVector Sequence::GetUnlockedTracks() const diff --git a/app/node/project/sequence/sequence.h b/app/node/project/sequence/sequence.h index 4f8b62d04..60cbf4579 100644 --- a/app/node/project/sequence/sequence.h +++ b/app/node/project/sequence/sequence.h @@ -59,7 +59,7 @@ public: void add_default_nodes(MultiUndoCommand *command = nullptr); - virtual QIcon icon() const override; + virtual QVariant data(const DataType &d) const override; const QVector &GetTracks() const { diff --git a/app/widget/projectexplorer/projectviewmodel.cpp b/app/widget/projectexplorer/projectviewmodel.cpp index c7e558249..550d3f972 100644 --- a/app/widget/projectexplorer/projectviewmodel.cpp +++ b/app/widget/projectexplorer/projectviewmodel.cpp @@ -140,13 +140,13 @@ QVariant ProjectViewModel::data(const QModelIndex &index, int role) const case kName: return internal_item->GetLabel(); case kDuration: - return internal_item->duration(); + return internal_item->data(Node::DURATION); case kRate: - return internal_item->rate(); + return internal_item->data(Node::FREQUENCY_RATE); case kLastModified: case kCreatedTime: { - qint64 using_time = (column_type == kLastModified) ? internal_item->mod_time() : internal_item->creation_time(); + qint64 using_time = (column_type == kLastModified) ? internal_item->data(Node::MODIFIED_TIME).toLongLong() : internal_item->data(Node::CREATED_TIME).toLongLong(); if (using_time == 0) { // 0 is the null value, return nothing @@ -178,7 +178,7 @@ QVariant ProjectViewModel::data(const QModelIndex &index, int role) const case Qt::DecorationRole: // If this is the first column, return the Item's icon if (column_type == kName) { - return internal_item->icon(); + return internal_item->data(Node::ICON); } break; case Qt::ToolTipRole: From 71e8665fbffe5edad0fbe081e2a67a37704cb33a Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Sun, 19 Feb 2023 21:30:49 -0800 Subject: [PATCH 2/3] move item setting to a node flag --- app/node/audio/pan/pan.cpp | 2 +- app/node/audio/volume/volume.cpp | 2 +- app/node/block/block.cpp | 2 +- app/node/block/subtitle/subtitle.cpp | 2 +- app/node/block/transition/transition.cpp | 2 +- app/node/color/ociobase/ociobase.cpp | 2 +- .../distort/cornerpin/cornerpindistortnode.cpp | 2 +- app/node/distort/crop/cropdistortnode.cpp | 2 +- app/node/distort/flip/flipdistortnode.cpp | 2 +- app/node/distort/ripple/rippledistortnode.cpp | 2 +- app/node/distort/swirl/swirldistortnode.cpp | 2 +- app/node/distort/tile/tiledistortnode.cpp | 2 +- .../distort/transform/transformdistortnode.cpp | 2 +- app/node/distort/wave/wavedistortnode.cpp | 2 +- app/node/effect/opacity/opacityeffect.cpp | 2 +- app/node/filter/blur/blur.cpp | 2 +- app/node/filter/dropshadow/dropshadowfilter.cpp | 2 +- app/node/filter/mosaic/mosaicfilternode.cpp | 2 +- app/node/filter/stroke/stroke.cpp | 2 +- app/node/generator/noise/noise.cpp | 2 +- app/node/generator/shape/generatorwithmerge.cpp | 2 +- app/node/generator/text/textv1.cpp | 2 +- app/node/generator/text/textv2.cpp | 2 +- app/node/group/group.cpp | 2 +- .../colordifferencekey/colordifferencekey.cpp | 2 +- app/node/keying/despill/despill.cpp | 2 +- app/node/math/merge/merge.cpp | 2 +- app/node/node.h | 16 +++++++++------- app/node/output/viewer/viewer.cpp | 2 +- app/node/project/folder/folder.cpp | 2 ++ app/node/project/folder/folder.h | 5 ----- app/node/project/footage/footage.cpp | 2 ++ app/node/project/footage/footage.h | 5 ----- app/node/project/sequence/sequence.cpp | 2 ++ app/node/project/sequence/sequence.h | 5 ----- 35 files changed, 43 insertions(+), 50 deletions(-) diff --git a/app/node/audio/pan/pan.cpp b/app/node/audio/pan/pan.cpp index 434480dd9..5f4ecebf1 100644 --- a/app/node/audio/pan/pan.cpp +++ b/app/node/audio/pan/pan.cpp @@ -38,7 +38,7 @@ PanNode::PanNode() SetInputProperty(kPanningInput, QStringLiteral("max"), 1.0); SetInputProperty(kPanningInput, QStringLiteral("view"), FloatSlider::kPercentage); - SetFlags(kAudioEffect); + SetFlag(kAudioEffect); SetEffectInput(kSamplesInput); } diff --git a/app/node/audio/volume/volume.cpp b/app/node/audio/volume/volume.cpp index 7fe0a888a..229295d98 100644 --- a/app/node/audio/volume/volume.cpp +++ b/app/node/audio/volume/volume.cpp @@ -37,7 +37,7 @@ VolumeNode::VolumeNode() SetInputProperty(kVolumeInput, QStringLiteral("min"), 0.0); SetInputProperty(kVolumeInput, QStringLiteral("view"), FloatSlider::kDecibel); - SetFlags(kAudioEffect); + SetFlag(kAudioEffect); SetEffectInput(kSamplesInput); } diff --git a/app/node/block/block.cpp b/app/node/block/block.cpp index fb030e5b5..9e150c50e 100644 --- a/app/node/block/block.cpp +++ b/app/node/block/block.cpp @@ -46,7 +46,7 @@ Block::Block() : SetInputFlags(kEnabledInput, InputFlags(GetInputFlags(kEnabledInput) | kInputFlagNotConnectable | kInputFlagNotKeyframable)); - SetFlags(kDontShowInParamView); + SetFlag(kDontShowInParamView); } QVector Block::Category() const diff --git a/app/node/block/subtitle/subtitle.cpp b/app/node/block/subtitle/subtitle.cpp index 25bccb6f4..61c02f045 100644 --- a/app/node/block/subtitle/subtitle.cpp +++ b/app/node/block/subtitle/subtitle.cpp @@ -38,7 +38,7 @@ SubtitleBlock::SubtitleBlock() SetInputFlags(kMaintainAudioPitchInput, InputFlags(GetInputFlags(kMaintainAudioPitchInput) | kInputFlagHidden)); // Undo block flag that hides in param view - SetFlags(GetFlags() & ~kDontShowInParamView); + SetFlag(kDontShowInParamView, false); } QString SubtitleBlock::Name() const diff --git a/app/node/block/transition/transition.cpp b/app/node/block/transition/transition.cpp index 327f3fc1c..9209a1400 100644 --- a/app/node/block/transition/transition.cpp +++ b/app/node/block/transition/transition.cpp @@ -47,7 +47,7 @@ TransitionBlock::TransitionBlock() : SetInputProperty(kCenterInput, QStringLiteral("view"), RationalSlider::kTime); SetInputProperty(kCenterInput, QStringLiteral("viewlock"), true); - SetFlags(GetFlags() & ~kDontShowInParamView); + SetFlag(kDontShowInParamView, false); } void TransitionBlock::Retranslate() diff --git a/app/node/color/ociobase/ociobase.cpp b/app/node/color/ociobase/ociobase.cpp index 249cf49a3..f749922ca 100644 --- a/app/node/color/ociobase/ociobase.cpp +++ b/app/node/color/ociobase/ociobase.cpp @@ -38,7 +38,7 @@ OCIOBaseNode::OCIOBaseNode() : connect(this, &Node::AddedToGraph, this, &OCIOBaseNode::AddedToGraph); connect(this, &Node::RemovedFromGraph, this, &OCIOBaseNode::RemovedFromGraph); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); } void OCIOBaseNode::AddedToGraph(Project *p) diff --git a/app/node/distort/cornerpin/cornerpindistortnode.cpp b/app/node/distort/cornerpin/cornerpindistortnode.cpp index 2bb8a4a90..3f37e3994 100644 --- a/app/node/distort/cornerpin/cornerpindistortnode.cpp +++ b/app/node/distort/cornerpin/cornerpindistortnode.cpp @@ -51,7 +51,7 @@ CornerPinDistortNode::CornerPinDistortNode() gizmo_resize_handle_[2] = AddDraggableGizmo({NodeKeyframeTrackReference(NodeInput(this, kBottomRightInput), 0), NodeKeyframeTrackReference(NodeInput(this, kBottomRightInput), 1)}); gizmo_resize_handle_[3] = AddDraggableGizmo({NodeKeyframeTrackReference(NodeInput(this, kBottomLeftInput), 0), NodeKeyframeTrackReference(NodeInput(this, kBottomLeftInput), 1)}); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/distort/crop/cropdistortnode.cpp b/app/node/distort/crop/cropdistortnode.cpp index 1d2dfd4e3..da278f880 100644 --- a/app/node/distort/crop/cropdistortnode.cpp +++ b/app/node/distort/crop/cropdistortnode.cpp @@ -59,7 +59,7 @@ CropDistortNode::CropDistortNode() point_gizmo_[kGizmoScaleCenterLeft] = AddDraggableGizmo({kLeftInput}); point_gizmo_[kGizmoScaleCenterRight] = AddDraggableGizmo({kRightInput}); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/distort/flip/flipdistortnode.cpp b/app/node/distort/flip/flipdistortnode.cpp index 6a1083099..1d8e36034 100644 --- a/app/node/distort/flip/flipdistortnode.cpp +++ b/app/node/distort/flip/flipdistortnode.cpp @@ -36,7 +36,7 @@ FlipDistortNode::FlipDistortNode() AddInput(kVerticalInput, NodeValue::kBoolean, false); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/distort/ripple/rippledistortnode.cpp b/app/node/distort/ripple/rippledistortnode.cpp index 2e137ff3c..2e8a1f1b4 100644 --- a/app/node/distort/ripple/rippledistortnode.cpp +++ b/app/node/distort/ripple/rippledistortnode.cpp @@ -44,7 +44,7 @@ RippleDistortNode::RippleDistortNode() AddInput(kPositionInput, NodeValue::kVec2, QVector2D(0, 0)); AddInput(kStretchInput, NodeValue::kBoolean, false); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); gizmo_ = AddDraggableGizmo({ diff --git a/app/node/distort/swirl/swirldistortnode.cpp b/app/node/distort/swirl/swirldistortnode.cpp index ddab58a60..eb91bc27a 100644 --- a/app/node/distort/swirl/swirldistortnode.cpp +++ b/app/node/distort/swirl/swirldistortnode.cpp @@ -41,7 +41,7 @@ SwirlDistortNode::SwirlDistortNode() AddInput(kPositionInput, NodeValue::kVec2, QVector2D(0, 0)); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); gizmo_ = AddDraggableGizmo({ diff --git a/app/node/distort/tile/tiledistortnode.cpp b/app/node/distort/tile/tiledistortnode.cpp index ec13a1ee4..864428a7a 100644 --- a/app/node/distort/tile/tiledistortnode.cpp +++ b/app/node/distort/tile/tiledistortnode.cpp @@ -48,7 +48,7 @@ TileDistortNode::TileDistortNode() AddInput(kMirrorXInput, NodeValue::kBoolean, false); AddInput(kMirrorYInput, NodeValue::kBoolean, false); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); gizmo_ = AddDraggableGizmo({ diff --git a/app/node/distort/transform/transformdistortnode.cpp b/app/node/distort/transform/transformdistortnode.cpp index bc2769a8f..01d9e1c45 100644 --- a/app/node/distort/transform/transformdistortnode.cpp +++ b/app/node/distort/transform/transformdistortnode.cpp @@ -64,7 +64,7 @@ TransformDistortNode::TransformDistortNode() point_gizmo_[i]->SetDragValueBehavior(PointGizmo::kAbsolute); } - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/distort/wave/wavedistortnode.cpp b/app/node/distort/wave/wavedistortnode.cpp index d3f948585..88171d6f2 100644 --- a/app/node/distort/wave/wavedistortnode.cpp +++ b/app/node/distort/wave/wavedistortnode.cpp @@ -40,7 +40,7 @@ WaveDistortNode::WaveDistortNode() AddInput(kVerticalInput, NodeValue::kCombo, false); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/effect/opacity/opacityeffect.cpp b/app/node/effect/opacity/opacityeffect.cpp index ee58fb632..4b7e7ce67 100644 --- a/app/node/effect/opacity/opacityeffect.cpp +++ b/app/node/effect/opacity/opacityeffect.cpp @@ -25,7 +25,7 @@ OpacityEffect::OpacityEffect() SetInputProperty(kValueInput, QStringLiteral("min"), 0.0); SetInputProperty(kValueInput, QStringLiteral("max"), 1.0); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/filter/blur/blur.cpp b/app/node/filter/blur/blur.cpp index 3955608b7..3498cddec 100644 --- a/app/node/filter/blur/blur.cpp +++ b/app/node/filter/blur/blur.cpp @@ -66,7 +66,7 @@ BlurFilterNode::BlurFilterNode() AddInput(kRepeatEdgePixelsInput, NodeValue::kBoolean, true); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); radial_center_gizmo_ = AddDraggableGizmo(); diff --git a/app/node/filter/dropshadow/dropshadowfilter.cpp b/app/node/filter/dropshadow/dropshadowfilter.cpp index f8c60cdd5..fead73b09 100644 --- a/app/node/filter/dropshadow/dropshadowfilter.cpp +++ b/app/node/filter/dropshadow/dropshadowfilter.cpp @@ -54,7 +54,7 @@ DropShadowFilter::DropShadowFilter() AddInput(kFastInput, NodeValue::kBoolean, false); SetEffectInput(kTextureInput); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); } void DropShadowFilter::Retranslate() diff --git a/app/node/filter/mosaic/mosaicfilternode.cpp b/app/node/filter/mosaic/mosaicfilternode.cpp index 9cb5f9af7..63966320e 100644 --- a/app/node/filter/mosaic/mosaicfilternode.cpp +++ b/app/node/filter/mosaic/mosaicfilternode.cpp @@ -38,7 +38,7 @@ MosaicFilterNode::MosaicFilterNode() AddInput(kVertInput, NodeValue::kFloat, 18.0); SetInputProperty(kVertInput, QStringLiteral("min"), 1.0); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/filter/stroke/stroke.cpp b/app/node/filter/stroke/stroke.cpp index 858f26102..3f49cd4c4 100644 --- a/app/node/filter/stroke/stroke.cpp +++ b/app/node/filter/stroke/stroke.cpp @@ -48,7 +48,7 @@ StrokeFilterNode::StrokeFilterNode() AddInput(kInnerInput, NodeValue::kBoolean, false); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/generator/noise/noise.cpp b/app/node/generator/noise/noise.cpp index 94072db1d..8d9f70c24 100644 --- a/app/node/generator/noise/noise.cpp +++ b/app/node/generator/noise/noise.cpp @@ -41,7 +41,7 @@ NoiseGeneratorNode::NoiseGeneratorNode() AddInput(kColorInput, NodeValue::kBoolean, false); SetEffectInput(kBaseIn); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); } QString NoiseGeneratorNode::Name() const diff --git a/app/node/generator/shape/generatorwithmerge.cpp b/app/node/generator/shape/generatorwithmerge.cpp index 93f8bcde3..6832e3e6e 100644 --- a/app/node/generator/shape/generatorwithmerge.cpp +++ b/app/node/generator/shape/generatorwithmerge.cpp @@ -32,7 +32,7 @@ GeneratorWithMerge::GeneratorWithMerge() { AddInput(kBaseInput, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); SetEffectInput(kBaseInput); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); } void GeneratorWithMerge::Retranslate() diff --git a/app/node/generator/text/textv1.cpp b/app/node/generator/text/textv1.cpp index 68c3a5e7d..ae08389c6 100644 --- a/app/node/generator/text/textv1.cpp +++ b/app/node/generator/text/textv1.cpp @@ -54,7 +54,7 @@ TextGeneratorV1::TextGeneratorV1() AddInput(kFontSizeInput, NodeValue::kFloat, 72.0f); - SetFlags(kDontShowInCreateMenu); + SetFlag(kDontShowInCreateMenu); } QString TextGeneratorV1::Name() const diff --git a/app/node/generator/text/textv2.cpp b/app/node/generator/text/textv2.cpp index f4165afa1..3472bb601 100644 --- a/app/node/generator/text/textv2.cpp +++ b/app/node/generator/text/textv2.cpp @@ -56,7 +56,7 @@ TextGeneratorV2::TextGeneratorV2() SetStandardValue(kColorInput, QVariant::fromValue(Color(1.0f, 1.0f, 1.0))); SetStandardValue(kSizeInput, QVector2D(400, 300)); - SetFlags(kDontShowInCreateMenu); + SetFlag(kDontShowInCreateMenu); } QString TextGeneratorV2::Name() const diff --git a/app/node/group/group.cpp b/app/node/group/group.cpp index 79ca24eba..9ca495e1f 100644 --- a/app/node/group/group.cpp +++ b/app/node/group/group.cpp @@ -29,7 +29,7 @@ namespace olive { NodeGroup::NodeGroup() : output_passthrough_(nullptr) { - SetFlags(kDontShowInCreateMenu); + SetFlag(kDontShowInCreateMenu); } QString NodeGroup::Name() const diff --git a/app/node/keying/colordifferencekey/colordifferencekey.cpp b/app/node/keying/colordifferencekey/colordifferencekey.cpp index 8627efdda..40ff98ccf 100644 --- a/app/node/keying/colordifferencekey/colordifferencekey.cpp +++ b/app/node/keying/colordifferencekey/colordifferencekey.cpp @@ -47,7 +47,7 @@ ColorDifferenceKeyNode::ColorDifferenceKeyNode() AddInput(kMaskOnlyInput, NodeValue::kBoolean, false); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/keying/despill/despill.cpp b/app/node/keying/despill/despill.cpp index 18d1fbad7..267e3d3c4 100644 --- a/app/node/keying/despill/despill.cpp +++ b/app/node/keying/despill/despill.cpp @@ -36,7 +36,7 @@ DespillNode::DespillNode() AddInput(kPreserveLuminanceInput, NodeValue::kBoolean, false); - SetFlags(kVideoEffect); + SetFlag(kVideoEffect); SetEffectInput(kTextureInput); } diff --git a/app/node/math/merge/merge.cpp b/app/node/math/merge/merge.cpp index 2285a6c32..e95e0ff99 100644 --- a/app/node/math/merge/merge.cpp +++ b/app/node/math/merge/merge.cpp @@ -35,7 +35,7 @@ MergeNode::MergeNode() AddInput(kBlendIn, NodeValue::kTexture, InputFlags(kInputFlagNotKeyframable)); - SetFlags(kDontShowInParamView); + SetFlag(kDontShowInParamView); } QString MergeNode::Name() const diff --git a/app/node/node.h b/app/node/node.h index 01be83327..ae9007916 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -100,7 +100,8 @@ public: kDontShowInParamView = 0x1, kVideoEffect = 0x2, kAudioEffect = 0x4, - kDontShowInCreateMenu = 0x8 + kDontShowInCreateMenu = 0x8, + kIsItem = 0x10 }; struct ContextPair { @@ -184,10 +185,7 @@ public: return folder_; } - virtual bool IsItem() const - { - return false; - } + bool IsItem() const { return flags_ & kIsItem; } /** * @brief Function called to retranslate parameter names (should be overridden in derivatives) @@ -1198,9 +1196,13 @@ protected: tooltip_ = s; } - void SetFlags(const uint64_t &f) + void SetFlag(Flag f, bool on = true) { - flags_ = f; + if (on) { + flags_ |= f; + } else { + flags_ &= ~f; + } } template diff --git a/app/node/output/viewer/viewer.cpp b/app/node/output/viewer/viewer.cpp index f93583a66..dd7cc8dfb 100644 --- a/app/node/output/viewer/viewer.cpp +++ b/app/node/output/viewer/viewer.cpp @@ -61,7 +61,7 @@ ViewerOutput::ViewerOutput(bool create_buffer_inputs, bool create_default_stream set_default_parameters(); } - SetFlags(kDontShowInParamView); + SetFlag(kDontShowInParamView); workarea_ = new TimelineWorkArea(this); markers_ = new TimelineMarkerList(this); diff --git a/app/node/project/folder/folder.cpp b/app/node/project/folder/folder.cpp index 3a3918aba..45f1dacf4 100644 --- a/app/node/project/folder/folder.cpp +++ b/app/node/project/folder/folder.cpp @@ -34,6 +34,8 @@ const QString Folder::kChildInput = QStringLiteral("child_in"); Folder::Folder() { + SetFlag(kIsItem); + AddInput(kChildInput, NodeValue::kNone, InputFlags(kInputFlagArray | kInputFlagNotKeyframable)); } diff --git a/app/node/project/folder/folder.h b/app/node/project/folder/folder.h index ceb224e06..7ed504027 100644 --- a/app/node/project/folder/folder.h +++ b/app/node/project/folder/folder.h @@ -86,11 +86,6 @@ public: return item_children_; } - virtual bool IsItem() const override - { - return true; - } - int index_of_child(Node* item) const { return item_children_.indexOf(item); diff --git a/app/node/project/footage/footage.cpp b/app/node/project/footage/footage.cpp index 630964939..87b962459 100644 --- a/app/node/project/footage/footage.cpp +++ b/app/node/project/footage/footage.cpp @@ -46,6 +46,8 @@ Footage::Footage(const QString &filename) : cancelled_(nullptr), total_stream_count_(0) { + SetFlag(kIsItem); + PrependInput(kFilenameInput, NodeValue::kFile, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); Clear(); diff --git a/app/node/project/footage/footage.h b/app/node/project/footage/footage.h index 516dda563..20c24bab1 100644 --- a/app/node/project/footage/footage.h +++ b/app/node/project/footage/footage.h @@ -153,11 +153,6 @@ public: */ const QString& decoder() const; - virtual bool IsItem() const override - { - return true; - } - static QString DescribeVideoStream(const VideoParams& params); static QString DescribeAudioStream(const AudioParams& params); static QString DescribeSubtitleStream(const SubtitleParams& params); diff --git a/app/node/project/sequence/sequence.cpp b/app/node/project/sequence/sequence.cpp index 54b19e0cd..76d7d969f 100644 --- a/app/node/project/sequence/sequence.cpp +++ b/app/node/project/sequence/sequence.cpp @@ -34,6 +34,8 @@ const QString Sequence::kTrackInputFormat = QStringLiteral("track_in_%1"); Sequence::Sequence() { + SetFlag(kIsItem); + // Create TrackList instances track_lists_.resize(Track::kCount); diff --git a/app/node/project/sequence/sequence.h b/app/node/project/sequence/sequence.h index 60cbf4579..42b10702a 100644 --- a/app/node/project/sequence/sequence.h +++ b/app/node/project/sequence/sequence.h @@ -87,11 +87,6 @@ public: static const QString kTrackInputFormat; - virtual bool IsItem() const override - { - return true; - } - protected: virtual void InputConnectedEvent(const QString &input, int element, Node *output) override; From c5da1339b979b9594b5e28887b7d69714d56629f Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Sun, 19 Feb 2023 21:31:06 -0800 Subject: [PATCH 3/3] importtask: removed unnecessary line --- app/task/project/import/import.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/task/project/import/import.cpp b/app/task/project/import/import.cpp index 91572757b..dc049469a 100644 --- a/app/task/project/import/import.cpp +++ b/app/task/project/import/import.cpp @@ -157,9 +157,6 @@ void ProjectImportTask::ValidateImageSequence(Footage *footage, QFileInfoList& i QString previous_img_fn = Decoder::TransformImageSequenceFileName(footage->filename(), ind - 1); QString next_img_fn = Decoder::TransformImageSequenceFileName(footage->filename(), ind + 1); - // See if the same decoder can retrieve surrounding files - DecoderPtr decoder = Decoder::CreateFromID(footage->decoder()); - Footage* previous_file = new Footage(previous_img_fn); Footage* next_file = new Footage(next_img_fn);