X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectlist.cpp;h=60eae55ff22db1a5d0f617cecb5ba56874697d81;hb=f5584dd222f8bda079f31c903b2b59ce82747ed9;hp=93f4cca161e331bdc95cc71c31a466befbed4ed1;hpb=250e2530273d33cce4b2ff095c09339bb8dbe89e;p=kdenlive diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 93f4cca1..60eae55f 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -39,19 +40,20 @@ #include "projectlist.h" #include "projectitem.h" #include "kdenlivesettings.h" +#include "slideshowclip.h" #include "ui_colorclip_ui.h" + #include "definitions.h" -#include "titlewidget.h" #include "clipmanager.h" #include "docclipbase.h" #include "kdenlivedoc.h" #include "renderer.h" +#include "kthumb.h" #include "projectlistview.h" -#include ProjectList::ProjectList(QWidget *parent) - : QWidget(parent), m_render(NULL), m_fps(-1), m_commandStack(NULL) { + : QWidget(parent), m_render(NULL), m_fps(-1), m_commandStack(NULL), m_selectedItem(NULL) { QWidget *vbox = new QWidget; listView = new ProjectListView(this);; @@ -75,6 +77,9 @@ ProjectList::ProjectList(QWidget *parent) QAction *addColorClip = addMenu->addAction(KIcon("document-new"), i18n("Add Color Clip")); connect(addColorClip, SIGNAL(triggered()), this, SLOT(slotAddColorClip())); + QAction *addSlideClip = addMenu->addAction(KIcon("document-new"), i18n("Add Slideshow Clip")); + connect(addSlideClip, SIGNAL(triggered()), this, SLOT(slotAddSlideshowClip())); + QAction *addTitleClip = addMenu->addAction(KIcon("document-new"), i18n("Add Title Clip")); connect(addTitleClip, SIGNAL(triggered()), this, SLOT(slotAddTitleClip())); @@ -106,6 +111,7 @@ ProjectList::ProjectList(QWidget *parent) m_menu->insertSeparator(m_deleteAction); connect(listView, SIGNAL(itemSelectionChanged()), this, SLOT(slotClipSelected())); + connect(listView, SIGNAL(focusMonitor()), this, SLOT(slotClipSelected())); connect(listView, SIGNAL(requestMenu(const QPoint &, QTreeWidgetItem *)), this, SLOT(slotContextMenu(const QPoint &, QTreeWidgetItem *))); connect(listView, SIGNAL(addClip()), this, SLOT(slotAddClip())); connect(listView, SIGNAL(addClip(QUrl, const QString &)), this, SLOT(slotAddClip(QUrl, const QString &))); @@ -121,6 +127,12 @@ ProjectList::~ProjectList() { delete m_toolbar; } +void ProjectList::slotEditClip() { + ProjectItem *item = static_cast (listView->currentItem()); + if (item && !item->isGroup()) emit clipSelected(item->toXml()); + emit showClipProperties(item->referencedClip()); +} + void ProjectList::setRenderer(Render *projectRender) { @@ -129,12 +141,24 @@ void ProjectList::setRenderer(Render *projectRender) { void ProjectList::slotClipSelected() { ProjectItem *item = static_cast (listView->currentItem()); - if (item && !item->isGroup()) emit clipSelected(item->toXml()); + if (item && !item->isGroup()) { + if (item == m_selectedItem) { + // if user clicked on the active clip item, just focus monitor, don't update it. + emit clipSelected(QDomElement()); + return; + } + m_selectedItem = item; + emit clipSelected(item->toXml()); + } } void ProjectList::slotUpdateClipProperties(int id, QMap properties) { ProjectItem *item = getItemById(id); - if (item) slotUpdateClipProperties(item, properties); + if (item) { + slotUpdateClipProperties(item, properties); + if (properties.contains("colour") || properties.contains("resource")) slotRefreshClipThumbnail(item); + if (properties.contains("out")) item->changeDuration(properties.value("out").toInt()); + } } void ProjectList::slotUpdateClipProperties(ProjectItem *clip, QMap properties) { @@ -199,78 +223,6 @@ void ProjectList::selectItemById(const int clipId) { if (item) listView->setCurrentItem(item); } -void ProjectList::addClip(const QStringList &name, const QDomElement &elem, const int clipId, const KUrl &url, const QString &group, int parentId) { - kDebug() << "///////// ADDING VCLIP=: " << name; - ProjectItem *item; - ProjectItem *groupItem = NULL; - QString groupName; - if (group.isEmpty()) groupName = elem.attribute("groupname", QString::null); - else groupName = group; - if (elem.isNull() && url.isEmpty()) { - // this is a folder - groupName = name.at(1); - QList groupList = listView->findItems(groupName, Qt::MatchExactly, 1); - if (groupList.isEmpty()) { - (void) new ProjectItem(listView, name, m_doc->getFreeClipId()); - } - return; - } - - if (parentId != -1) { - groupItem = getItemById(parentId); - } else if (!groupName.isEmpty()) { - // Clip is in a group - QList groupList = listView->findItems(groupName, Qt::MatchExactly, 1); - - if (groupList.isEmpty()) { - QStringList itemName; - itemName << QString::null << groupName; - kDebug() << "------- CREATING NEW GRP: " << itemName; - groupItem = new ProjectItem(listView, itemName, m_doc->getFreeClipId()); - } else groupItem = (ProjectItem *) groupList.first(); - } - if (groupItem) item = new ProjectItem(groupItem, name, elem, clipId); - else item = new ProjectItem(listView, name, elem, clipId); - if (!url.isEmpty()) { - // if file has Nepomuk comment, use it - Nepomuk::Resource f(url.path()); - QString annotation; - if (f.isValid()) annotation = f.description(); - - if (!annotation.isEmpty()) item->setText(2, annotation); - QString resource = url.path(); - if (resource.endsWith("westley") || resource.endsWith("kdenlive")) { - QString tmpfile; - QDomDocument doc; - if (KIO::NetAccess::download(url, tmpfile, 0)) { - QFile file(tmpfile); - if (file.open(QIODevice::ReadOnly)) { - doc.setContent(&file, false); - file.close(); - } - KIO::NetAccess::removeTempFile(tmpfile); - - QDomNodeList subProds = doc.elementsByTagName("producer"); - int ct = subProds.count(); - for (int i = 0; i < ct ; i++) { - QDomElement e = subProds.item(i).toElement(); - if (!e.isNull()) { - addProducer(e, clipId); - } - } - } - } - - } - - if (elem.isNull()) { - QDomDocument doc; - QDomElement element = doc.createElement("producer"); - element.setAttribute("resource", url.path()); - emit getFileProperties(element, clipId); - } else emit getFileProperties(elem, clipId); - selectItemById(clipId); -} void ProjectList::slotDeleteClip(int clipId) { ProjectItem *item = getItemById(clipId); @@ -278,7 +230,9 @@ void ProjectList::slotDeleteClip(int clipId) { if (p) { kDebug() << "/////// DELETEED CLIP HAS A PARENT... " << p->indexOfChild(item); QTreeWidgetItem *clone = p->takeChild(p->indexOfChild(item)); - } else if (item) delete item; + } else if (item) { + delete item; + } } void ProjectList::slotAddFolder() { @@ -410,23 +364,49 @@ void ProjectList::slotAddColorClip() { delete dia; } -void ProjectList::slotAddTitleClip() { +void ProjectList::slotAddSlideshowClip() { if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!!  NO CMD STK"; - //QDialog *dia = new QDialog; - - TitleWidget *dia_ui = new TitleWidget(); - //dia_ui->setupUi(dia); - //dia_ui->clip_name->setText(i18n("Title Clip")); - //dia_ui->clip_duration->setText(KdenliveSettings::color_duration()); - if (dia_ui->exec() == QDialog::Accepted) { - //QString color = dia_ui->clip_color->color().name(); - //color = color.replace(0, 1, "0x") + "ff"; - //m_doc->slotAddColorClipFile(dia_ui->clip_name->text(), color, dia_ui->clip_duration->text(), QString::null); + SlideshowClip *dia = new SlideshowClip(this); + + if (dia->exec() == QDialog::Accepted) { + + QString group = QString(); + int groupId = -1; + ProjectItem *item = static_cast (listView->currentItem()); + if (item && item->clipType() != FOLDER) { + while (item->parent()) { + item = static_cast (item->parent()); + if (item->clipType() == FOLDER) break; + } + } + if (item && item->clipType() == FOLDER) { + group = item->groupName(); + groupId = item->clipId(); + } + + m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), group, groupId); } - delete dia_ui; - //delete dia; + delete dia; } +void ProjectList::slotAddTitleClip() { + QString group = QString(); + int groupId = -1; + ProjectItem *item = static_cast (listView->currentItem()); + if (item && item->clipType() != FOLDER) { + while (item->parent()) { + item = static_cast (item->parent()); + if (item->clipType() == FOLDER) break; + } + } + if (item && item->clipType() == FOLDER) { + group = item->groupName(); + groupId = item->clipId(); + } + + m_doc->slotCreateTextClip(group, groupId); +} + void ProjectList::setDocument(KdenliveDoc *doc) { listView->clear(); QList list = doc->clipManager()->documentClipList(); @@ -438,15 +418,6 @@ void ProjectList::setDocument(KdenliveDoc *doc) { m_timecode = doc->timecode(); m_commandStack = doc->commandStack(); m_doc = doc; - /* QDomNodeList prods = doc->producersList(); - int ct = prods.count(); - kDebug() << "//////////// SETTING DOC, FOUND CLIPS: " << prods.count(); - listView->clear(); - for (int i = 0; i < ct ; i++) { - QDomElement e = prods.item(i).toElement(); - kDebug() << "// IMPORT: " << i << ", :" << e.attribute("id", "non") << ", NAME: " << e.attribute("name", "non"); - if (!e.isNull()) addProducer(e); - }*/ QTreeWidgetItem *first = listView->topLevelItem(0); if (first) listView->setCurrentItem(first); m_toolbar->setEnabled(true); @@ -466,6 +437,20 @@ QDomElement ProjectList::producersList() { return prods; } +void ProjectList::slotRefreshClipThumbnail(int clipId) { + ProjectItem *item = getItemById(clipId); + if (item) slotRefreshClipThumbnail(item); +} + +void ProjectList::slotRefreshClipThumbnail(ProjectItem *item) { + if (item) { + int height = 50; + int width = (int)(height * m_render->dar()); + QPixmap pix = KThumb::getImage(item->toXml(), item->referencedClip()->getProjectThumbFrame(), width, height); + //QPixmap pix = KThumb::getFrame(item->toXml()), 0, width, height); + item->setIcon(0, pix); + } +} void ProjectList::slotReplyGetFileProperties(int clipId, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) { ProjectItem *item = getItemById(clipId); @@ -476,8 +461,6 @@ void ProjectList::slotReplyGetFileProperties(int clipId, const QMap < QString, Q } } - - void ProjectList::slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h) { ProjectItem *item = getItemById(clipId); if (item) item->setIcon(0, pix); @@ -494,46 +477,4 @@ ProjectItem *ProjectList::getItemById(int id) { return NULL; } - -void ProjectList::addProducer(QDomElement producer, int parentId) { - if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!!  NO CMD STK"; - CLIPTYPE type = (CLIPTYPE) producer.attribute("type").toInt(); - - /*QDomDocument doc; - QDomElement prods = doc.createElement("list"); - doc.appendChild(prods); - prods.appendChild(doc.importNode(producer, true));*/ - - - //kDebug()<<"////// ADDING PRODUCER:\n "<= m_clipIdCounter) m_clipIdCounter = id + 1; - else if (id == 0) id = m_clipIdCounter++; - - if (parentId != -1) { - // item is a westley playlist, adjust subproducers ids - id = (parentId + 1) * 10000 + id; - } - if (type == AUDIO || type == VIDEO || type == AV || type == IMAGE || type == PLAYLIST) { - KUrl resource = KUrl(producer.attribute("resource")); - if (!resource.isEmpty()) { - QStringList itemEntry; - itemEntry.append(QString::null); - itemEntry.append(resource.fileName()); - addClip(itemEntry, producer, id, resource, groupName, parentId); - } - } else if (type == COLOR) { - QString colour = producer.attribute("colour"); - QPixmap pix(60, 40); - colour = colour.replace(0, 2, "#"); - pix.fill(QColor(colour.left(7))); - QStringList itemEntry; - itemEntry.append(QString::null); - itemEntry.append(producer.attribute("name", i18n("Color clip"))); - addClip(itemEntry, producer, id, KUrl(), groupName, parentId); - } - -} - #include "projectlist.moc"