]> git.sesse.net Git - kdenlive/blob - src/clipmanager.cpp
Fix undo/redo delete clip
[kdenlive] / src / clipmanager.cpp
1 /***************************************************************************
2  *   Copyright (C) 2008 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
3  *                                                                         *
4  *   This program is free software; you can redistribute it and/or modify  *
5  *   it under the terms of the GNU General Public License as published by  *
6  *   the Free Software Foundation; either version 2 of the License, or     *
7  *   (at your option) any later version.                                   *
8  *                                                                         *
9  *   This program is distributed in the hope that it will be useful,       *
10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12  *   GNU General Public License for more details.                          *
13  *                                                                         *
14  *   You should have received a copy of the GNU General Public License     *
15  *   along with this program; if not, write to the                         *
16  *   Free Software Foundation, Inc.,                                       *
17  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
18  ***************************************************************************/
19 #include <KDebug>
20 #include <KFileDialog>
21
22 #include "addclipcommand.h"
23 #include "kdenlivesettings.h"
24 #include "clipmanager.h"
25
26
27 ClipManager::ClipManager(KdenliveDoc *doc):m_doc(doc)
28 {
29   m_clipIdCounter = 1;
30 }
31
32 ClipManager::~ClipManager()
33 {
34 }
35
36 void ClipManager::addClip(DocClipBase *clip)
37 {
38   m_clipList.append(clip);
39 }
40
41 void ClipManager::slotDeleteClip(uint clipId)
42 {
43   for (int i = 0; i < m_clipList.count(); i++) {
44     if (m_clipList.at(i)->getId() == clipId) {
45       //m_clipList.removeAt(i);
46       AddClipCommand *command = new AddClipCommand(m_doc, m_clipList.at(i)->toXML(), clipId, false);
47       m_doc->commandStack()->push(command);
48       break;
49     }
50   }
51 }
52
53 void ClipManager::deleteClip(uint clipId)
54 {
55   for (int i = 0; i < m_clipList.count(); i++) {
56     if (m_clipList.at(i)->getId() == clipId) {
57       m_clipList.removeAt(i);
58       break;
59     }
60   }
61 }
62
63 DocClipBase *ClipManager::getClipAt(int pos)
64 {
65   return m_clipList.at(pos);
66 }
67
68 DocClipBase *ClipManager::getClipById(int clipId)
69 {
70   kDebug()<<"++++  CLIP MAN, LOOKING FOR CLIP ID: "<<clipId;
71   for (int i = 0; i < m_clipList.count(); i++) {
72     if (m_clipList.at(i)->getId() == clipId)
73     {
74         kDebug()<<"++++  CLIP MAN, FOUND FOR CLIP ID: "<<clipId;
75       return m_clipList.at(i);
76     }
77   }
78   return NULL;
79 }
80
81 void ClipManager::slotAddClipFile(const KUrl url, const QString group)
82 {
83     kDebug()<<"/////  CLIP MANAGER, ADDING CLIP: "<<url;
84     QDomDocument doc;
85     QDomElement prod = doc.createElement("producer");
86     prod.setAttribute("resource", url.path());
87     uint id = m_clipIdCounter++;
88     prod.setAttribute("id", QString::number(id));
89     if (!group.isEmpty()) prod.setAttribute("group", group);
90     KMimeType::Ptr type = KMimeType::findByUrl(url);
91     if (type->name().startsWith("image/")) {
92       prod.setAttribute("type", (int) IMAGE);
93       prod.setAttribute("in", "0");
94       prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()));
95     }
96     AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true);
97     m_doc->commandStack()->push(command);
98 }
99
100 void ClipManager::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group)
101 {
102     QDomDocument doc;
103     QDomElement prod = doc.createElement("producer");
104     prod.setAttribute("mlt_service", "colour");
105     prod.setAttribute("colour", color);
106     prod.setAttribute("type", (int) COLOR);
107     uint id = m_clipIdCounter++;
108     prod.setAttribute("id", QString::number(id));
109     prod.setAttribute("in", "0");
110     prod.setAttribute("out", m_doc->getFramePos(duration));
111     prod.setAttribute("name", name);
112     AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true);
113     m_doc->commandStack()->push(command);
114 }
115