From 775ffad14be7ffa9cf277ed0eafff4aa9139950e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 14 Oct 2008 20:51:54 +0000 Subject: [PATCH] * Fix crash when using razor tool while playing * 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 | 6 +++++- src/docclipbase.cpp | 6 +++++- src/docclipbase.h | 1 + src/monitor.cpp | 7 +++++++ src/monitor.h | 1 + src/projectitem.cpp | 26 +++++++++++++++++--------- src/projectitem.h | 7 ++++--- src/projectlist.cpp | 31 ++++++++++++++++--------------- src/projectlistview.cpp | 8 ++++++-- src/renderer.cpp | 1 + 10 files changed, 63 insertions(+), 31 deletions(-) diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 918357d6..7511527d 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -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 (itemList.at(i)); item->refreshClip(); - qApp->processEvents(); + //qApp->processEvents(); } } } diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 6263062b..d2247be3 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -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 ()) { int type = xml.attribute("type").toInt(); m_clipType = (CLIPTYPE) type; m_name = xml.attribute("name"); @@ -463,6 +463,10 @@ void DocClipBase::setProperties(QMap 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)); diff --git a/src/docclipbase.h b/src/docclipbase.h index 5a33f7b7..37ac0cf6 100644 --- a/src/docclipbase.h +++ b/src/docclipbase.h @@ -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; diff --git a/src/monitor.cpp b/src/monitor.cpp index 26772877..95ee45b2 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -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; diff --git a/src/monitor.h b/src/monitor.h index 017864d4..fe703925 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -96,6 +96,7 @@ private slots: void slotSetSizeOneToOne(); void slotSetSizeOneToTwo(); void slotSaveZone(); + void slotSeek(); public slots: void slotOpenFile(const QString &); diff --git a/src/projectitem.cpp b/src/projectitem.cpp index f8bc113c..751efd46 100644 --- a/src/projectitem.cpp +++ b/src/projectitem.cpp @@ -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 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; } diff --git a/src/projectitem.h b/src/projectitem.h index c39fa737..c5c92a62 100644 --- a/src/projectitem.h +++ b/src/projectitem.h @@ -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 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(); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 5bd6d499..aa012b2f 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -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 (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 (*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 (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 (listView->currentItem()); - if (item && item->clipType() != FOLDER) { + if (item && !item->isGroup()) { while (item->parent()) { item = static_cast (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 (listView->currentItem()); - if (item && item->clipType() != FOLDER) { + if (item && !item->isGroup()) { while (item->parent()) { item = static_cast (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 (listView->currentItem()); - if (item && item->clipType() != FOLDER) { + if (item && !item->isGroup()) { while (item->parent()) { item = static_cast (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 (listView->currentItem()); - if (item && item->clipType() != FOLDER) { + if (item && !item->isGroup()) { while (item->parent()) { item = static_cast (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(); } diff --git a/src/projectlistview.cpp b/src/projectlistview.cpp index ad60323b..b424ebef 100644 --- a/src/projectlistview.cpp +++ b/src/projectlistview.cpp @@ -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 (parent->takeChild(parent->indexOfChild(it))); + if (clone) { + addTopLevelItem(clone); + clone->clearProperty("groupname"); + clone->clearProperty("groupid"); + } } } } diff --git a/src/renderer.cpp b/src/renderer.cpp index 394bb466..2b747f3b 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -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); -- 2.39.2