diff --git a/src/filewidgets/kdiroperator.cpp b/src/filewidgets/kdiroperator.cpp index 3dc2b8a6..0c9359f8 100644 --- a/src/filewidgets/kdiroperator.cpp +++ b/src/filewidgets/kdiroperator.cpp @@ -212,6 +212,9 @@ public: void _k_slotSortByType(); void _k_slotSortReversed(bool doReverse); void _k_slotToggleDirsFirst(); + void _k_slotToggleIconsView(); + void _k_slotToggleCompactView(); + void _k_slotToggleDetailsView(); void _k_slotToggleIgnoreCase(); void _k_slotStarted(); void _k_slotProgress(int); @@ -712,6 +715,51 @@ void KDirOperator::Private::_k_slotToggleDirsFirst() updateSorting(s); } +void KDirOperator::Private::_k_slotToggleIconsView() +{ + // Switch to simple view + KFile::FileView fileView = static_cast((viewKind & ~allViews()) | KFile::Simple); + parent->setView(fileView); + + // Put the icons on top + actionCollection->action(QStringLiteral("decorationAtTop"))->setChecked(true); + decorationPosition = QStyleOptionViewItem::Top; + + QListView *listView = qobject_cast(itemView); + listView->setFlow(QListView::LeftToRight); + + updateListViewGrid(); + listView->update(); +} + +void KDirOperator::Private::_k_slotToggleCompactView() +{ + // Switch to simple view + KFile::FileView fileView = static_cast((viewKind & ~allViews()) | KFile::Simple); + parent->setView(fileView); + + // Put the icons on the side + actionCollection->action(QStringLiteral("decorationAtLeft"))->setChecked(true); + decorationPosition = QStyleOptionViewItem::Left; + + QListView *listView = qobject_cast(itemView); + listView->setFlow(QListView::TopToBottom); + + updateListViewGrid(); + listView->update(); +} + +void KDirOperator::Private::_k_slotToggleDetailsView() +{ + KFile::FileView view; + if (true) { + view = static_cast((viewKind & ~allViews()) | KFile::DetailTree); + } else { + view = static_cast((viewKind & ~allViews()) | KFile::Detail); + } + parent->setView(view); +} + void KDirOperator::Private::_k_slotToggleIgnoreCase() { // TODO: port to Qt4's QAbstractItemView @@ -2000,6 +2048,34 @@ void KDirOperator::setupActions() d->actionCollection->addAction(QStringLiteral("dirs first"), dirsFirstAction); connect(dirsFirstAction, SIGNAL(triggered(bool)), this, SLOT(_k_slotToggleDirsFirst())); + // View modes that match those of Dolphin + /* + TODO: + - Make buttons reflect current state when opening in icons or compact view + - Make compact view use a smaller icon size by default, like detailed tree view does + - Implement "Allow Expansion" option for the configure menu in the corner that toggles between detailed view and detailed tree view +*/ + KToggleAction *iconsViewAction = new KToggleAction(i18n("Icons View"), this); + iconsViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-list-icons"))); + d->actionCollection->addAction(QStringLiteral("icons view"), iconsViewAction); + connect(iconsViewAction, SIGNAL(triggered(bool)), this, SLOT(_k_slotToggleIconsView())); + + KToggleAction *compactViewAction = new KToggleAction(i18n("Compact View"), this); + compactViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-list-details"))); + d->actionCollection->addAction(QStringLiteral("compact view"), compactViewAction); + connect(compactViewAction, SIGNAL(triggered(bool)), this, SLOT(_k_slotToggleCompactView())); + + KToggleAction *detailsViewAction = new KToggleAction(i18n("Details View"), this); + detailsViewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-list-tree"))); + d->actionCollection->addAction(QStringLiteral("details view"), detailsViewAction); + connect(detailsViewAction, SIGNAL(triggered(bool)), this, SLOT(_k_slotToggleDetailsView())); + + QActionGroup *viewModeGroup = new QActionGroup(this); + viewModeGroup->setExclusive(true); + iconsViewAction->setActionGroup(viewModeGroup); + compactViewAction->setActionGroup(viewModeGroup); + detailsViewAction->setActionGroup(viewModeGroup); + d->decorationMenu = new KActionMenu(i18n("Icon Position"), this); d->actionCollection->addAction(QStringLiteral("decoration menu"), d->decorationMenu); @@ -2015,6 +2091,7 @@ void KDirOperator::setupActions() d->decorationMenu->addAction(topAction); QActionGroup *decorationGroup = new QActionGroup(this); + decorationGroup->setExclusive(true); d->leftAction->setActionGroup(decorationGroup); topAction->setActionGroup(decorationGroup); @@ -2181,6 +2258,8 @@ void KDirOperator::updateViewActions() d->actionCollection->action(QStringLiteral("detailed view"))->setChecked(KFile::isDetailView(fv)); d->actionCollection->action(QStringLiteral("tree view"))->setChecked(KFile::isTreeView(fv)); d->actionCollection->action(QStringLiteral("detailed tree view"))->setChecked(KFile::isDetailTreeView(fv)); + + d->actionCollection->action(QStringLiteral("details view"))->setChecked(KFile::isDetailTreeView(fv) || KFile::isDetailView(fv)); } void KDirOperator::readConfig(const KConfigGroup &configGroup) diff --git a/src/filewidgets/kdiroperator.h b/src/filewidgets/kdiroperator.h index 5fd1a93c..5e1d98c1 100644 --- a/src/filewidgets/kdiroperator.h +++ b/src/filewidgets/kdiroperator.h @@ -936,6 +936,9 @@ private: Q_PRIVATE_SLOT(d, void _k_slotSortByType()) Q_PRIVATE_SLOT(d, void _k_slotSortReversed(bool)) Q_PRIVATE_SLOT(d, void _k_slotToggleDirsFirst()) + Q_PRIVATE_SLOT(d, void _k_slotToggleIconsView()) + Q_PRIVATE_SLOT(d, void _k_slotToggleCompactView()) + Q_PRIVATE_SLOT(d, void _k_slotToggleDetailsView()) Q_PRIVATE_SLOT(d, void _k_slotToggleIgnoreCase()) Q_PRIVATE_SLOT(d, void _k_slotStarted()) Q_PRIVATE_SLOT(d, void _k_slotProgress(int)) diff --git a/src/filewidgets/kfilewidget.cpp b/src/filewidgets/kfilewidget.cpp index 39020c39..3dc150bc 100644 --- a/src/filewidgets/kfilewidget.cpp +++ b/src/filewidgets/kfilewidget.cpp @@ -487,6 +487,7 @@ KFileWidget::KFileWidget(const QUrl &_startDir, QWidget *parent) connect(showBookmarksAction, SIGNAL(toggled(bool)), SLOT(_k_toggleBookmarks(bool))); + // Build the settings menu KActionMenu *menu = new KActionMenu(QIcon::fromTheme(QStringLiteral("configure")), i18n("Options"), this); coll->addAction(QStringLiteral("extra menu"), menu); menu->setWhatsThis(i18n("This is the preferences menu for the file dialog. " @@ -497,12 +498,8 @@ KFileWidget::KFileWidget(const QUrl &_startDir, QWidget *parent) "
  • the Places panel
  • " "
  • file previews
  • " "
  • separating folders from files
  • ")); - menu->addAction(coll->action(QStringLiteral("view menu"))); - menu->addSeparator(); - menu->addAction(coll->action(QStringLiteral("decoration menu"))); - menu->addSeparator(); + menu->addAction(coll->action(QStringLiteral("show hidden"))); - menu->addSeparator(); menu->addAction(showSidebarAction); menu->addAction(showBookmarksAction); menu->addAction(coll->action(QStringLiteral("preview"))); @@ -543,6 +540,10 @@ KFileWidget::KFileWidget(const QUrl &_startDir, QWidget *parent) d->toolbar->addAction(coll->action(QStringLiteral("up"))); d->toolbar->addAction(coll->action(QStringLiteral("reload"))); d->toolbar->addSeparator(); + d->toolbar->addAction(coll->action(QStringLiteral("icons view"))); + d->toolbar->addAction(coll->action(QStringLiteral("compact view"))); + d->toolbar->addAction(coll->action(QStringLiteral("details view"))); + d->toolbar->addSeparator(); d->toolbar->addAction(coll->action(QStringLiteral("inline preview"))); d->toolbar->addAction(coll->action(QStringLiteral("sorting menu"))); d->toolbar->addWidget(midSpacer);