#include "dolphindetailsview.h"
#include "dolphinmainwindow.h"
+#include "dolphinsortfilterproxymodel.h"
#include "dolphinview.h"
#include "viewproperties.h"
// The sorting has already been changed in QTreeView if this slot is
// invoked, but Dolphin was not informed about this. This is bypassed by changing
// the sorting and sort order to a temporary other value and readjust it again.
- const bool update = (column == KDirModel::Name) || (column == KDirModel::Size) ||
- (column == KDirModel::ModifiedTime);
- if (update) {
- DolphinView::Sorting sorting = DolphinView::SortByName;
- switch (column) {
- case KDirModel::Size: sorting = DolphinView::SortBySize; break;
- case KDirModel::ModifiedTime: sorting = DolphinView::SortByDate; break;
- case KDirModel::Name:
- default: break;
- }
-
- const Qt::SortOrder sortOrder = header()->sortIndicatorOrder();
-
- // temporary adjust the sorting and sort order to different values...
- const DolphinView::Sorting tempSorting = (sorting == DolphinView::SortByName) ?
- DolphinView::SortBySize :
- DolphinView::SortByName;
- m_dolphinView->setSorting(tempSorting);
- const Qt::SortOrder tempSortOrder = (sortOrder == Qt::Ascending) ?
- Qt::Descending : Qt::Ascending;
- m_dolphinView->setSortOrder(tempSortOrder);
-
- // ... so that setting them again results in storing the new setting.
- m_dolphinView->setSorting(sorting);
- m_dolphinView->setSortOrder(sortOrder);
- }
-
+ DolphinView::Sorting sorting = DolphinSortFilterProxyModel::sortingForColumn(column);
+ const Qt::SortOrder sortOrder = header()->sortIndicatorOrder();
+
+ // temporary adjust the sorting and sort order to different values...
+ const DolphinView::Sorting tempSorting = (sorting == DolphinView::SortByName) ?
+ DolphinView::SortBySize :
+ DolphinView::SortByName;
+ m_dolphinView->setSorting(tempSorting);
+ const Qt::SortOrder tempSortOrder = (sortOrder == Qt::Ascending) ?
+ Qt::Descending : Qt::Ascending;
+ m_dolphinView->setSortOrder(tempSortOrder);
+
+ // ... so that setting them again results in storing the new setting.
+ m_dolphinView->setSorting(sorting);
+ m_dolphinView->setSortOrder(sortOrder);
}
#include "dolphindetailsview.moc"
case DolphinView::SortByDate:\r
action = actionCollection()->action("by_date");\r
break;\r
+ case DolphinView::SortByPermissions:\r
+ action = actionCollection()->action("by_permissions");\r
+ break;\r
+ case DolphinView::SortByOwner:\r
+ action = actionCollection()->action("by_owner");\r
+ break;\r
+ case DolphinView::SortByGroup:\r
+ action = actionCollection()->action("by_group");\r
+ break;\r
default:\r
break;\r
}\r
m_activeView->setSorting(DolphinView::SortByDate);\r
}\r
\r
+void DolphinMainWindow::sortByPermissions()\r
+{\r
+ m_activeView->setSorting(DolphinView::SortByPermissions);\r
+}\r
+\r
+void DolphinMainWindow::sortByOwner()\r
+{\r
+ m_activeView->setSorting(DolphinView::SortByOwner);\r
+}\r
+\r
+void DolphinMainWindow::sortByGroup()\r
+{\r
+ m_activeView->setSorting(DolphinView::SortByGroup);\r
+}\r
+\r
void DolphinMainWindow::toggleSortOrder()\r
{\r
const Qt::SortOrder order = (m_activeView->sortOrder() == Qt::Ascending) ?\r
sortByDate->setText(i18n("By Date"));\r
connect(sortByDate, SIGNAL(triggered()), this, SLOT(sortByDate()));\r
\r
+ KToggleAction* sortByPermissions = actionCollection()->add<KToggleAction>("by_permissions");\r
+ sortByPermissions->setText(i18n("By Permissions"));\r
+ connect(sortByPermissions, SIGNAL(triggered()), this, SLOT(sortByPermissions()));\r
+\r
+ KToggleAction* sortByOwner = actionCollection()->add<KToggleAction>("by_owner");\r
+ sortByOwner->setText(i18n("By Owner"));\r
+ connect(sortByOwner, SIGNAL(triggered()), this, SLOT(sortByOwner()));\r
+\r
+ KToggleAction* sortByGroup = actionCollection()->add<KToggleAction>("by_group");\r
+ sortByGroup->setText(i18n("By Group"));\r
+ connect(sortByGroup, SIGNAL(triggered()), this, SLOT(sortByGroup()));\r
+\r
QActionGroup* sortGroup = new QActionGroup(this);\r
sortGroup->addAction(sortByName);\r
sortGroup->addAction(sortBySize);\r
sortGroup->addAction(sortByDate);\r
+ sortGroup->addAction(sortByPermissions);\r
+ sortGroup->addAction(sortByOwner);\r
+ sortGroup->addAction(sortByGroup);\r
\r
KToggleAction* sortDescending = actionCollection()->add<KToggleAction>("descending");\r
sortDescending->setText(i18n("Descending"));\r
/** The sorting of the current view should be done by the date. */
void sortByDate();
+ /** The sorting of the current view should be done by the permissions. */
+ void sortByPermissions();
+
+ /** The sorting of the current view should be done by the owner. */
+ void sortByOwner();
+
+ /** The sorting of the current view should be done by the group. */
+ void sortByGroup();
+
/** Switches between an ascending and descending sorting order. */
void toggleSortOrder();
#include <kdirmodel.h>
#include <kfileitem.h>
-static const int dolphinMapSize = 3;
+static const int dolphinMapSize = 6;
static int dolphinViewToDirModelColumn[] = {
- KDirModel::Name, // DolphinView::SortByName
- KDirModel::Size, // DolphinView::SortBySize
- KDirModel::ModifiedTime // DolphinView::SortByDate
+ KDirModel::Name, // DolphinView::SortByName
+ KDirModel::Size, // DolphinView::SortBySize
+ KDirModel::ModifiedTime, // DolphinView::SortByDate
+ KDirModel::Permissions, // DolphinView::SortByPermissions
+ KDirModel::Owner, // DolphinView::SortByOwner
+ KDirModel::Group // DolphinView::SortByGroup
};
static DolphinView::Sorting dirModelColumnToDolphinView[] = {
- DolphinView::SortByName, // KDirModel::Name
- DolphinView::SortBySize, // KDirModel::Size
- DolphinView::SortByDate // KDirModel::ModifiedTime
+ DolphinView::SortByName, // KDirModel::Name
+ DolphinView::SortBySize, // KDirModel::Size
+ DolphinView::SortByDate, // KDirModel::ModifiedTime
+ DolphinView::SortByPermissions, // KDirModel::Permissions
+ DolphinView::SortByOwner, // KDirModel::Owner
+ DolphinView::SortByGroup // KDirModel::Group
};
QSortFilterProxyModel::sort(column, sortOrder);
}
+DolphinView::Sorting DolphinSortFilterProxyModel::sortingForColumn(int column)
+{
+ if ((column >= 0) && (column <= dolphinMapSize)) {
+ return dirModelColumnToDolphinView[column];
+ }
+ return DolphinView::SortByName;
+}
+
bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
const QModelIndex& right) const
{
virtual void sort(int column,
Qt::SortOrder order = Qt::AscendingOrder);
+ /**
+ * Helper method to get the DolphinView::Sorting type for a given
+ * column \a column. If the column is smaller 0 or greater than the
+ * available columns, DolphinView::SortByName is returned.
+ */
+ static DolphinView::Sorting sortingForColumn(int column);
+
protected:
virtual bool lessThan(const QModelIndex& left,
const QModelIndex& right) const;
<Action name="by_name" />
<Action name="by_size" />
<Action name="by_date" />
+ <Action name="by_permissions" />
+ <Action name="by_owner" />
+ <Action name="by_group" />
<Separator/>
<Action name="descending" />
</Menu>
enum Sorting
{
SortByName = 0,
- SortBySize = 1,
- SortByDate = 2,
- MaxSortEnum = SortByDate
+ SortBySize,
+ SortByDate,
+ SortByPermissions,
+ SortByOwner,
+ SortByGroup,
+ MaxSortEnum = SortByGroup
};
DolphinView(DolphinMainWindow* mainwindow,
#include "viewpropsprogressinfo.h"
#include "dolphinview.h"
#include "dolphinsettings.h"
+#include "dolphinsortfilterproxymodel.h"
#include "generalsettings.h"
#include "viewproperties.h"
m_sorting->addItem("By Name");
m_sorting->addItem("By Size");
m_sorting->addItem("By Date");
- int sortingIdx = 0;
- switch (m_viewProps->sorting()) {
- case DolphinView::SortByName: sortingIdx = 0; break;
- case DolphinView::SortBySize: sortingIdx = 1; break;
- case DolphinView::SortByDate: sortingIdx = 2; break;
- default: break;
- }
- m_sorting->setCurrentIndex(sortingIdx);
+ m_sorting->addItem("By Permissions");
+ m_sorting->addItem("By Owner");
+ m_sorting->addItem("By Group");
+ m_sorting->setCurrentIndex(m_viewProps->sorting());
QLabel* sortOrderLabel = new QLabel(i18n("Sort order:"), propsBox);
m_sortOrder = new QComboBox(propsBox);
void ViewPropertiesDialog::slotSortingChanged(int index)
{
- DolphinView::Sorting sorting = DolphinView::SortByName;
- switch (index) {
- case 1: sorting = DolphinView::SortBySize; break;
- case 2: sorting = DolphinView::SortByDate; break;
- default: break;
- }
+ const DolphinView::Sorting sorting = DolphinSortFilterProxyModel::sortingForColumn(index);
m_viewProps->setSorting(sorting);
m_isDirty = true;
}