#include "dolphinmodel.h"
#include "dolphincontroller.h"
#include "dolphinfileitemdelegate.h"
-#include "dolphinsettings.h"
+#include "settings/dolphinsettings.h"
#include "dolphinsortfilterproxymodel.h"
#include "dolphinviewautoscroller.h"
#include "draganddrophelper.h"
this, SLOT(synchronizeSortingState(int)));
headerView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(headerView, SIGNAL(customContextMenuRequested(const QPoint&)),
- this, SLOT(configureColumns(const QPoint&)));
+ this, SLOT(configureSettings(const QPoint&)));
connect(headerView, SIGNAL(sectionResized(int, int, int)),
this, SLOT(slotHeaderSectionResized(int, int, int)));
connect(headerView, SIGNAL(sectionHandleDoubleClicked(int)),
return isAboveEmptySpace ? QModelIndex() : index;
}
-void DolphinDetailsView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command)
+void DolphinDetailsView::setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command)
{
// We must override setSelection() as Qt calls it internally and when this happens
// we must ensure that the default indexAt() is used.
void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting)
{
- QHeaderView* headerView = header();
- headerView->setSortIndicator(sorting, headerView->sortIndicatorOrder());
+ header()->setSortIndicator(sorting, header()->sortIndicatorOrder());
}
void DolphinDetailsView::setSortIndicatorOrder(Qt::SortOrder sortOrder)
{
- QHeaderView* headerView = header();
- headerView->setSortIndicator(headerView->sortIndicatorSection(), sortOrder);
+ header()->setSortIndicator(header()->sortIndicatorSection(), sortOrder);
}
void DolphinDetailsView::synchronizeSortingState(int column)
updateDecorationSize(view->showPreview());
}
-void DolphinDetailsView::configureColumns(const QPoint& pos)
+void DolphinDetailsView::configureSettings(const QPoint& pos)
{
KMenu popup(this);
popup.addTitle(i18nc("@title:menu", "Columns"));
+ // add checkbox items for each column
QHeaderView* headerView = header();
for (int i = DolphinModel::Size; i <= DolphinModel::Type; ++i) {
const int logicalIndex = headerView->logicalIndex(i);
action->setChecked(!headerView->isSectionHidden(logicalIndex));
action->setData(i);
}
+ popup.addSeparator();
+
+ // add a checkbox item for the "Expandable Folders" setting
+ DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+ QAction* expandableFoldersAction = popup.addAction(i18nc("@option:check", "Expandable Folders"));
+ expandableFoldersAction->setCheckable(true);
+ expandableFoldersAction->setChecked(settings->expandableFolders());
QAction* activatedAction = popup.exec(header()->mapToGlobal(pos));
- if (activatedAction != 0) {
+ if (activatedAction == expandableFoldersAction) {
+ const bool expand = expandableFoldersAction->isChecked();
+ if (!expand) {
+ // collapse all expanded folders, as QTreeView::setItemsExpandable(false)
+ // does not do this task
+ const int rowCount = model()->rowCount();
+ for (int row = 0; row < rowCount; ++row) {
+ setExpanded(model()->index(row, 0), false);
+ }
+ }
+ settings->setExpandableFolders(expand);
+ setRootIsDecorated(expand);
+ setItemsExpandable(expand);
+ } else if (activatedAction != 0) {
const bool show = activatedAction->isChecked();
const int columnIndex = activatedAction->data().toInt();
Q_UNUSED(newSize);
// If the user changes the size of the headers, the autoresize feature should be
// turned off. As there is no dedicated interface to find out whether the header
- // section has been resized by the user or by a resize event, the following approach is used:
- if ((QApplication::mouseButtons() & Qt::LeftButton) && isVisible()) {
+ // section has been resized by the user or by a resize event, another approach is used.
+ // Attention: Take care when changing the if-condition to verify that there is no
+ // regression in combination with bug 178630 (see fix in comment #8).
+ if ((QApplication::mouseButtons() & Qt::LeftButton) && header()->underMouse()) {
disableAutoResizing();
}
}
// reasons the exact necessary width for full visible names is
// only checked for up to 200 items:
const int rowCount = model()->rowCount();
- if (rowCount < 200) {
+ if (rowCount > 0 && rowCount < 200) {
const int nameWidth = sizeHintForColumn(DolphinModel::Name);
if (nameWidth + requiredWidth <= viewport()->width()) {
columnWidth[KDirModel::Name] = viewport()->width() - requiredWidth;