#include <QPixmap>
#include <QIcon>
#include <QDialog>
+#include <QtGui>
#include <KDebug>
#include <KAction>
#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 <QtGui>
ProjectList::ProjectList(QWidget *parent)
: QWidget(parent), m_render(NULL), m_fps(-1), m_commandStack(NULL) {
//m_toolbar->setEnabled(false);
searchView->setTreeWidget(listView);
- listView->setColumnCount(3);
- QStringList headers;
- headers << i18n("Thumbnail") << i18n("Filename") << i18n("Description");
- listView->setHeaderLabels(headers);
- listView->sortByColumn(1, Qt::AscendingOrder);
m_menu = new QMenu();
m_menu->addAction(addClipButton);
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 &)));
- connect(listView, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotUpdateItemDescription(QTreeWidgetItem *, int)));
+ connect(listView, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotItemEdited(QTreeWidgetItem *, int)));
+ connect(listView, SIGNAL(showProperties(DocClipBase *)), this, SIGNAL(showClipProperties(DocClipBase *)));
m_listViewDelegate = new ItemDelegate(listView);
listView->setItemDelegate(m_listViewDelegate);
- listView->setIconSize(QSize(60, 40));
- listView->setSortingEnabled(true);
}
ProjectList::~ProjectList() {
delete m_toolbar;
}
+
+
void ProjectList::setRenderer(Render *projectRender) {
m_render = projectRender;
}
if (item && !item->isGroup()) emit clipSelected(item->toXml());
}
-void ProjectList::slotUpdateItemDescription(QTreeWidgetItem *item, int column) {
- ProjectItem *clip = static_cast <ProjectItem*>(item);
- CLIPTYPE type = clip->clipType();
- if (column == 2) {
+void ProjectList::slotUpdateClipProperties(int id, QMap <QString, QString> properties) {
+ ProjectItem *item = getItemById(id);
+ if (item) slotUpdateClipProperties(item, properties);
+}
+
+void ProjectList::slotUpdateClipProperties(ProjectItem *clip, QMap <QString, QString> properties) {
+ if (!clip) return;
+ clip->setProperties(properties);
+ if (properties.contains("description")) {
+ CLIPTYPE type = clip->clipType();
+ clip->setText(2, properties.value("description"));
if (type == AUDIO || type == VIDEO || type == AV || type == IMAGE || type == PLAYLIST) {
// Use Nepomuk system to store clip description
Nepomuk::Resource f(clip->clipUrl().path());
- f.setDescription(item->text(2));
- kDebug() << "NEPOMUK, SETTING CLIP: " << clip->clipUrl().path() << ", TO TEXT: " << item->text(2);
+ if (f.isValid()) f.setDescription(properties.value("description"));
}
- } else if (column == 1 && type == FOLDER) {
- m_doc->slotEditFolder(item->text(1), clip->groupName(), clip->clipId());
}
}
-void ProjectList::slotEditClip() {
- kDebug() << "//////////////////////////////////////// DBL CLK";
-}
-
-
-void ProjectList::slotEditClip(QTreeWidgetItem *item, int column) {
- kDebug() << "//////////////////////////////////////// DBL CLK";
+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->clipType() == FOLDER) {
+ m_doc->slotEditFolder(item->text(1), clip->groupName(), clip->clipId());
+ }
}
void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item) {
bool enable = false;
if (item) {
- QFrame *w = new QFrame;
- w->setFrameShape(QFrame::StyledPanel);
- w->setLineWidth(2);
- w->setAutoFillBackground(true);
- QHBoxLayout *layout = new QHBoxLayout;
- layout->addWidget(new QLabel(i18n("Color:")));
- layout->addWidget(new KColorButton());
- layout->addWidget(new QLabel(i18n("Duration:")));
- layout->addWidget(new KRestrictedLine());
- w->setLayout(layout);
- m_listViewDelegate->extendItem(w, listView->currentIndex());
enable = true;
}
m_editAction->setEnabled(enable);
if (!url.isEmpty()) {
// if file has Nepomuk comment, use it
Nepomuk::Resource f(url.path());
- QString annotation = f.description();
+ 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")) {
}
void ProjectList::slotDeleteClip(int clipId) {
- kDebug() << "/////// DELETE CLIP: " << clipId;
ProjectItem *item = getItemById(clipId);
- if (item) delete item;
+ QTreeWidgetItem *p = item->parent();
+ if (p) {
+ kDebug() << "/////// DELETEED CLIP HAS A PARENT... " << p->indexOfChild(item);
+ QTreeWidgetItem *clone = p->takeChild(p->indexOfChild(item));
+ } else if (item) delete item;
}
void ProjectList::slotAddFolder() {
void ProjectList::slotAddClip(DocClipBase *clip) {
const int parent = clip->toXML().attribute("groupid").toInt();
+ ProjectItem *item = NULL;
if (parent != 0) {
ProjectItem *parentitem = getItemById(parent);
- if (parentitem)(void) new ProjectItem(parentitem, clip);
- else (void) new ProjectItem(listView, clip);
- } else (void) new ProjectItem(listView, clip);
+ if (parentitem) item = new ProjectItem(parentitem, clip);
+ }
+ if (item == NULL) item = new ProjectItem(listView, clip);
+
+ KUrl url = clip->fileURL();
+ if (!url.isEmpty()) {
+ // if file has Nepomuk comment, use it
+ Nepomuk::Resource f(url.path());
+ QString annotation;
+ if (f.isValid()) {
+ annotation = f.description();
+ /*
+ Nepomuk::Tag tag("test");
+ f.addTag(tag);*/
+ } else kDebug() << "--- CANNOT CONTACT NEPOMUK";
+ if (!annotation.isEmpty()) item->setText(2, annotation);
+ }
emit getFileProperties(clip->toXML(), clip->getId());
}
void ProjectList::slotAddColorClip() {
if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK";
- QDialog *dia = new QDialog;
+ QDialog *dia = new QDialog(this);
Ui::ColorClip_UI *dia_ui = new Ui::ColorClip_UI();
dia_ui->setupUi(dia);
dia_ui->clip_name->setText(i18n("Color Clip"));
}
void ProjectList::slotAddTitleClip() {
-
- 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);
+ QString group = QString();
+ int groupId = -1;
+ ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
+ if (item && item->clipType() != FOLDER) {
+ while (item->parent()) {
+ item = static_cast <ProjectItem*>(item->parent());
+ if (item->clipType() == FOLDER) break;
+ }
}
- delete dia_ui;
- //delete dia;
+ if (item && item->clipType() == FOLDER) {
+ group = item->groupName();
+ groupId = item->clipId();
+ }
+
+ m_doc->slotCreateTextClip(group, groupId);
}
void ProjectList::setDocument(KdenliveDoc *doc) {
listView->clear();
return prods;
}
+void ProjectList::slotRefreshClipThumbnail(int clipId) {
+ ProjectItem *item = getItemById(clipId);
+ if (item) {
+ int height = 40;
+ int width = (int)(height * (double) m_render->renderWidth() / m_render->renderHeight());
+ QPixmap pix = KThumb::getImage(item->clipUrl(), item->referencedClip()->getProjectThumbFrame(), 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);
}
}
-
-
void ProjectList::slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h) {
ProjectItem *item = getItemById(clipId);
if (item) item->setIcon(0, pix);