]> git.sesse.net Git - kdenlive/commitdiff
* Fix crash when using razor tool while playing
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 14 Oct 2008 20:51:54 +0000 (20:51 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 14 Oct 2008 20:51:54 +0000 (20:51 +0000)
* Fix folder name changing to "Folder" when adding a new clip
* Seek to correct pos when editing a monitor timecode

svn path=/branches/KDE4/; revision=2471

src/customtrackview.cpp
src/docclipbase.cpp
src/docclipbase.h
src/monitor.cpp
src/monitor.h
src/projectitem.cpp
src/projectitem.h
src/projectlist.cpp
src/projectlistview.cpp
src/renderer.cpp

index 918357d6138aa0eacb1066fac667c8ac10c053fc..7511527dafd5529a50922644c6592c258627f601 100644 (file)
@@ -461,6 +461,10 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
     bool collision = false;
 
     if (m_tool != RAZORTOOL) activateMonitor();
+    else if (m_document->renderer()->playSpeed() != 0.0) {
+        m_document->renderer()->pause();
+        return;
+    }
     m_clickEvent = event->pos();
 
     // special cases (middle click button or ctrl / shift click
@@ -2340,7 +2344,7 @@ void CustomTrackView::updateAllThumbs() {
         if (itemList.at(i)->type() == AVWIDGET) {
             item = static_cast <ClipItem *>(itemList.at(i));
             item->refreshClip();
-            qApp->processEvents();
+            //qApp->processEvents();
         }
     }
 }
index 6263062b06516a9997776e9db4d6ec2a26110415..d2247be3b06f2acfb582cdbe2a22aa6dfaf3efaf 100644 (file)
@@ -23,7 +23,7 @@
 #include "clipmanager.h"
 
 DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id):
