If the user changes the sorting by clicking on a header section, the resulting sorting state must be synchronized with the Dolphin menu.

svn path=/trunk/playground/utils/dolphin/; revision=630740
This commit is contained in:
Peter Penz 2007-02-06 06:43:34 +00:00
parent 9eb1cac4b7
commit ac62df5672
2 changed files with 54 additions and 8 deletions

View file

@ -20,15 +20,17 @@
#include "dolphindetailsview.h"
#include <assert.h>
#include "dolphinmainwindow.h"
#include "dolphinview.h"
#include "viewproperties.h"
#include <assert.h>
#include <kdirmodel.h>
#include <QHeaderView>
DolphinDetailsView::DolphinDetailsView(DolphinView* parent) :
QTreeView(parent),
m_parentView(parent)
m_dolphinView(parent)
{
assert(parent != 0);
@ -41,6 +43,9 @@ DolphinDetailsView::DolphinDetailsView(DolphinView* parent) :
setSortIndicatorSection(props.sorting());
setSortIndicatorOrder(props.sortOrder());
connect(header(), SIGNAL(sectionClicked(int)),
this, SLOT(synchronizeSortingState(int)));
connect(parent, SIGNAL(sortingChanged(DolphinView::Sorting)),
this, SLOT(setSortIndicatorSection(DolphinView::Sorting)));
connect(parent, SIGNAL(sortOrderChanged(Qt::SortOrder)),
@ -88,16 +93,16 @@ void DolphinDetailsView::contextMenuEvent(QContextMenuEvent* event)
const QModelIndex index = indexAt(event->pos());
if (index.isValid()) {
item = m_parentView->fileItem(index);
item = m_dolphinView->fileItem(index);
}
m_parentView->openContextMenu(item, event->globalPos());
m_dolphinView->openContextMenu(item, event->globalPos());
}
void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event)
{
QTreeView::mouseReleaseEvent(event);
m_parentView->declareViewActive();
m_dolphinView->declareViewActive();
}
void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event)
@ -115,8 +120,8 @@ void DolphinDetailsView::dropEvent(QDropEvent* event)
// TODO: handle dropping above a directory
const KUrl& destination = m_parentView->url();
m_parentView->mainWindow()->dropUrls(urls, destination);
const KUrl& destination = m_dolphinView->url();
m_dolphinView->mainWindow()->dropUrls(urls, destination);
}
}
@ -132,4 +137,38 @@ void DolphinDetailsView::setSortIndicatorOrder(Qt::SortOrder sortOrder)
headerView->setSortIndicator(headerView->sortIndicatorSection(), sortOrder);
}
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;
}
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"

View file

@ -61,8 +61,15 @@ private slots:
*/
void setSortIndicatorOrder(Qt::SortOrder sortOrder);
/**
* Synchronizes the sorting state of the Dolphin menu 'View -> Sort'
* with the current state of the details view.
* @param column Index of the current sorting column.
*/
void synchronizeSortingState(int column);
private:
DolphinView* m_parentView;
DolphinView* m_dolphinView;
};
#endif