X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectlistview.cpp;h=0a85acdb6f7f717d0c1376ab2889f3b2ce6bf98a;hb=db7cce03362cb505c93ead2086e1f5653059bc65;hp=63e86e625a01eec12f5a075a85efa070da1288a9;hpb=ddbfd46a476d99869653afc86a92f7450ca6583d;p=kdenlive diff --git a/src/projectlistview.cpp b/src/projectlistview.cpp index 63e86e62..0a85acdb 100644 --- a/src/projectlistview.cpp +++ b/src/projectlistview.cpp @@ -17,13 +17,18 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include "QApplication" -#include "KDebug" - -#include "projectitem.h" #include "projectlistview.h" +#include "projectitem.h" +#include "kdenlivesettings.h" + +#include +#include +#include +#include +#include +#include ProjectListView::ProjectListView(QWidget *parent) : QTreeWidget(parent), m_dragStarted(false) { @@ -33,13 +38,67 @@ ProjectListView::ProjectListView(QWidget *parent) setAlternatingRowColors(true); setDragEnabled(true); setAcceptDrops(true); + + setColumnCount(4); + QStringList headers; + headers << i18n("Thumbnail") << i18n("Filename") << i18n("Description") << i18n("Rating"); + setHeaderLabels(headers); + sortByColumn(1, Qt::AscendingOrder); + + QHeaderView* headerView = header(); + headerView->setContextMenuPolicy(Qt::CustomContextMenu); + connect(headerView, SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(configureColumns(const QPoint&))); + + //connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(slotFocusOut(QTreeWidgetItem *, QTreeWidgetItem *))); + + if (!KdenliveSettings::showdescriptioncolumn()) hideColumn(2); + if (!KdenliveSettings::showratingcolumn()) hideColumn(3); + + setSortingEnabled(true); } ProjectListView::~ProjectListView() { } -void ProjectListView::editItem(QTreeWidgetItem * item, int column) { - kDebug() << "//////////////// EDIT ITEM, COL: " << column; + +void ProjectListView::configureColumns(const QPoint& pos) { + KMenu popup(this); + popup.addTitle(i18nc("@title:menu", "Columns")); + + QHeaderView* headerView = header(); + for (int i = 2; i < headerView->count(); ++i) { + const QString text = model()->headerData(i, Qt::Horizontal).toString(); + QAction* action = popup.addAction(text); + action->setCheckable(true); + action->setChecked(!headerView->isSectionHidden(i)); + action->setData(i); + } + + QAction* activatedAction = popup.exec(header()->mapToGlobal(pos)); + if (activatedAction != 0) { + const bool show = activatedAction->isChecked(); + + // remember the changed column visibility in the settings + const int columnIndex = activatedAction->data().toInt(); + switch (columnIndex) { + case 2: + KdenliveSettings::setShowdescriptioncolumn(show); + break; + case 3: + KdenliveSettings::setShowratingcolumn(show); + break; + default: + break; + } + + // apply the changed column visibility + if (show) { + showColumn(columnIndex); + } else { + hideColumn(columnIndex); + } + } } // virtual @@ -51,7 +110,13 @@ void ProjectListView::contextMenuEvent(QContextMenuEvent * event) { void ProjectListView::mouseDoubleClickEvent(QMouseEvent * event) { ProjectItem *item = static_cast (itemAt(event->pos())); if (!item) emit addClip(); - else if ((item->clipType() == FOLDER && columnAt(event->pos().x()) == 1) || columnAt(event->pos().x()) == 2) QTreeWidget::mouseDoubleClickEvent(event); + else if (item->isGroup()) { + if ((columnAt(event->pos().x()) == 1)) QTreeWidget::mouseDoubleClickEvent(event); + } else { + 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()); + } } // virtual @@ -73,10 +138,9 @@ void ProjectListView::dropEvent(QDropEvent *event) { else if (item->parent() && ((ProjectItem *) item->parent())->isGroup()) groupName = item->parent()->text(1); } - QList list; - list = event->mimeData()->urls(); - foreach(QUrl url, list) { - emit addClip(url, groupName); + const QList list = event->mimeData()->urls(); + foreach(const QUrl &url, list) { + emit addClip(KUrl(url), groupName); } } else if (event->mimeData()->hasFormat("kdenlive/producerslist")) { @@ -86,18 +150,20 @@ void ProjectListView::dropEvent(QDropEvent *event) { if (item->isGroup()) { //emit addClip(event->mimeData->text()); kDebug() << "//////////////// DROPPED RIGHT 1 "; - QList list; - list = selectedItems(); + const QList list = selectedItems(); ProjectItem *clone; - int parentId = item->clipId(); + QString parentId = item->clipId(); foreach(QTreeWidgetItem *it, list) { // TODO allow dragging of folders ? - if (!((ProjectItem *) it)->isGroup() && ((ProjectItem *) it)->clipId() < 10000) { + if (!((ProjectItem *) it)->isGroup()/* && ((ProjectItem *) it)->clipId() < 10000*/) { if (it->parent()) clone = (ProjectItem*) it->parent()->takeChild(it->parent()->indexOfChild(it)); else clone = (ProjectItem*) takeTopLevelItem(indexOfTopLevelItem(it)); if (clone) { item->addChild(clone); - clone->setGroup(item->groupName(), QString::number(parentId)); + QMap props; + props.insert("groupname", item->groupName()); + props.insert("groupid", parentId); + clone->setProperties(props); } } } @@ -106,15 +172,18 @@ void ProjectListView::dropEvent(QDropEvent *event) { if (!item) { kDebug() << "//////////////// DROPPED ON EMPTY ZONE"; // item dropped in empty zone, move it to top level - QList list; - list = selectedItems(); + const QList list = selectedItems(); ProjectItem *clone; foreach(QTreeWidgetItem *it, list) { QTreeWidgetItem *parent = it->parent(); - if (parent && ((ProjectItem *) it)->clipId() < 10000) { + 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"); + } } } } @@ -125,8 +194,10 @@ void ProjectListView::dropEvent(QDropEvent *event) { // virtual void ProjectListView::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { - this->m_DragStartPosition = event->pos(); + m_DragStartPosition = event->pos(); m_dragStarted = true; + QTreeWidgetItem *underMouse = itemAt(event->pos()); + if (underMouse && underMouse->isSelected()) emit focusMonitor(); } QTreeWidget::mousePressEvent(event); } @@ -134,7 +205,7 @@ void ProjectListView::mousePressEvent(QMouseEvent *event) { // virtual void ProjectListView::mouseMoveEvent(QMouseEvent *event) { - kDebug() << "// DRAG STARTED, MOUSE MOVED: "; + //kDebug() << "// DRAG STARTED, MOUSE MOVED: "; if (!m_dragStarted) return; if ((event->pos() - m_DragStartPosition).manhattanLength() @@ -142,47 +213,47 @@ void ProjectListView::mouseMoveEvent(QMouseEvent *event) { return; { - ProjectItem *clickItem = (ProjectItem *) itemAt(event->pos()); + ProjectItem *clickItem = (ProjectItem *) itemAt(m_DragStartPosition); //event->pos()); if (clickItem) { QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; QDomDocument doc; - QList list; - list = selectedItems(); + const QList list = selectedItems(); QStringList ids; - foreach(QTreeWidgetItem *item, list) { - // TODO allow dragging of folders - ids.append(QString::number(((ProjectItem *) item)->clipId())); + foreach(const QTreeWidgetItem *item, list) { + const ProjectItem *clip = static_cast (item); + if (!clip->isGroup()) ids.append(clip->clipId()); + else { + const int children = item->childCount(); + for (int i = 0; i < children; i++) { + ids.append(static_cast (item->child(i))->clipId()); + } + } } + if (ids.isEmpty()) return; QByteArray data; data.append(ids.join(";").toUtf8()); //doc.toString().toUtf8()); mimeData->setData("kdenlive/producerslist", data); //mimeData->setText(ids.join(";")); //doc.toString()); //mimeData->setImageData(image); drag->setMimeData(mimeData); - drag->setPixmap(clickItem->icon(0).pixmap((int)(50 *16 / 9.0), 50)); + drag->setPixmap(clickItem->icon(0).pixmap(iconSize())); drag->setHotSpot(QPoint(0, 50)); - drag->start(Qt::MoveAction); - - //Qt::DropAction dropAction; - //dropAction = drag->start(Qt::CopyAction | Qt::MoveAction); - - //Qt::DropAction dropAction = drag->exec(); - + drag->exec(Qt::MoveAction); } //event->accept(); } } +// virtual void ProjectListView::dragMoveEvent(QDragMoveEvent * event) { - QTreeWidgetItem * item = itemAt(event->pos()); event->setDropAction(Qt::IgnoreAction); - //if (item) { event->setDropAction(Qt::MoveAction); if (event->mimeData()->hasText()) { event->acceptProposedAction(); } - //} + // stop playing because we get a crash otherwise when fetching the thumbnails + emit pauseMonitor(); } QStringList ProjectListView::mimeTypes() const {