-        m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_clipProducer(NULL) {
+        m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_clipProducer(NULL), m_properties(QMap <QString, QString> ()) {
     int type = xml.attribute("type").toInt();
     m_clipType = (CLIPTYPE) type;
     m_name = xml.attribute("name");
@@ -463,6 +463,10 @@ void DocClipBase::setProperties(QMap <QString, QString> properties) {
     if (refreshProducer) slotRefreshProducer();
 }
 
+void DocClipBase::clearProperty(const QString &key) {
+    m_properties.remove(key);
+}
+
 void DocClipBase::setProperty(const QString &key, const QString &value) {
     m_properties.insert(key, value);
     if (key == "resource") m_thumbProd->updateClipUrl(KUrl(value));
index 5a33f7b71a308bba5183382d0f6c81dfa6ba8049..37ac0cf65552c0fa64af70f3249dbc82767c2873 100644 (file)
@@ -72,6 +72,7 @@ Q_OBJECT public:
     /** Returns any property of this clip. */
     const QString getProperty(const QString prop) const;
     void setProperty(const QString &key, const QString &value);
+    void clearProperty(const QString &key);
 
     /** Returns the internal unique id of the clip. */
     const QString &getId() const;
index 267728778cd71687e88370ec6e50c4b43bd85b73..95ee45b292f84f8f889442a14296f873b8fdf5ef 100644 (file)
@@ -92,6 +92,8 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     m_timePos->setInputMask("99:99:99:99");
     toolbar->addWidget(m_timePos);
 
+    connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotSeek()));
+
     layout2->addWidget(toolbar);
     ui.button_frame->setLayout(layout2);
     const int toolHeight = toolbar->height();
@@ -324,6 +326,11 @@ void Monitor::activateMonitor() {
     if (!m_isActive) m_monitorManager->activateMonitor(m_name);
 }
 
+void Monitor::slotSeek() {
+    const int frames = m_monitorManager->timecode().getFrameCount(m_timePos->text(), m_monitorManager->timecode().fps());
+    slotSeek(frames);
+}
+
 void Monitor::slotSeek(int pos) {
     if (!m_isActive) m_monitorManager->activateMonitor(m_name);
     if (render == NULL) return;
index 017864d4af2f51a69fa6bfc285adc3787294479e..fe703925bf6e4b449b70c88b873fc21e65f7b45c 100644 (file)
@@ -96,6 +96,7 @@ private slots:
     void slotSetSizeOneToOne();
     void slotSetSizeOneToTwo();
     void slotSaveZone();
+    void slotSeek();
 
 public slots:
     void slotOpenFile(const QString &);
index f8bc113cbbe032d99bdc06ffea61fe1880bcab6f..751efd46514ae17b26987595f0a3f0305a5d37be 100644 (file)
@@ -40,7 +40,7 @@ const int UsageRole = NameRole + 2;
 
 // folder
 ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, const QString &clipId)
-        : QTreeWidgetItem(parent, strings), m_clipType(FOLDER), m_groupName(strings.at(1)), m_clipId(clipId), m_clip(NULL) {
+        : QTreeWidgetItem(parent, strings), m_clipType(FOLDER), m_clipId(clipId), m_clip(NULL), m_groupname(strings.at(1)) {
     setSizeHint(0, QSize(65, 45));
     setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
     setIcon(0, KIcon("folder"));
@@ -100,14 +100,6 @@ bool ProjectItem::isGroup() const {
     return m_clipType == FOLDER;
 }
 
-const QString ProjectItem::groupName() const {
-    return m_groupName;
-}
-
-void ProjectItem::setGroupName(const QString name) {
-    m_groupName = name;
-}
-
 QStringList ProjectItem::names() const {
     QStringList result;
     result.append(text(0));
@@ -131,13 +123,29 @@ void ProjectItem::changeDuration(int frames) {
 }
 
 void ProjectItem::setProperties(QMap <QString, QString> props) {
+    if (m_clip == NULL) return;
     m_clip->setProperties(props);
 }
 
 void ProjectItem::setProperty(const QString &key, const QString &value) {
+    if (m_clip == NULL) return;
     m_clip->setProperty(key, value);
 }
 
+void ProjectItem::clearProperty(const QString &key) {
+    if (m_clip == NULL) return;
+    m_clip->clearProperty(key);
+}
+
+const QString ProjectItem::groupName() const {
+    return m_groupname;
+}
+
+void ProjectItem::setGroupName(const QString name) {
+    m_groupname = name;
+    setText(1, name);
+}
+
 DocClipBase *ProjectItem::referencedClip() {
     return m_clip;
 }
index c39fa7376a616499c74c54238e4a2ea0f16c0101..c5c92a62741d76ee59c73b6ae504137379cc354e 100644 (file)
@@ -45,8 +45,6 @@ public:
     const QString &clipId() const;
     QStringList names() const;
     bool isGroup() const;
-    const QString groupName() const;
-    void setGroupName(const QString name);
     const KUrl clipUrl() const;
     int clipMaxDuration() const;
     CLIPTYPE clipType() const;
@@ -54,9 +52,12 @@ public:
     DocClipBase *referencedClip();
     void setProperties(QMap <QString, QString> props);
     void setProperty(const QString &key, const QString &value);
+    void clearProperty(const QString &key);
+    const QString groupName() const;
+    void setGroupName(const QString name);
 
 private:
-    QString m_groupName;
+    QString m_groupname;
     CLIPTYPE m_clipType;
     QString m_clipId;
     void slotSetToolTip();
index 5bd6d499f2de5e7c0e56bc07a29666d9517c19d6..aa012b2fca5ebbad7aa0d55fa3bf2c229610ce19 100644 (file)
@@ -194,6 +194,7 @@ void ProjectList::slotItemEdited(QTreeWidgetItem *item, int column) {
         slotUpdateClipProperties(clip, props);
     } else if (column == 1 && clip->isGroup()) {
         m_doc->slotEditFolder(item->text(1), clip->groupName(), clip->clipId());
+        clip->setGroupName(item->text(1));
         const int children = item->childCount();
         for (int i = 0; i < children; i++) {
             ProjectItem *child = static_cast <ProjectItem *>(item->child(i));
@@ -279,13 +280,13 @@ void ProjectList::slotAddFolder(const QString foldername, const QString &clipId,
         }
     } else {
         if (edit) {
-            disconnect(listView, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotUpdateItemDescription(QTreeWidgetItem *, int)));
+            listView->blockSignals(true);
             ProjectItem *item;
             QTreeWidgetItemIterator it(listView);
             while (*it) {
                 item = static_cast <ProjectItem *>(*it);
                 if (item->isGroup() && item->clipId() == clipId) {
-                    item->setText(1, foldername);
+                    item->setGroupName(foldername);
                     const int children = item->childCount();
                     for (int i = 0; i < children; i++) {
                         ProjectItem *child = static_cast <ProjectItem *>(item->child(i));
@@ -295,7 +296,7 @@ void ProjectList::slotAddFolder(const QString foldername, const QString &clipId,
                 }
                 ++it;
             }
-            connect(listView, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotUpdateItemDescription(QTreeWidgetItem *, int)));
+            listView->blockSignals(false);
         } else {
             QStringList text;
             text << QString() << foldername;
@@ -386,13 +387,13 @@ void ProjectList::slotAddClip(QUrl givenUrl, QString group) {
     QString groupId = QString();
     if (group.isEmpty()) {
         ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
-        if (item && item->clipType() != FOLDER) {
+        if (item && !item->isGroup()) {
             while (item->parent()) {
                 item = static_cast <ProjectItem*>(item->parent());
-                if (item->clipType() == FOLDER) break;
+                if (item->isGroup()) break;
             }
         }
-        if (item && item->clipType() == FOLDER) {
+        if (item && item->isGroup()) {
             group = item->groupName();
             groupId = item->clipId();
         }
@@ -426,13 +427,13 @@ void ProjectList::slotAddColorClip() {
         QString group = QString();
         QString groupId = QString();
         ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
-        if (item && item->clipType() != FOLDER) {
+        if (item && !item->isGroup()) {
             while (item->parent()) {
                 item = static_cast <ProjectItem*>(item->parent());
-                if (item->clipType() == FOLDER) break;
+                if (item->isGroup()) break;
             }
         }
-        if (item && item->clipType() == FOLDER) {
+        if (item && item->isGroup()) {
             group = item->groupName();
             groupId = item->clipId();
         }
@@ -453,13 +454,13 @@ void ProjectList::slotAddSlideshowClip() {
         QString group = QString();
         QString groupId = QString();
         ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
-        if (item && item->clipType() != FOLDER) {
+        if (item && !item->isGroup()) {
             while (item->parent()) {
                 item = static_cast <ProjectItem*>(item->parent());
-                if (item->clipType() == FOLDER) break;
+                if (item->isGroup()) break;
             }
         }
-        if (item && item->clipType() == FOLDER) {
+        if (item && item->isGroup()) {
             group = item->groupName();
             groupId = item->clipId();
         }
@@ -473,13 +474,13 @@ void ProjectList::slotAddTitleClip() {
     QString group = QString();
     QString groupId = QString();
     ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
-    if (item && item->clipType() != FOLDER) {
+    if (item && !item->isGroup()) {
         while (item->parent()) {
             item = static_cast <ProjectItem*>(item->parent());
-            if (item->clipType() == FOLDER) break;
+            if (item->isGroup()) break;
         }
     }
-    if (item && item->clipType() == FOLDER) {
+    if (item && item->isGroup()) {
         group = item->groupName();
         groupId = item->clipId();
     }
index ad60323bf1a9b33befc48a3ef6904ec7bd016018..b424ebef1de1f43fb72e41ca7887e77479620c53 100644 (file)
@@ -176,8 +176,12 @@ void ProjectListView::dropEvent(QDropEvent *event) {
                 QTreeWidgetItem *parent = it->parent();
                 if (parent/* && ((ProjectItem *) it)->clipId() < 10000*/)  {
                     kDebug() << "++ item parent: " << parent->text(1);
-                    clone = (ProjectItem*) parent->takeChild(parent->indexOfChild(it));
-                    if (clone) addTopLevelItem(clone);
+                    clone = static_cast <ProjectItem*>(parent->takeChild(parent->indexOfChild(it)));
+                    if (clone) {
+                        addTopLevelItem(clone);
+                        clone->clearProperty("groupname");
+                        clone->clearProperty("groupid");
+                    }
                 }
             }
         }
index 394bb4668305ad69d157091c670cd72ed6d839d6..2b747f3b089a177a1a93d102fc7dbd1c245f2363 100644 (file)
@@ -1009,6 +1009,7 @@ void Render::stop(const GenTime & startTime) {
 void Render::pause() {
     if (!m_mltProducer || !m_mltConsumer)
         return;
+    if (m_mltProducer->get_speed() == 0.0) return;
     if (m_isZoneMode) resetZoneMode();
     m_isBlocked = true;
     m_mltConsumer->set("refresh", 0);