From kde-commits Sat Jan 31 22:10:20 2015 From: Jean-Baptiste Mardelle Date: Sat, 31 Jan 2015 22:10:20 +0000 To: kde-commits Subject: [kdenlive/frameworks] src/bin: Rename clip / subclip / folder now integrated in undo/redo system Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=142274223025751 Git commit 9fe75bedfd6dd346468ff69c6c746a273b744001 by Jean-Baptiste Mardel= le. Committed on 31/01/2015 at 22:03. Pushed by mardelle into branch 'frameworks'. Rename clip / subclip / folder now integrated in undo/redo system M +0 -14 src/bin/abstractprojectitem.cpp M +1 -1 src/bin/abstractprojectitem.h M +39 -2 src/bin/bin.cpp M +11 -1 src/bin/bin.h M +43 -0 src/bin/bincommands.cpp M +28 -0 src/bin/bincommands.h M +14 -0 src/bin/projectclip.cpp M +2 -0 src/bin/projectclip.h M +8 -0 src/bin/projectfolder.cpp M +1 -0 src/bin/projectfolder.h M +4 -0 src/bin/projectfolderup.cpp M +1 -0 src/bin/projectfolderup.h M +10 -0 src/bin/projectsubclip.cpp M +1 -0 src/bin/projectsubclip.h http://commits.kde.org/kdenlive/9fe75bedfd6dd346468ff69c6c746a273b744001 diff --git a/src/bin/abstractprojectitem.cpp b/src/bin/abstractprojectitem.= cpp index f2aab10..e238bab 100644 --- a/src/bin/abstractprojectitem.cpp +++ b/src/bin/abstractprojectitem.cpp @@ -158,20 +158,6 @@ AbstractProjectItem::PROJECTITEMTYPE AbstractProjectIt= em::itemType() const return m_itemType; } = -bool AbstractProjectItem::rename(const QString &name) -{ - if (m_name =3D=3D name) return false; - QMap newProperites; - QMap oldProperites; - if (m_itemType =3D=3D ClipItem) { - // Rename clip - oldProperites.insert("kdenlive:clipname", m_name); - newProperites.insert("kdenlive:clipname", name); - bin()->slotEditClipCommand(m_id, oldProperites, newProperites); - } - m_name =3D name; - return true; -} = QVariant AbstractProjectItem::data(DataType type) const { diff --git a/src/bin/abstractprojectitem.h b/src/bin/abstractprojectitem.h index 32ad26d..96f87f8 100644 --- a/src/bin/abstractprojectitem.h +++ b/src/bin/abstractprojectitem.h @@ -169,7 +169,7 @@ public: = virtual QDomElement toXml(QDomDocument &document) =3D 0; virtual QString getToolTip() const =3D 0; - bool rename(const QString &name); + virtual bool rename(const QString &name) =3D 0; = signals: void childAdded(AbstractProjectItem *child); diff --git a/src/bin/bin.cpp b/src/bin/bin.cpp index a6526c8..2736489 100644 --- a/src/bin/bin.cpp +++ b/src/bin/bin.cpp @@ -606,6 +606,18 @@ void Bin::doAddFolder(const QString &id, const QString= &name, const QString &par emit storeFolder(id, parentId, QString(), name); } = +void Bin::renameFolder(const QString &id, const QString &name) +{ + ProjectFolder *folder =3D m_rootFolder->folder(id); + if (!folder || !folder->parent()) { + qDebug()<<" / / ERROR IN PARENT FOLDER"; + return; + } + folder->setName(name); + emit itemUpdated(folder); + emit storeFolder(id, folder->parent()->clipId(), QString(), name); +} + = void Bin::slotLoadFolders(QMap foldersData) { @@ -1487,15 +1499,40 @@ void Bin::slotItemDropped(const QList&urls, c= onst QModelIndex &parent) void Bin::slotItemEdited(QModelIndex ix,QModelIndex,QVector) { // An item name was edited - if (!ix.isValid()) return; +/* if (!ix.isValid()) return; AbstractProjectItem *currentItem =3D static_cast(ix.internalPointer()); if (currentItem && currentItem->itemType() =3D=3D AbstractProjectItem:= :FolderItem) { //TODO: Use undo command for this + = AbstractProjectItem *parentFolder =3D currentItem->parent(); + RenameBinFolderCommand *command =3D new RenameBinFolderCommand(thi= s, currentItem->clipId(), const QString &newName, const QString &oldName, Q= UndoCommand *parent) : emit storeFolder(currentItem->clipId(), parentFolder->clipId(), QS= tring(), currentItem->name()); - } + }*/ } = +void Bin::renameFolderCommand(const QString &id, const QString &newName, c= onst QString &oldName) +{ + RenameBinFolderCommand *command =3D new RenameBinFolderCommand(this, i= d, newName, oldName); + m_doc->commandStack()->push(command); +} + +void Bin::renameSubClipCommand(const QString &id, const QString &newName, = const QString oldName, int in, int out) +{ + RenameBinSubClipCommand *command =3D new RenameBinSubClipCommand(this,= id, newName, oldName, in, out); + m_doc->commandStack()->push(command); +} + +void Bin::renameSubClip(const QString &id, const QString &newName, const Q= String oldName, int in, int out) +{ + ProjectClip *clip =3D m_rootFolder->clip(id); + if (!clip) return; + ProjectSubClip *sub =3D clip->getSubClip(in, out); + if (!sub) return; + sub->setName(newName); + clip->setProducerProperty("kdenlive:clipzone." + oldName, QString()); + clip->setProducerProperty("kdenlive:clipzone." + newName, QString::num= ber(in) + ";" + QString::number(out)); + emit itemUpdated(sub); +} = void Bin::slotStartClipJob(bool enable) { diff --git a/src/bin/bin.h b/src/bin/bin.h index 6e1c6ea..1a80515 100644 --- a/src/bin/bin.h +++ b/src/bin/bin.h @@ -381,6 +381,15 @@ public: void focusBinView() const; /** @brief Get a string list of all clip ids that are inside a folder = defined by id. */ QStringList getBinFolderClipIds(const QString &id) const; + /** @brief Build a rename folder command. */ + void renameFolderCommand(const QString &id, const QString &newName, co= nst QString &oldName); + /** @brief Rename a folder and store new name in MLT. */ + void renameFolder(const QString &id, const QString &name); + /** @brief Build a rename subclip command. */ + void renameSubClipCommand(const QString &id, const QString &newName, c= onst QString oldName, int in, int out); + /** @brief Rename a clip zone (subclip). */ + void renameSubClip(const QString &id, const QString &newName, const QS= tring oldName, int in, int out); + = = private slots: void slotAddClip(); @@ -496,7 +505,8 @@ private: signals: void itemUpdated(AbstractProjectItem*); void producerReady(const QString &id); - void storeFolder(QString,QString,QString,QString); + /** @brief Save folder info into MLT. */ + void storeFolder(QString folderId, QString parentId, QString oldParent= Id, QString folderName); void gotFilterJobResults(QString,int,int,stringMap,stringMap); /** @brief The clip was changed and thumbnail needs a refresh. */ void clipNeedsReload(const QString &,bool); diff --git a/src/bin/bincommands.cpp b/src/bin/bincommands.cpp index 1c138eb..fec76eb 100644 --- a/src/bin/bincommands.cpp +++ b/src/bin/bincommands.cpp @@ -92,6 +92,49 @@ void MoveBinFolderCommand::redo() m_bin->doMoveFolder(m_clipId, m_newParentId); } = +RenameBinFolderCommand::RenameBinFolderCommand(Bin *bin, const QString &fo= lderId, const QString &newName, const QString &oldName, QUndoCommand *paren= t) : + QUndoCommand(parent), + m_bin(bin), + m_clipId(folderId), + m_oldName(oldName), + m_newName(newName) +{ + setText(i18n("Rename Folder")); +} +// virtual +void RenameBinFolderCommand::undo() +{ + m_bin->renameFolder(m_clipId, m_oldName); +} +// virtual +void RenameBinFolderCommand::redo() +{ + m_bin->renameFolder(m_clipId, m_newName); +} + +RenameBinSubClipCommand::RenameBinSubClipCommand(Bin *bin, const QString &= clipId, const QString &newName, const QString &oldName, int in, int out, QU= ndoCommand *parent) : + QUndoCommand(parent), + m_bin(bin), + m_clipId(clipId), + m_oldName(oldName), + m_newName(newName), + m_in(in), + m_out(out) +{ + setText(i18n("Rename Zone")); +} +// virtual +void RenameBinSubClipCommand::undo() +{ + m_bin->renameSubClip(m_clipId, m_oldName, m_newName, m_in, m_out); +} +// virtual +void RenameBinSubClipCommand::redo() +{ + m_bin->renameSubClip(m_clipId, m_newName, m_oldName, m_in, m_out); +} + + AddBinClipCutCommand::AddBinClipCutCommand(Bin *bin, const QString &clipId= , int in, int out, bool add, QUndoCommand *parent) : QUndoCommand(parent) , m_bin(bin) diff --git a/src/bin/bincommands.h b/src/bin/bincommands.h index 486a98a..46f11f3 100644 --- a/src/bin/bincommands.h +++ b/src/bin/bincommands.h @@ -67,6 +67,34 @@ private: QString m_newParentId; }; = +class RenameBinFolderCommand : public QUndoCommand +{ +public: + explicit RenameBinFolderCommand(Bin *bin, const QString &folderId, con= st QString &newName, const QString &oldName, QUndoCommand *parent =3D 0); + void undo(); + void redo(); +private: + Bin *m_bin; + QString m_clipId; + QString m_oldName; + QString m_newName; +}; + +class RenameBinSubClipCommand : public QUndoCommand +{ +public: + explicit RenameBinSubClipCommand(Bin *bin, const QString &clipId, cons= t QString &newName, const QString &oldName, int in, int out, QUndoCommand *= parent =3D 0); + void undo(); + void redo(); +private: + Bin *m_bin; + QString m_clipId; + QString m_oldName; + QString m_newName; + int m_in; + int m_out; +}; + class AddBinClipCutCommand : public QUndoCommand { public: diff --git a/src/bin/projectclip.cpp b/src/bin/projectclip.cpp index 8192ae7..140e99e 100644 --- a/src/bin/projectclip.cpp +++ b/src/bin/projectclip.cpp @@ -501,3 +501,17 @@ const QString ProjectClip::codec(bool audioCodec) const if (!m_controller) return QString(); return m_controller->codec(audioCodec); } + +bool ProjectClip::rename(const QString &name) +{ + if (m_name =3D=3D name) return false; + // Rename clip + QMap newProperites; + QMap oldProperites; + oldProperites.insert("kdenlive:clipname", m_name); + newProperites.insert("kdenlive:clipname", name); + bin()->slotEditClipCommand(m_id, oldProperites, newProperites); + m_name =3D name; + return true; +} + diff --git a/src/bin/projectclip.h b/src/bin/projectclip.h index 1758049..09f4940 100644 --- a/src/bin/projectclip.h +++ b/src/bin/projectclip.h @@ -109,6 +109,8 @@ public: = /** @brief Calls AbstractProjectItem::setCurrent and sets the bin moni= tor to use the clip's producer. */ virtual void setCurrent(bool current, bool notify =3D true); + = + virtual bool rename(const QString &name); = virtual QDomElement toXml(QDomDocument &document); = diff --git a/src/bin/projectfolder.cpp b/src/bin/projectfolder.cpp index 1d18eb3..bcbeaaa 100644 --- a/src/bin/projectfolder.cpp +++ b/src/bin/projectfolder.cpp @@ -137,3 +137,11 @@ void ProjectFolder::loadChildren(const QDomElement& de= scription) }*/ } = +bool ProjectFolder::rename(const QString &name) +{ + if (m_name =3D=3D name) return false; + // Rename folder + bin()->renameFolderCommand(m_id, name, m_name); + return true; +} + diff --git a/src/bin/projectfolder.h b/src/bin/projectfolder.h index 0902ed7..c25f45e 100644 --- a/src/bin/projectfolder.h +++ b/src/bin/projectfolder.h @@ -78,6 +78,7 @@ public: /** @brief Returns an xml description of the folder. */ QDomElement toXml(QDomDocument &document); virtual QString getToolTip() const; + virtual bool rename(const QString &name); = protected: = diff --git a/src/bin/projectfolderup.cpp b/src/bin/projectfolderup.cpp index b631db9..fefc666 100644 --- a/src/bin/projectfolderup.cpp +++ b/src/bin/projectfolderup.cpp @@ -87,3 +87,7 @@ void ProjectFolderUp::loadChildren(const QDomElement& des= cription) { } = +bool ProjectFolderUp::rename(const QString &) +{ + return false; +} diff --git a/src/bin/projectfolderup.h b/src/bin/projectfolderup.h index 48a9901..3a8aa09 100644 --- a/src/bin/projectfolderup.h +++ b/src/bin/projectfolderup.h @@ -75,6 +75,7 @@ public: /** @brief Returns an xml description of the folder. */ QDomElement toXml(QDomDocument &document); virtual QString getToolTip() const; + virtual bool rename(const QString &name); = protected: = diff --git a/src/bin/projectsubclip.cpp b/src/bin/projectsubclip.cpp index 29857f8..98eca51 100644 --- a/src/bin/projectsubclip.cpp +++ b/src/bin/projectsubclip.cpp @@ -112,3 +112,13 @@ void ProjectSubClip::setCurrent(bool current, bool not= ify) m_masterClip->bin()->openProducer(m_masterClip->controller(), m_in= , m_out); } } + +bool ProjectSubClip::rename(const QString &name) +{ + if (m_name =3D=3D name) return false; + // Rename folder + bin()->renameSubClipCommand(m_id, name, m_name, m_in, m_out); + return true; +} + + diff --git a/src/bin/projectsubclip.h b/src/bin/projectsubclip.h index 58a964e..b0799e7 100644 --- a/src/bin/projectsubclip.h +++ b/src/bin/projectsubclip.h @@ -75,6 +75,7 @@ public: void discard(); QPoint zone() const; virtual QString getToolTip() const; + virtual bool rename(const QString &name); = private: ProjectClip *m_masterClip;