X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/307285e9635a4bf584d6e5d7478876b90ef870f0..6a09781a3b99bbca2b2c66ee3041208a02ead0ca:/src/settings/viewpropertiesdialog.cpp diff --git a/src/settings/viewpropertiesdialog.cpp b/src/settings/viewpropertiesdialog.cpp index 700bdb90b..576154f2b 100644 --- a/src/settings/viewpropertiesdialog.cpp +++ b/src/settings/viewpropertiesdialog.cpp @@ -21,27 +21,21 @@ #include "viewpropertiesdialog.h" #include "additionalinfodialog.h" -#include "dolphinview.h" -#include "settings/dolphinsettings.h" -#include "dolphinsortfilterproxymodel.h" +#include "kitemviews/kfileitemmodel.h" +#include "views/dolphinview.h" #include "dolphin_generalsettings.h" #include "dolphin_iconsmodesettings.h" -#include "viewproperties.h" #include "viewpropsprogressinfo.h" -#include -#ifdef HAVE_NEPOMUK -#include -#endif +#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -54,6 +48,8 @@ #include #include +#include + ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : KDialog(dolphinView), m_isDirty(false), @@ -62,7 +58,8 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : m_viewMode(0), m_sortOrder(0), m_sorting(0), - m_showPreview(0), + m_sortFoldersFirst(0), + m_previewsShown(0), m_showInGroups(0), m_showHiddenFiles(0), m_additionalInfo(0), @@ -71,8 +68,8 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : m_applyToAllFolders(0), m_useAsDefault(0) { - Q_ASSERT(dolphinView != 0); - const bool useGlobalViewProps = DolphinSettings::instance().generalSettings()->globalViewProps(); + Q_ASSERT(dolphinView); + const bool useGlobalViewProps = GeneralSettings::globalViewProps(); setCaption(i18nc("@title:window", "View Properties")); setButtons(KDialog::Ok | KDialog::Cancel | KDialog::Apply); @@ -94,9 +91,9 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : QLabel* viewModeLabel = new QLabel(i18nc("@label:listbox", "View mode:"), propsGrid); m_viewMode = new KComboBox(propsGrid); - m_viewMode->addItem(KIcon("view-list-icons"), i18nc("@item:inlistbox", "Icons")); - m_viewMode->addItem(KIcon("view-list-details"), i18nc("@item:inlistbox", "Details")); - m_viewMode->addItem(KIcon("view-file-columns"), i18nc("@item:inlistbox", "Column")); + m_viewMode->addItem(QIcon::fromTheme("view-list-icons"), i18nc("@item:inlistbox", "Icons"), DolphinView::IconsView); + m_viewMode->addItem(QIcon::fromTheme("view-list-details"), i18nc("@item:inlistbox", "Compact"), DolphinView::CompactView); + m_viewMode->addItem(QIcon::fromTheme("view-list-tree"), i18nc("@item:inlistbox", "Details"), DolphinView::DetailsView); QLabel* sortingLabel = new QLabel(i18nc("@label:listbox", "Sorting:"), propsGrid); QWidget* sortingBox = new QWidget(propsGrid); @@ -106,27 +103,17 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : m_sortOrder->addItem(i18nc("@item:inlistbox Sort", "Descending")); m_sorting = new KComboBox(sortingBox); - m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Name")); - m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Size")); - m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Date")); - m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Permissions")); - m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Owner")); - m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Group")); - m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Type")); -#ifdef HAVE_NEPOMUK - // TODO: Hided "sort by rating" and "sort by tags" as without caching the performance - // is too slow currently (Nepomuk will support caching in future releases). - // - // if (!Nepomuk::ResourceManager::instance()->init()) { - // m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Rating")); - // m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Tags")); - // } -#endif - m_showPreview = new QCheckBox(i18nc("@option:check", "Show preview"), propsBox); - m_showInGroups = new QCheckBox(i18nc("@option:check", "Show in groups"), propsBox); - m_showHiddenFiles = new QCheckBox(i18nc("@option:check", "Show hidden files"), propsBox); - - m_additionalInfo = new QPushButton(i18nc("@action:button", "Additional Information"), propsBox); + const QList rolesInfo = KFileItemModel::rolesInformation(); + foreach (const KFileItemModel::RoleInfo& info, rolesInfo) { + m_sorting->addItem(info.translation, info.role); + } + + m_sortFoldersFirst = new QCheckBox(i18nc("@option:check", "Show folders first")); + m_previewsShown = new QCheckBox(i18nc("@option:check", "Show preview")); + m_showInGroups = new QCheckBox(i18nc("@option:check", "Show in groups")); + m_showHiddenFiles = new QCheckBox(i18nc("@option:check", "Show hidden files")); + + m_additionalInfo = new QPushButton(i18nc("@action:button", "Additional Information")); QHBoxLayout* sortingLayout = new QHBoxLayout(); sortingLayout->setMargin(0); @@ -142,30 +129,33 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : QVBoxLayout* propsBoxLayout = new QVBoxLayout(propsBox); propsBoxLayout->addWidget(propsGrid); - propsBoxLayout->addWidget(m_showPreview); + propsBoxLayout->addWidget(m_sortFoldersFirst); + propsBoxLayout->addWidget(m_previewsShown); propsBoxLayout->addWidget(m_showInGroups); propsBoxLayout->addWidget(m_showHiddenFiles); propsBoxLayout->addWidget(m_additionalInfo); topLayout->addWidget(propsBox); - connect(m_viewMode, SIGNAL(activated(int)), - this, SLOT(slotViewModeChanged(int))); - connect(m_sorting, SIGNAL(activated(int)), - this, SLOT(slotSortingChanged(int))); - connect(m_sortOrder, SIGNAL(activated(int)), - this, SLOT(slotSortOrderChanged(int))); - connect(m_additionalInfo, SIGNAL(clicked()), - this, SLOT(configureAdditionalInfo())); - connect(m_showPreview, SIGNAL(clicked()), - this, SLOT(slotShowPreviewChanged())); - connect(m_showInGroups, SIGNAL(clicked()), - this, SLOT(slotCategorizedSortingChanged())); - connect(m_showHiddenFiles, SIGNAL(clicked()), - this, SLOT(slotShowHiddenFilesChanged())); - - connect(this, SIGNAL(okClicked()), this, SLOT(slotOk())); - connect(this, SIGNAL(applyClicked()), this, SLOT(slotApply())); + connect(m_viewMode, static_cast(&KComboBox::currentIndexChanged), + this, &ViewPropertiesDialog::slotViewModeChanged); + connect(m_sorting, static_cast(&KComboBox::currentIndexChanged), + this, &ViewPropertiesDialog::slotSortingChanged); + connect(m_sortOrder, static_cast(&KComboBox::currentIndexChanged), + this, &ViewPropertiesDialog::slotSortOrderChanged); + connect(m_additionalInfo, &QPushButton::clicked, + this, &ViewPropertiesDialog::configureAdditionalInfo); + connect(m_sortFoldersFirst, &QCheckBox::clicked, + this, &ViewPropertiesDialog::slotSortFoldersFirstChanged); + connect(m_previewsShown, &QCheckBox::clicked, + this, &ViewPropertiesDialog::slotShowPreviewChanged); + connect(m_showInGroups, &QCheckBox::clicked, + this, &ViewPropertiesDialog::slotGroupedSortingChanged); + connect(m_showHiddenFiles, &QCheckBox::clicked, + this, &ViewPropertiesDialog::slotShowHiddenFilesChanged); + + connect(this, &ViewPropertiesDialog::okClicked, this, &ViewPropertiesDialog::slotOk); + connect(this, &ViewPropertiesDialog::applyClicked, this, &ViewPropertiesDialog::slotApply); // Only show the following settings if the view properties are remembered // for each directory: @@ -177,7 +167,7 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : "Current folder"), applyBox); m_applyToCurrentFolder->setChecked(true); m_applyToSubFolders = new QRadioButton(i18nc("@option:radio Apply View Properties To", - "Current folder including all sub folders"), applyBox); + "Current folder including all sub-folders"), applyBox); m_applyToAllFolders = new QRadioButton(i18nc("@option:radio Apply View Properties To", "All folders"), applyBox); @@ -191,19 +181,19 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : applyBoxLayout->addWidget(m_applyToSubFolders); applyBoxLayout->addWidget(m_applyToAllFolders); - m_useAsDefault = new QCheckBox(i18nc("@option:check", "Use as default for new folders"), main); + m_useAsDefault = new QCheckBox(i18nc("@option:check", "Use these view properties as default"), main); topLayout->addWidget(applyBox); topLayout->addWidget(m_useAsDefault); - connect(m_applyToCurrentFolder, SIGNAL(clicked()), - this, SLOT(markAsDirty())); - connect(m_applyToSubFolders, SIGNAL(clicked()), - this, SLOT(markAsDirty())); - connect(m_applyToAllFolders, SIGNAL(clicked()), - this, SLOT(markAsDirty())); - connect(m_useAsDefault, SIGNAL(clicked()), - this, SLOT(markAsDirty())); + connect(m_applyToCurrentFolder, &QRadioButton::clicked, + this, &ViewPropertiesDialog::markAsDirty); + connect(m_applyToSubFolders, &QRadioButton::clicked, + this, &ViewPropertiesDialog::markAsDirty); + connect(m_applyToAllFolders, &QRadioButton::clicked, + this, &ViewPropertiesDialog::markAsDirty); + connect(m_useAsDefault, &QCheckBox::clicked, + this, &ViewPropertiesDialog::markAsDirty); } main->setLayout(topLayout); @@ -236,77 +226,85 @@ void ViewPropertiesDialog::slotOk() void ViewPropertiesDialog::slotApply() { applyViewProperties(); + markAsDirty(false); } void ViewPropertiesDialog::slotViewModeChanged(int index) { - m_viewProps->setViewMode(static_cast(index)); - m_isDirty = true; - - const DolphinView::Mode mode = m_viewProps->viewMode(); - m_showInGroups->setEnabled(mode == DolphinView::IconsView); - m_additionalInfo->setEnabled(mode != DolphinView::ColumnView); + const QVariant itemData = m_viewMode->itemData(index); + const DolphinView::Mode viewMode = static_cast(itemData.toInt()); + m_viewProps->setViewMode(viewMode); + markAsDirty(true); } void ViewPropertiesDialog::slotSortingChanged(int index) { - const DolphinView::Sorting sorting = DolphinSortFilterProxyModel::sortingForColumn(index); - m_viewProps->setSorting(sorting); - m_isDirty = true; + const QByteArray role = m_sorting->itemData(index).toByteArray(); + m_viewProps->setSortRole(role); + markAsDirty(true); } void ViewPropertiesDialog::slotSortOrderChanged(int index) { const Qt::SortOrder sortOrder = (index == 0) ? Qt::AscendingOrder : Qt::DescendingOrder; m_viewProps->setSortOrder(sortOrder); - m_isDirty = true; + markAsDirty(true); } -void ViewPropertiesDialog::slotCategorizedSortingChanged() +void ViewPropertiesDialog::slotGroupedSortingChanged() { - m_viewProps->setCategorizedSorting(m_showInGroups->isChecked()); - m_isDirty = true; + m_viewProps->setGroupedSorting(m_showInGroups->isChecked()); + markAsDirty(true); +} + +void ViewPropertiesDialog::slotSortFoldersFirstChanged() +{ + const bool foldersFirst = m_sortFoldersFirst->isChecked(); + m_viewProps->setSortFoldersFirst(foldersFirst); + markAsDirty(true); } void ViewPropertiesDialog::slotShowPreviewChanged() { - const bool show = m_showPreview->isChecked(); - m_viewProps->setShowPreview(show); - m_isDirty = true; + const bool show = m_previewsShown->isChecked(); + m_viewProps->setPreviewsShown(show); + markAsDirty(true); } void ViewPropertiesDialog::slotShowHiddenFilesChanged() { const bool show = m_showHiddenFiles->isChecked(); - m_viewProps->setShowHiddenFiles(show); - m_isDirty = true; + m_viewProps->setHiddenFilesShown(show); + markAsDirty(true); } -void ViewPropertiesDialog::markAsDirty() +void ViewPropertiesDialog::markAsDirty(bool isDirty) { - m_isDirty = true; + m_isDirty = isDirty; + enableButtonApply(isDirty); } void ViewPropertiesDialog::configureAdditionalInfo() { - KFileItemDelegate::InformationList info = m_viewProps->additionalInfo(); - const bool useDefaultInfo = (m_viewProps->viewMode() == DolphinView::DetailsView) && - (info.isEmpty() || info.contains(KFileItemDelegate::NoInformation)); - if (useDefaultInfo) { + QList visibleRoles = m_viewProps->visibleRoles(); + const bool useDefaultRoles = (m_viewProps->viewMode() == DolphinView::DetailsView) && visibleRoles.isEmpty(); + if (useDefaultRoles) { // Using the details view without any additional information (-> additional column) // makes no sense and leads to a usability problem as no viewport area is available // anymore. Hence as fallback provide at least a size and date column. - info.clear(); - info.append(KFileItemDelegate::Size); - info.append(KFileItemDelegate::ModificationTime); - m_viewProps->setAdditionalInfo(info); + visibleRoles.clear(); + visibleRoles.append("text"); + visibleRoles.append("size"); + visibleRoles.append("date"); + m_viewProps->setVisibleRoles(visibleRoles); } - AdditionalInfoDialog dialog(this, info); - if (dialog.exec() == QDialog::Accepted) { - m_viewProps->setAdditionalInfo(dialog.additionalInfo()); - m_isDirty = true; + QPointer dialog = new AdditionalInfoDialog(this, visibleRoles); + if (dialog->exec() == QDialog::Accepted) { + m_viewProps->setVisibleRoles(dialog->visibleRoles()); + markAsDirty(true); } + delete dialog; } void ViewPropertiesDialog::applyViewProperties() @@ -316,10 +314,9 @@ void ViewPropertiesDialog::applyViewProperties() return; } - const bool applyToSubFolders = (m_applyToSubFolders != 0) && - m_applyToSubFolders->isChecked(); + const bool applyToSubFolders = m_applyToSubFolders && m_applyToSubFolders->isChecked(); if (applyToSubFolders) { - const QString text(i18nc("@info", "The view properties of all sub folders will be changed. Do you want to continue?")); + const QString text(i18nc("@info", "The view properties of all sub-folders will be changed. Do you want to continue?")); if (KMessageBox::questionYesNo(this, text) == KMessageBox::No) { return; } @@ -332,25 +329,22 @@ void ViewPropertiesDialog::applyViewProperties() info->show(); } - const bool applyToAllFolders = (m_applyToAllFolders != 0) && - m_applyToAllFolders->isChecked(); + const bool applyToAllFolders = m_applyToAllFolders && m_applyToAllFolders->isChecked(); // If the user selected 'Apply To All Folders' the view properties implicitely // are also used as default for new folders. - const bool useAsDefault = applyToAllFolders || - ((m_useAsDefault != 0) && m_useAsDefault->isChecked()); + const bool useAsDefault = applyToAllFolders || (m_useAsDefault && m_useAsDefault->isChecked()); if (useAsDefault) { // For directories where no .directory file is available, the .directory // file stored for the global view properties is used as fallback. To update // this file we temporary turn on the global view properties mode. - GeneralSettings* settings = DolphinSettings::instance().generalSettings(); - Q_ASSERT(!settings->globalViewProps()); + Q_ASSERT(!GeneralSettings::globalViewProps()); - settings->setGlobalViewProps(true); + GeneralSettings::setGlobalViewProps(true); ViewProperties defaultProps(m_dolphinView->url()); defaultProps.setDirProperties(*m_viewProps); defaultProps.save(); - settings->setGlobalViewProps(false); + GeneralSettings::setGlobalViewProps(false); } if (applyToAllFolders) { @@ -361,45 +355,55 @@ void ViewPropertiesDialog::applyViewProperties() // Updating the global view properties time stamp in the general settings makes // all existing viewproperties invalid, as they have a smaller time stamp. - GeneralSettings* settings = DolphinSettings::instance().generalSettings(); + GeneralSettings* settings = GeneralSettings::self(); settings->setViewPropsTimestamp(QDateTime::currentDateTime()); + settings->writeConfig(); } m_dolphinView->setMode(m_viewProps->viewMode()); - m_dolphinView->setSorting(m_viewProps->sorting()); + m_dolphinView->setSortRole(m_viewProps->sortRole()); m_dolphinView->setSortOrder(m_viewProps->sortOrder()); - m_dolphinView->setCategorizedSorting(m_viewProps->categorizedSorting()); - m_dolphinView->setAdditionalInfo(m_viewProps->additionalInfo()); - m_dolphinView->setShowPreview(m_viewProps->showPreview()); - m_dolphinView->setShowHiddenFiles(m_viewProps->showHiddenFiles()); + m_dolphinView->setSortFoldersFirst(m_viewProps->sortFoldersFirst()); + m_dolphinView->setGroupedSorting(m_viewProps->groupedSorting()); + m_dolphinView->setVisibleRoles(m_viewProps->visibleRoles()); + m_dolphinView->setPreviewsShown(m_viewProps->previewsShown()); + m_dolphinView->setHiddenFilesShown(m_viewProps->hiddenFilesShown()); m_viewProps->save(); - m_isDirty = false; + markAsDirty(false); } void ViewPropertiesDialog::loadSettings() { - // load view mode - const int index = static_cast(m_viewProps->viewMode()); - m_viewMode->setCurrentIndex(index); + // Load view mode + switch (m_viewProps->viewMode()) { + case DolphinView::IconsView: m_viewMode->setCurrentIndex(0); break; + case DolphinView::CompactView: m_viewMode->setCurrentIndex(1); break; + case DolphinView::DetailsView: m_viewMode->setCurrentIndex(2); break; + default: break; + } - // load sort order and sorting + // Load sort order and sorting const int sortOrderIndex = (m_viewProps->sortOrder() == Qt::AscendingOrder) ? 0 : 1; m_sortOrder->setCurrentIndex(sortOrderIndex); - m_sorting->setCurrentIndex(m_viewProps->sorting()); - const bool enabled = (index == DolphinView::DetailsView) || - (index == DolphinView::IconsView); - m_additionalInfo->setEnabled(enabled); - - // load show preview, show in groups and show hidden files settings - m_showPreview->setChecked(m_viewProps->showPreview()); + const QList rolesInfo = KFileItemModel::rolesInformation(); + int sortRoleIndex = 0; + for (int i = 0; i < rolesInfo.count(); ++i) { + if (rolesInfo[i].role == m_viewProps->sortRole()) { + sortRoleIndex = i; + break; + } + } + m_sorting->setCurrentIndex(sortRoleIndex); - m_showInGroups->setChecked(m_viewProps->categorizedSorting()); - m_showInGroups->setEnabled(index == DolphinView::IconsView); // only the icons view supports categorized sorting + m_sortFoldersFirst->setChecked(m_viewProps->sortFoldersFirst()); - m_showHiddenFiles->setChecked(m_viewProps->showHiddenFiles()); + // Load show preview, show in groups and show hidden files settings + m_previewsShown->setChecked(m_viewProps->previewsShown()); + m_showInGroups->setChecked(m_viewProps->groupedSorting()); + m_showHiddenFiles->setChecked(m_viewProps->hiddenFilesShown()); + markAsDirty(false); } -#include "viewpropertiesdialog.moc"