diff options
| -rw-r--r-- | src/dolphindetailsview.cpp | 39 | ||||
| -rw-r--r-- | src/dolphinmainwindow.cpp | 39 | ||||
| -rw-r--r-- | src/dolphinmainwindow.h | 9 | ||||
| -rw-r--r-- | src/dolphinsortfilterproxymodel.cpp | 28 | ||||
| -rw-r--r-- | src/dolphinsortfilterproxymodel.h | 7 | ||||
| -rw-r--r-- | src/dolphinui.rc | 3 | ||||
| -rw-r--r-- | src/dolphinview.h | 9 | ||||
| -rw-r--r-- | src/viewpropertiesdialog.cpp | 20 |
8 files changed, 105 insertions, 49 deletions
diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index f434936dc..24692b5a8 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -21,6 +21,7 @@ #include "dolphindetailsview.h" #include "dolphinmainwindow.h" +#include "dolphinsortfilterproxymodel.h" #include "dolphinview.h" #include "viewproperties.h" @@ -142,33 +143,21 @@ void DolphinDetailsView::synchronizeSortingState(int column) // 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; - } + DolphinView::Sorting sorting = DolphinSortFilterProxyModel::sortingForColumn(column); + const Qt::SortOrder sortOrder = header()->sortIndicatorOrder(); - 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); - } + // 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" diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 5e9948939..262bc8558 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -256,6 +256,15 @@ void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting) case DolphinView::SortByDate:
action = actionCollection()->action("by_date");
break;
+ case DolphinView::SortByPermissions:
+ action = actionCollection()->action("by_permissions");
+ break;
+ case DolphinView::SortByOwner:
+ action = actionCollection()->action("by_owner");
+ break;
+ case DolphinView::SortByGroup:
+ action = actionCollection()->action("by_group");
+ break;
default:
break;
}
@@ -635,6 +644,21 @@ void DolphinMainWindow::sortByDate() m_activeView->setSorting(DolphinView::SortByDate);
}
+void DolphinMainWindow::sortByPermissions()
+{
+ m_activeView->setSorting(DolphinView::SortByPermissions);
+}
+
+void DolphinMainWindow::sortByOwner()
+{
+ m_activeView->setSorting(DolphinView::SortByOwner);
+}
+
+void DolphinMainWindow::sortByGroup()
+{
+ m_activeView->setSorting(DolphinView::SortByGroup);
+}
+
void DolphinMainWindow::toggleSortOrder()
{
const Qt::SortOrder order = (m_activeView->sortOrder() == Qt::Ascending) ?
@@ -1035,10 +1059,25 @@ void DolphinMainWindow::setupActions() sortByDate->setText(i18n("By Date"));
connect(sortByDate, SIGNAL(triggered()), this, SLOT(sortByDate()));
+ KToggleAction* sortByPermissions = actionCollection()->add<KToggleAction>("by_permissions");
+ sortByPermissions->setText(i18n("By Permissions"));
+ connect(sortByPermissions, SIGNAL(triggered()), this, SLOT(sortByPermissions()));
+
+ KToggleAction* sortByOwner = actionCollection()->add<KToggleAction>("by_owner");
+ sortByOwner->setText(i18n("By Owner"));
+ connect(sortByOwner, SIGNAL(triggered()), this, SLOT(sortByOwner()));
+
+ KToggleAction* sortByGroup = actionCollection()->add<KToggleAction>("by_group");
+ sortByGroup->setText(i18n("By Group"));
+ connect(sortByGroup, SIGNAL(triggered()), this, SLOT(sortByGroup()));
+
QActionGroup* sortGroup = new QActionGroup(this);
sortGroup->addAction(sortByName);
sortGroup->addAction(sortBySize);
sortGroup->addAction(sortByDate);
+ sortGroup->addAction(sortByPermissions);
+ sortGroup->addAction(sortByOwner);
+ sortGroup->addAction(sortByGroup);
KToggleAction* sortDescending = actionCollection()->add<KToggleAction>("descending");
sortDescending->setText(i18n("Descending"));
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index bc285a4db..4cfe31077 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -217,6 +217,15 @@ private slots: /** 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(); diff --git a/src/dolphinsortfilterproxymodel.cpp b/src/dolphinsortfilterproxymodel.cpp index 20b8bf164..a1dc3e3d0 100644 --- a/src/dolphinsortfilterproxymodel.cpp +++ b/src/dolphinsortfilterproxymodel.cpp @@ -24,17 +24,23 @@ #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 }; @@ -81,6 +87,14 @@ void DolphinSortFilterProxyModel::sort(int column, Qt::SortOrder sortOrder) 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 { diff --git a/src/dolphinsortfilterproxymodel.h b/src/dolphinsortfilterproxymodel.h index d73f4579b..87d074e07 100644 --- a/src/dolphinsortfilterproxymodel.h +++ b/src/dolphinsortfilterproxymodel.h @@ -61,6 +61,13 @@ public: 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; diff --git a/src/dolphinui.rc b/src/dolphinui.rc index 9bdf9143a..601c9f859 100644 --- a/src/dolphinui.rc +++ b/src/dolphinui.rc @@ -26,6 +26,9 @@ <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> diff --git a/src/dolphinview.h b/src/dolphinview.h index cc9f11dc1..dbd6622d7 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -94,9 +94,12 @@ public: enum Sorting { SortByName = 0, - SortBySize = 1, - SortByDate = 2, - MaxSortEnum = SortByDate + SortBySize, + SortByDate, + SortByPermissions, + SortByOwner, + SortByGroup, + MaxSortEnum = SortByGroup }; DolphinView(DolphinMainWindow* mainwindow, diff --git a/src/viewpropertiesdialog.cpp b/src/viewpropertiesdialog.cpp index dea4020f2..48e565a09 100644 --- a/src/viewpropertiesdialog.cpp +++ b/src/viewpropertiesdialog.cpp @@ -22,6 +22,7 @@ #include "viewpropsprogressinfo.h" #include "dolphinview.h" #include "dolphinsettings.h" +#include "dolphinsortfilterproxymodel.h" #include "generalsettings.h" #include "viewproperties.h" @@ -78,14 +79,10 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : 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); @@ -172,12 +169,7 @@ void ViewPropertiesDialog::slotViewModeChanged(int index) 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; } |
