From: <j-...@us...> - 2009-01-21 22:22:34
|
Revision: 2939 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2939&view=rev Author: j-b-m Date: 2009-01-21 21:50:28 +0000 (Wed, 21 Jan 2009) Log Message: ----------- Allow editing of clip names again (for color, titles & slideshows), fix saving issue: http://www.kdenlive.org:80/mantis/view.php?id=589 Modified Paths: -------------- branches/KDE4/src/clipitem.cpp branches/KDE4/src/clipitem.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/docclipbase.cpp branches/KDE4/src/docclipbase.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlist.h branches/KDE4/src/projectlistview.cpp Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/clipitem.cpp 2009-01-21 21:50:28 UTC (rev 2939) @@ -479,6 +479,10 @@ return m_clipName; } +void ClipItem::setClipName(const QString &name) { + m_clipName = name; +} + const QString &ClipItem::clipProducer() const { return m_producer; } Modified: branches/KDE4/src/clipitem.h =================================================================== --- branches/KDE4/src/clipitem.h 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/clipitem.h 2009-01-21 21:50:28 UTC (rev 2939) @@ -53,6 +53,7 @@ int clipType() const; DocClipBase *baseClip() const; QString clipName() const; + void setClipName(const QString &name); QDomElement xml() const; ClipItem *clone(ItemInfo info) const; const EffectsList effectList(); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/customtrackview.cpp 2009-01-21 21:50:28 UTC (rev 2939) @@ -3365,4 +3365,18 @@ return result; } +void CustomTrackView::clipNameChanged(const QString id, const QString name) { + QList<QGraphicsItem *> list = scene()->items(); + ClipItem *clip = NULL; + for (int i = 0; i < list.size(); ++i) { + if (list.at(i)->type() == AVWIDGET) { + clip = static_cast <ClipItem *>(list.at(i)); + if (clip->clipProducer() == id) { + clip->setClipName(name); + } + } + } + viewport()->update(); +} + #include "customtrackview.moc" Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/customtrackview.h 2009-01-21 21:50:28 UTC (rev 2939) @@ -142,6 +142,7 @@ void slotInsertTrack(int ix); void slotDeleteTrack(int ix); void slotChangeTrack(int ix); + void clipNameChanged(const QString id, const QString name); protected: virtual void drawBackground(QPainter * painter, const QRectF & rect); Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/docclipbase.cpp 2009-01-21 21:50:28 UTC (rev 2939) @@ -28,7 +28,6 @@ m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()), m_snapMarkers(QList < CommentedTime > ()) { int type = xml.attribute("type").toInt(); m_clipType = (CLIPTYPE) type; - m_name = xml.attribute("name"); QDomNamedNodeMap attributes = xml.attributes(); for (unsigned int i = 0; i < attributes.count(); i++) { @@ -44,7 +43,7 @@ out = xml.attribute("duration").toInt(); if (out != 0) setDuration(GenTime(out, KdenliveSettings::project_fps())); } - if (m_name.isEmpty()) m_name = url.fileName(); + if (!m_properties.contains("name")) m_properties.insert("name", url.fileName()); //if (!url.isEmpty() && QFile::exists(url.path())) { @@ -107,13 +106,9 @@ return m_audioThumbCreated; } -void DocClipBase::setName(const QString name) { - m_name = name; -} - const QString & DocClipBase::name() const { - return m_name; + return m_properties.value("name"); } const QString &DocClipBase::getId() const { Modified: branches/KDE4/src/docclipbase.h =================================================================== --- branches/KDE4/src/docclipbase.h 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/docclipbase.h 2009-01-21 21:50:28 UTC (rev 2939) @@ -58,9 +58,6 @@ // DocClipBase & operator=(const DocClipBase & clip); virtual ~ DocClipBase(); - /** sets the name of this clip. */ - void setName(const QString name); - /** returns the name of this clip. */ const QString & name() const; @@ -172,8 +169,7 @@ void deleteProducers(); private: // Private attributes - /** The name of this clip */ - QString m_name; + /** A description of this clip */ QString m_description; /** The number of times this clip is used in the project - the number of references to this clip Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/mainwindow.cpp 2009-01-21 21:50:28 UTC (rev 2939) @@ -1571,6 +1571,9 @@ effectStack->updateProjectFormat(doc->mltProfile(), doc->timecode()); connect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *))); connect(m_projectList, SIGNAL(projectModified()), doc, SLOT(setModified())); + connect(m_projectList, SIGNAL(clipNameChanged(const QString, const QString)), trackView->projectView(), SLOT(clipNameChanged(const QString, const QString))); + + connect(trackView, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor())); connect(trackView, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int))); connect(trackView, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int))); Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/projectlist.cpp 2009-01-21 21:50:28 UTC (rev 2939) @@ -51,6 +51,7 @@ #include "renderer.h" #include "kthumb.h" #include "projectlistview.h" +#include "editclipcommand.h" ProjectList::ProjectList(QWidget *parent) : QWidget(parent), m_render(NULL), m_fps(-1), m_commandStack(NULL), m_selectedItem(NULL), m_infoQueue(QMap <QString, QDomElement> ()), m_thumbnailQueue(QList <QString> ()), m_refreshed(false) { @@ -175,9 +176,17 @@ void ProjectList::slotUpdateClipProperties(ProjectItem *clip, QMap <QString, QString> properties) { if (!clip) return; if (!clip->isGroup()) clip->setProperties(properties); + if (properties.contains("name")) { + listView->blockSignals(true); + clip->setText(1, properties.value("name")); + listView->blockSignals(false); + emit clipNameChanged(clip->clipId(), properties.value("name")); + } if (properties.contains("description")) { CLIPTYPE type = clip->clipType(); + listView->blockSignals(true); clip->setText(2, properties.value("description")); + listView->blockSignals(false); if (KdenliveSettings::activate_nepomuk() && (type == AUDIO || type == VIDEO || type == AV || type == IMAGE || type == PLAYLIST)) { // Use Nepomuk system to store clip description Nepomuk::Resource f(clip->clipUrl().path()); @@ -195,17 +204,36 @@ void ProjectList::slotItemEdited(QTreeWidgetItem *item, int column) { ProjectItem *clip = static_cast <ProjectItem*>(item); if (column == 2) { - QMap <QString, QString> props; - props["description"] = item->text(2); - 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)); - child->setProperty("groupname", item->text(1)); + if (clip->referencedClip()) { + QMap <QString, QString> oldprops; + QMap <QString, QString> newprops; + oldprops["description"] = clip->referencedClip()->getProperty("description"); + newprops["description"] = item->text(2); + slotUpdateClipProperties(clip, newprops); + EditClipCommand *command = new EditClipCommand(this, clip->clipId(), oldprops, newprops, false); + m_commandStack->push(command); } + } else if (column == 1) { + if (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)); + child->setProperty("groupname", item->text(1)); + } + } else { + if (clip->referencedClip()) { + QMap <QString, QString> oldprops; + QMap <QString, QString> newprops; + oldprops["name"] = clip->referencedClip()->getProperty("name"); + newprops["name"] = item->text(1); + slotUpdateClipProperties(clip, newprops); + emit projectModified(); + EditClipCommand *command = new EditClipCommand(this, clip->clipId(), oldprops, newprops, false); + m_commandStack->push(command); + } + } } } @@ -286,13 +314,14 @@ } } else { if (edit) { - listView->blockSignals(true); ProjectItem *item; QTreeWidgetItemIterator it(listView); while (*it) { item = static_cast <ProjectItem *>(*it); if (item->isGroup() && item->clipId() == clipId) { + listView->blockSignals(true); item->setGroupName(foldername); + listView->blockSignals(false); const int children = item->childCount(); for (int i = 0; i < children; i++) { ProjectItem *child = static_cast <ProjectItem *>(item->child(i)); @@ -302,7 +331,6 @@ } ++it; } - listView->blockSignals(false); } else { QStringList text; text << QString() << foldername; @@ -313,6 +341,7 @@ void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties) { if (getProperties) listView->setEnabled(false); + listView->blockSignals(true); const QString parent = clip->getProperty("groupid"); //kDebug() << "Adding clip with groupid: " << parent; ProjectItem *item = NULL; @@ -324,9 +353,7 @@ //kDebug() << "Adding clip to new group: " << groupName; if (groupName.isEmpty()) groupName = i18n("Folder"); text << QString() << groupName; - listView->blockSignals(true); parentitem = new ProjectItem(listView, text, parent); - listView->blockSignals(false); } else { //kDebug() << "Adding clip to existing group: " << parentitem->groupName(); } @@ -350,6 +377,7 @@ } if (!annotation.isEmpty()) item->setText(2, annotation); } + listView->blockSignals(false); } void ProjectList::requestClipInfo(const QDomElement xml, const QString id) { @@ -376,7 +404,9 @@ void ProjectList::slotUpdateClip(const QString &id) { ProjectItem *item = getItemById(id); + listView->blockSignals(true); if (item) item->setData(1, UsageRole, QString::number(item->numReferences())); + listView->blockSignals(false); } void ProjectList::updateAllClips() { @@ -401,11 +431,17 @@ QString cachedPixmap = m_doc->projectFolder().path() + "/thumbs/" + item->getClipHash() + ".png"; if (QFile::exists(cachedPixmap)) { //kDebug()<<"// USING CACHED PIX: "<<cachedPixmap; + listView->blockSignals(true); item->setIcon(0, QPixmap(cachedPixmap)); + listView->blockSignals(false); } else requestClipThumbnail(item->clipId()); + listView->blockSignals(true); item->changeDuration(item->referencedClip()->producer()->get_playtime()); + listView->blockSignals(false); } + listView->blockSignals(true); item->setData(1, UsageRole, QString::number(item->numReferences())); + listView->blockSignals(false); qApp->processEvents(); } ++it; @@ -595,7 +631,9 @@ QPixmap pix; if (clip->clipType() == AUDIO) pix = KIcon("audio-x-generic").pixmap(QSize(width, height)); else pix = item->referencedClip()->thumbProducer()->extractImage(item->referencedClip()->getClipThumbFrame(), width, height); + listView->blockSignals(true); item->setIcon(0, pix); + listView->blockSignals(false); m_doc->cachePixmap(item->getClipHash(), pix); if (update) emit projectModified(); if (!m_thumbnailQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextThumbnail())); @@ -605,9 +643,11 @@ void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) { ProjectItem *item = getItemById(clipId); if (item && producer) { + listView->blockSignals(true); item->setProperties(properties, metadata); item->referencedClip()->setProducer(producer); emit receivedClipDuration(clipId, item->clipMaxDuration()); + listView->blockSignals(false); } else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS..."; if (!m_infoQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue())); else listView->setEnabled(true); @@ -616,8 +656,10 @@ void ProjectList::slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h) { ProjectItem *item = getItemById(clipId); if (item) { + listView->blockSignals(true); item->setIcon(0, pix); m_doc->cachePixmap(item->getClipHash(), pix); + listView->blockSignals(false); } } Modified: branches/KDE4/src/projectlist.h =================================================================== --- branches/KDE4/src/projectlist.h 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/projectlist.h 2009-01-21 21:50:28 UTC (rev 2939) @@ -179,6 +179,7 @@ void showClipProperties(DocClipBase *); void projectModified(); void loadingIsOver(); + void clipNameChanged(const QString, const QString); }; #endif Modified: branches/KDE4/src/projectlistview.cpp =================================================================== --- branches/KDE4/src/projectlistview.cpp 2009-01-21 20:09:50 UTC (rev 2938) +++ branches/KDE4/src/projectlistview.cpp 2009-01-21 21:50:28 UTC (rev 2939) @@ -115,7 +115,8 @@ else if (item->isGroup()) { if ((columnAt(event->pos().x()) == 1)) QTreeWidget::mouseDoubleClickEvent(event); } else { - if ((columnAt(event->pos().x()) == 2)) QTreeWidget::mouseDoubleClickEvent(event); + if ((columnAt(event->pos().x()) == 1) && (item->clipType() == SLIDESHOW || item->clipType() == TEXT || item->clipType() == COLOR)) QTreeWidget::mouseDoubleClickEvent(event); + else if ((columnAt(event->pos().x()) == 2)) QTreeWidget::mouseDoubleClickEvent(event); else emit showProperties(item->referencedClip()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |