[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