[vlmc-devel] Link clips by Commands::Clip::Link
yikei lu
luyikei.qmltu at gmail.com
Fri Jul 29 15:39:11 CEST 2016
Sorry for my copy-and-paste thing :) The Q_OBJECT actually exists in
all other Commands::Generic, so I'll remove them :)
2016-07-29 22:27 GMT+09:00 Hugo Beauzée-Luyssen <hugo at beauzee.fr>:
> On 07/23/2016 12:06 PM, Yikai Lu wrote:
>>
>> vlmc | branch: master | Yikai Lu <luyikei.qmltu at gmail.com> | Sat Jul 23
>> 18:42:08 2016 +0900| [f861c6d56e22dcf2b0607dd96954f12c916ffc28] | committer:
>> Yikai Lu
>>
>> Link clips by Commands::Clip::Link
>>
>>>
>>> https://code.videolan.org/videolan/vlmc/commit/f861c6d56e22dcf2b0607dd96954f12c916ffc28
>>
>> ---
>>
>> src/Commands/Commands.cpp | 36 ++++++++++++++++++++++++++++++++++++
>> src/Commands/Commands.h | 15 +++++++++++++++
>> src/Gui/timeline/Track.qml | 1 +
>> src/Media/Clip.cpp | 34 +++++++++++++++++++++++++++++++++-
>> src/Media/Clip.h | 9 +++++++++
>> src/Workflow/MainWorkflow.cpp | 15 +++++++++++++++
>> src/Workflow/MainWorkflow.h | 4 ++++
>> 7 files changed, 113 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/Commands/Commands.cpp b/src/Commands/Commands.cpp
>> index 5ca1302..1e78c5c 100644
>> --- a/src/Commands/Commands.cpp
>> +++ b/src/Commands/Commands.cpp
>> @@ -271,6 +271,42 @@ Commands::Clip::Split::internalUndo()
>> m_toSplit->setEnd( m_oldEnd );
>> }
>>
>> +Commands::Clip::Link::Link( std::shared_ptr<::Clip> const& clipA,
>> std::shared_ptr<::Clip> const& clipB )
>> + : m_clipA( clipA )
>> + , m_clipB( clipB )
>> +{
>> + connect( m_clipA.get(), &::Clip::destroyed, this, &Link::invalidate
>> );
>> + connect( m_clipB.get(), &::Clip::destroyed, this, &Link::invalidate
>> );
>> + retranslate();
>> +}
>> +
>> +Commands::Clip::Link::~Link()
>> +{
>> +
>> +}
>
>
> Empty destructors instead of ommited/defaulted constructors makes me a sad
> panda :(
>
>
>> +
>> +void
>> +Commands::Clip::Link::retranslate()
>> +{
>> + setText( tr( "Linking clip" ) );
>> +}
>> +
>> +void
>> +Commands::Clip::Link::internalRedo()
>> +{
>> + m_clipA->setLinkedClipUuid( m_clipB->uuid() );
>> + m_clipB->setLinkedClipUuid( m_clipA->uuid() );
>> + m_clipA->setLinked( true );
>> + m_clipB->setLinked( true );
>> +}
>> +
>> +void
>> +Commands::Clip::Link::internalUndo()
>> +{
>> + m_clipA->setLinked( false );
>> + m_clipB->setLinked( false );
>> +}
>> +
>> Commands::Effect::Add::Add( std::shared_ptr<EffectHelper> const& helper,
>> Backend::IInput* target )
>> : m_helper( helper )
>> , m_target( target )
>> diff --git a/src/Commands/Commands.h b/src/Commands/Commands.h
>> index 2387945..97bf65e 100644
>> --- a/src/Commands/Commands.h
>> +++ b/src/Commands/Commands.h
>> @@ -177,6 +177,21 @@ namespace Commands
>> qint64 m_newClipBegin;
>> qint64 m_oldEnd;
>> };
>> +
>> + class Link : public Generic
>> + {
>> + Q_OBJECT
>
>
> No need for Q_OBJECT here unless I'm missing something
>
>
>> +
>> + public:
>> + Link( std::shared_ptr<::Clip> const& clipA,
>> std::shared_ptr<::Clip> const& clipB );
>> + ~Link();
>> + virtual void internalRedo();
>> + virtual void internalUndo();
>> + virtual void retranslate();
>> + private:
>> + std::shared_ptr<::Clip> m_clipA;
>> + std::shared_ptr<::Clip> m_clipB;
>> + };
>> }
>> namespace Effect
>> {
>> diff --git a/src/Gui/timeline/Track.qml b/src/Gui/timeline/Track.qml
>> index 2ef9010..7489b27 100644
>> --- a/src/Gui/timeline/Track.qml
>> +++ b/src/Gui/timeline/Track.qml
>> @@ -184,6 +184,7 @@ Item {
>> if ( audioClipUuid && videoClipUuid ) {
>> findClipItem( audioClipUuid ).linkedClip =
>> videoClipUuid;
>> findClipItem( videoClipUuid ).linkedClip =
>> audioClipUuid;
>> + workflow.linkClips( audioClipUuid,
>> videoClipUuid );
>> }
>> currentUuid = "";
>> aClipInfo = null;
>> diff --git a/src/Media/Clip.cpp b/src/Media/Clip.cpp
>> index 2c3f70e..91b27bc 100644
>> --- a/src/Media/Clip.cpp
>> +++ b/src/Media/Clip.cpp
>> @@ -38,7 +38,8 @@ Clip::Clip( Media *media, qint64 begin /*= 0*/, qint64
>> end /*= Backend::IInput::
>> Workflow::Helper( uuid ),
>> m_media( media ),
>> m_input( std::move( m_media->input()->cut( begin, end ) ) ),
>> - m_parent( media->baseClip() )
>> + m_parent( media->baseClip() ),
>> + m_isLinked( false )
>> {
>> m_childs = new MediaContainer( this );
>> m_rootClip = media->baseClip();
>> @@ -186,6 +187,30 @@ Clip::setBoundaries( qint64 begin, qint64 end )
>> m_input->setBoundaries( begin, end );
>> }
>>
>> +void
>> +Clip::setLinkedClipUuid( const QUuid& uuid )
>> +{
>> + m_linkedClipUuid = uuid;
>> +}
>> +
>> +const QUuid&
>> +Clip::linkedClipUuid() const
>> +{
>> + return m_linkedClipUuid;
>> +}
>> +
>> +void
>> +Clip::setLinked( bool isLinked )
>> +{
>> + m_isLinked = isLinked;
>> +}
>> +
>> +bool
>> +Clip::isLinked() const
>> +{
>> + return m_isLinked;
>> +}
>> +
>> Clip*
>> Clip::rootClip()
>> {
>> @@ -267,6 +292,13 @@ Clip::toVariant() const
>> h.insert( "begin", begin() );
>> h.insert( "end", end() );
>> }
>> + if ( isLinked() == true )
>> + {
>> + h.insert( "linkedClip", m_linkedClipUuid );
>> + h.insert( "linked", true );
>> + }
>> + else
>> + h.insert( "linked", false );
>> h.insert( "filters", EffectHelper::toVariant( m_input.get() ) );
>> return QVariant( h );
>>
>> diff --git a/src/Media/Clip.h b/src/Media/Clip.h
>> index 1bb4664..dab3506 100644
>> --- a/src/Media/Clip.h
>> +++ b/src/Media/Clip.h
>> @@ -108,6 +108,12 @@ class Clip : public Workflow::Helper
>> virtual qint64 length() const override;
>> virtual void setBoundaries( qint64 begin, qint64 end )
>> override;
>>
>> + void setLinkedClipUuid( const QUuid& uuid );
>> + const QUuid& linkedClipUuid() const;
>> +
>> + void setLinked( bool isLinked );
>> + bool isLinked() const;
>> +
>> const QStringList &metaTags() const;
>> void setMetaTags( const QStringList &tags );
>> bool matchMetaTag( const QString &tag ) const;
>> @@ -156,6 +162,9 @@ class Clip : public Workflow::Helper
>>
>> Clip* m_parent;
>>
>> + QUuid m_linkedClipUuid;
>> + bool m_isLinked;
>> +
>> Formats m_formats;
>>
>> private slots:
>> diff --git a/src/Workflow/MainWorkflow.cpp b/src/Workflow/MainWorkflow.cpp
>> index 2b716a9..3b6b0a1 100644
>> --- a/src/Workflow/MainWorkflow.cpp
>> +++ b/src/Workflow/MainWorkflow.cpp
>> @@ -288,6 +288,21 @@ MainWorkflow::removeClip( const QString& uuid )
>> }
>> }
>>
>> +void
>> +MainWorkflow::linkClips( const QString& uuidA, const QString& uuidB )
>> +{
>> +
>> + for ( auto clipA : m_clips )
>> + if ( clipA->uuid().toString() == uuidA )
>> + for ( auto clipB : m_clips )
>> + if ( clipB->uuid().toString() == uuidB )
>> + {
>> + Commands::trigger( new Commands::Clip::Link( clipA,
>> clipB ) );
>> + emit clipLinked( uuidA, uuidB );
>> + return;
>> + }
>> +}
>> +
>> bool
>> MainWorkflow::startRenderToFile( const QString &outputFileName, quint32
>> width, quint32 height,
>> double fps, const QString &ar, quint32
>> vbitrate, quint32 abitrate,
>> diff --git a/src/Workflow/MainWorkflow.h b/src/Workflow/MainWorkflow.h
>> index c328c2f..c21580c 100644
>> --- a/src/Workflow/MainWorkflow.h
>> +++ b/src/Workflow/MainWorkflow.h
>> @@ -157,6 +157,9 @@ class MainWorkflow : public QObject
>> Q_INVOKABLE
>> void removeClip( const QString& uuid );
>>
>> + Q_INVOKABLE
>> + void linkClips( const QString& uuidA, const
>> QString& uuidB );
>> +
>> bool startRenderToFile( const QString&
>> outputFileName, quint32 width, quint32 height,
>> double fps, const
>> QString& ar, quint32 vbitrate, quint32 abitrate,
>> quint32 nbChannels,
>> quint32 sampleRate );
>> @@ -239,6 +242,7 @@ class MainWorkflow : public QObject
>> void clipResized( const QString& uuid );
>> void clipRemoved( const QString& uuid );
>> void clipMoved( const QString& uuid );
>> + void clipLinked( const QString& uuidA, const
>> QString& uuidB );
>> };
>>
>> #endif // MAINWORKFLOW_H
>>
>> _______________________________________________
>> Vlmc-devel mailing list
>> Vlmc-devel at videolan.org
>> https://mailman.videolan.org/listinfo/vlmc-devel
>>
>
> _______________________________________________
> Vlmc-devel mailing list
> Vlmc-devel at videolan.org
> https://mailman.videolan.org/listinfo/vlmc-devel
More information about the Vlmc-devel
mailing list