[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive/frameworks] src/bin: Rename clip / subclip / folder now integrated in undo/redo system
From: Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date: 2015-01-31 22:10:20
Message-ID: E1YHgFA-0003zm-Du () scm ! kde ! org
[Download RAW message or body]
Git commit 9fe75bedfd6dd346468ff69c6c746a273b744001 by Jean-Baptiste Mardelle.
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 \
AbstractProjectItem::itemType() const return m_itemType;
}
-bool AbstractProjectItem::rename(const QString &name)
-{
- if (m_name == name) return false;
- QMap <QString, QString> newProperites;
- QMap <QString, QString> oldProperites;
- if (m_itemType == ClipItem) {
- // Rename clip
- oldProperites.insert("kdenlive:clipname", m_name);
- newProperites.insert("kdenlive:clipname", name);
- bin()->slotEditClipCommand(m_id, oldProperites, newProperites);
- }
- m_name = 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) = 0;
virtual QString getToolTip() const = 0;
- bool rename(const QString &name);
+ virtual bool rename(const QString &name) = 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 = 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<QString,QString> foldersData)
{
@@ -1487,15 +1499,40 @@ void Bin::slotItemDropped(const QList<QUrl>&urls, const \
QModelIndex &parent) void Bin::slotItemEdited(QModelIndex \
ix,QModelIndex,QVector<int>) {
// An item name was edited
- if (!ix.isValid()) return;
+/* if (!ix.isValid()) return;
AbstractProjectItem *currentItem = static_cast<AbstractProjectItem \
*>(ix.internalPointer());
if (currentItem && currentItem->itemType() == AbstractProjectItem::FolderItem) {
//TODO: Use undo command for this
+
AbstractProjectItem *parentFolder = currentItem->parent();
+ RenameBinFolderCommand *command = new RenameBinFolderCommand(this, \
currentItem->clipId(), const QString &newName, const QString &oldName, QUndoCommand \
*parent) :
emit storeFolder(currentItem->clipId(), parentFolder->clipId(), QString(), \
currentItem->name());
- }
+ }*/
}
+void Bin::renameFolderCommand(const QString &id, const QString &newName, const \
QString &oldName) +{
+ RenameBinFolderCommand *command = new RenameBinFolderCommand(this, id, 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 = new RenameBinSubClipCommand(this, id, \
newName, oldName, in, out); + m_doc->commandStack()->push(command);
+}
+
+void Bin::renameSubClip(const QString &id, const QString &newName, const QString \
oldName, int in, int out) +{
+ ProjectClip *clip = m_rootFolder->clip(id);
+ if (!clip) return;
+ ProjectSubClip *sub = clip->getSubClip(in, out);
+ if (!sub) return;
+ sub->setName(newName);
+ clip->setProducerProperty("kdenlive:clipzone." + oldName, QString());
+ clip->setProducerProperty("kdenlive:clipzone." + newName, QString::number(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, const \
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, const \
QString oldName, int in, int out); + /** @brief Rename a clip zone (subclip). */
+ void renameSubClip(const QString &id, const QString &newName, const QString \
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 oldParentId, \
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 &folderId, \
const QString &newName, const QString &oldName, QUndoCommand *parent) : + \
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, QUndoCommand \
*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, const QString \
&newName, const QString &oldName, QUndoCommand *parent = 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, const QString \
&newName, const QString &oldName, int in, int out, QUndoCommand *parent = 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 == name) return false;
+ // Rename clip
+ QMap <QString, QString> newProperites;
+ QMap <QString, QString> oldProperites;
+ oldProperites.insert("kdenlive:clipname", m_name);
+ newProperites.insert("kdenlive:clipname", name);
+ bin()->slotEditClipCommand(m_id, oldProperites, newProperites);
+ m_name = 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 monitor to use \
the clip's producer. */ virtual void setCurrent(bool current, bool notify = 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& description)
}*/
}
+bool ProjectFolder::rename(const QString &name)
+{
+ if (m_name == 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& description)
{
}
+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 notify)
m_masterClip->bin()->openProducer(m_masterClip->controller(), m_in, m_out);
}
}
+
+bool ProjectSubClip::rename(const QString &name)
+{
+ if (m_name == 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;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic