[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive/frameworks] src/bin: Fix sorting in bin (show folders first)
From: Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date: 2014-12-31 22:39:18
Message-ID: E1Y6RvC-0007sE-Ex () scm ! kde ! org
[Download RAW message or body]
Git commit a886ccef7a5be4deaab7bc4effc3ecf1163bd4fc by Jean-Baptiste Mardelle.
Committed on 31/12/2014 at 22:39.
Pushed by mardelle into branch 'frameworks'.
Fix sorting in bin (show folders first)
M +5 -4 src/bin/abstractprojectitem.cpp
M +2 -1 src/bin/abstractprojectitem.h
M +1 -0 src/bin/bin.h
M +2 -0 src/bin/projectclip.cpp
M +2 -0 src/bin/projectfolder.cpp
M +1 -2 src/bin/projectitemmodel.cpp
M +13 -0 src/bin/projectsortproxymodel.cpp
M +2 -0 src/bin/projectsortproxymodel.h
http://commits.kde.org/kdenlive/a886ccef7a5be4deaab7bc4effc3ecf1163bd4fc
diff --git a/src/bin/abstractprojectitem.cpp b/src/bin/abstractprojectitem.cpp
index eae3be5..38c60b1 100644
--- a/src/bin/abstractprojectitem.cpp
+++ b/src/bin/abstractprojectitem.cpp
@@ -38,7 +38,6 @@ AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, \
const QString &id , m_jobType(AbstractClipJob::NOJOBTYPE)
, m_itemType(type)
{
- setParent(parent);
}
AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement& \
description, AbstractProjectItem* parent) : @@ -50,7 +49,6 @@ \
AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement , \
m_jobType(AbstractClipJob::NOJOBTYPE) , m_itemType(type)
{
- setParent(parent);
}
AbstractProjectItem::~AbstractProjectItem()
@@ -131,9 +129,9 @@ void AbstractProjectItem::finishInsert(AbstractProjectItem* \
parent) void AbstractProjectItem::addChild(AbstractProjectItem* child)
{
if (child && !contains(child)) {
- if (bin()) bin()->emitAboutToAddItem(child);
+ bin()->emitAboutToAddItem(child);
append(child);
- if (bin()) bin()->emitItemAdded(this);
+ bin()->emitItemAdded(child);
}
}
@@ -176,6 +174,9 @@ QVariant AbstractProjectItem::data(DataType type) const
case DataDuration:
data = QVariant(m_duration);
break;
+ case ItemTypeRole:
+ data = QVariant(m_itemType);
+ break;
case JobType:
data = QVariant(m_jobType);
break;
diff --git a/src/bin/abstractprojectitem.h b/src/bin/abstractprojectitem.h
index 81c7802..a5caac5 100644
--- a/src/bin/abstractprojectitem.h
+++ b/src/bin/abstractprojectitem.h
@@ -121,10 +121,11 @@ public:
DataDescription,
DataDate,
DataThumbnail,
+ ItemTypeRole = 4,
DataDuration,
JobType = Qt::UserRole + 1,
JobProgress,
- JobMessage
+ JobMessage,
};
/** @brief Returns the data that describes this item.
diff --git a/src/bin/bin.h b/src/bin/bin.h
index 9317e9e..21f8104 100644
--- a/src/bin/bin.h
+++ b/src/bin/bin.h
@@ -279,6 +279,7 @@ public:
/** @brief Defines the values for data roles */
enum DATATYPE {
+ ItemTypeRole = 4,
JobType = Qt::UserRole + 1,
JobProgress,
JobMessage
diff --git a/src/bin/projectclip.cpp b/src/bin/projectclip.cpp
index 348a090..55f763c 100644
--- a/src/bin/projectclip.cpp
+++ b/src/bin/projectclip.cpp
@@ -49,6 +49,7 @@ ProjectClip::ProjectClip(const QString &id, Mlt::Producer \
*producer, ProjectFold m_duration = producer->get_length_time(mlt_time_smpte_df);
getFileHash();
+ setParent(parent);
}
ProjectClip::ProjectClip(const QDomElement& description, ProjectFolder* parent) :
@@ -61,6 +62,7 @@ ProjectClip::ProjectClip(const QDomElement& description, \
ProjectFolder* parent) m_name = m_url.fileName();
if (description.hasAttribute("zone"))
m_zone = QPoint(description.attribute("zone").section(':', 0, 0).toInt(), \
description.attribute("zone").section(':', 1, 1).toInt()); + setParent(parent);
}
diff --git a/src/bin/projectfolder.cpp b/src/bin/projectfolder.cpp
index 81715e5..a4cfafe 100644
--- a/src/bin/projectfolder.cpp
+++ b/src/bin/projectfolder.cpp
@@ -34,12 +34,14 @@ ProjectFolder::ProjectFolder(const QString &id, const QString \
&name, ProjectFold //loadChildren(description);
m_name = name;
m_thumbnail = QIcon::fromTheme("folder").pixmap(40, 40);
+ setParent(parent);
}
ProjectFolder::ProjectFolder(Bin *bin) :
AbstractProjectItem(AbstractProjectItem::FolderItem, QString::number(-1))
, m_bin(bin)
{
+ setParent(NULL);
}
ProjectFolder::~ProjectFolder()
diff --git a/src/bin/projectitemmodel.cpp b/src/bin/projectitemmodel.cpp
index 215a0b0..cb3f155 100644
--- a/src/bin/projectitemmodel.cpp
+++ b/src/bin/projectitemmodel.cpp
@@ -58,7 +58,6 @@ QVariant ProjectItemModel::data(const QModelIndex& index, int role) \
const if (!index.isValid()) {
return QVariant();
}
-
if (role == Qt::DisplayRole) {
AbstractProjectItem *item = static_cast<AbstractProjectItem \
*>(index.internalPointer());
return item->data(static_cast<AbstractProjectItem::DataType>(index.column()));
@@ -78,7 +77,7 @@ QVariant ProjectItemModel::data(const QModelIndex& index, int \
role) const
AbstractProjectItem *item = static_cast<AbstractProjectItem \
*>(index.internalPointer()); return item->data(AbstractProjectItem::DataDuration);
}
- if (role == Bin::JobType || role == Bin::JobProgress || role == Bin::JobMessage) \
{ + if (role == Bin::JobType | Bin::JobProgress | Bin::JobMessage | \
Bin::ItemTypeRole) {
AbstractProjectItem *item = static_cast<AbstractProjectItem \
*>(index.internalPointer()); return item->data((AbstractProjectItem::DataType) \
role); }
diff --git a/src/bin/projectsortproxymodel.cpp b/src/bin/projectsortproxymodel.cpp
index cd9f0ba..f12ef0c 100644
--- a/src/bin/projectsortproxymodel.cpp
+++ b/src/bin/projectsortproxymodel.cpp
@@ -29,6 +29,7 @@ ProjectSortProxyModel::ProjectSortProxyModel(QObject *parent)
{
m_selection = new QItemSelectionModel(this);
connect(m_selection, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), \
this, SLOT(onCurrentRowChanged(QItemSelection,QItemSelection))); + \
setDynamicSortFilter(true); }
bool ProjectSortProxyModel::filterAcceptsRow(int sourceRow,
@@ -38,6 +39,18 @@ bool ProjectSortProxyModel::filterAcceptsRow(int sourceRow,
return (sourceModel()->data(index0).toString().contains(m_searchString));
}
+bool ProjectSortProxyModel::lessThan(const QModelIndex & left, const QModelIndex & \
right) const +{
+ // Check item type (folder or clip) as defined in projectitemmodel
+ int leftType = sourceModel()->data(left, 4).toInt();
+ int rightType = sourceModel()->data(right, 4).toInt();
+ if (leftType == rightType) {
+ // Let the normal alphabetical sort happen
+ return QSortFilterProxyModel::lessThan(right, left);
+ }
+ return leftType > rightType;
+}
+
QItemSelectionModel* ProjectSortProxyModel::selectionModel()
{
return m_selection;
diff --git a/src/bin/projectsortproxymodel.h b/src/bin/projectsortproxymodel.h
index 49c5a43..02249c7 100644
--- a/src/bin/projectsortproxymodel.h
+++ b/src/bin/projectsortproxymodel.h
@@ -53,6 +53,8 @@ private slots:
protected:
/** @brief Decide which items should be displayed depending on the search string \
*/
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
+ /** @brief Reimplemented to show folders first */
+ bool lessThan(const QModelIndex & left, const QModelIndex & right) const;
private:
QItemSelectionModel*m_selection;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic