From c8ecdb45dde6f850a8eaefc661528dd2d43677a3 Mon Sep 17 00:00:00 2001 From: Conway Date: Sat, 24 Jan 2026 12:20:08 -0500 Subject: Adds options for pixel scaling and filename extensions --- src/kitemviews/kfileitemmodel.cpp | 58 ++++++------------------ src/kitemviews/private/kpixmapmodifier.cpp | 7 ++- src/settings/dolphin_contentdisplaysettings.kcfg | 4 ++ src/settings/dolphin_iconsmodesettings.kcfg | 4 ++ src/settings/viewmodes/contentdisplaytab.cpp | 8 ++++ src/settings/viewmodes/contentdisplaytab.h | 2 + src/settings/viewmodes/viewsettingstab.cpp | 42 ++++------------- src/settings/viewmodes/viewsettingstab.h | 6 +-- 8 files changed, 51 insertions(+), 80 deletions(-) diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index c8bac0b9d..1824fa8e8 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -15,7 +15,6 @@ #include "views/draganddrophelper.h" #include -#include #include #include #include @@ -750,41 +749,15 @@ void KFileItemModel::expandParentDirectories(const QUrl &url) m_urlsToExpand.insert(urlToExpand); } - auto expandUrlAfterInserted = [this](const QUrl &url) { - // need to wait for the item to be added to the model - QMetaObject::Connection *connection = new QMetaObject::Connection; - *connection = connect(this, &KFileItemModel::itemsInserted, this, [this, url, connection](const KItemRangeList &ranges) { - int idx = -1; - for (const KItemRange &it : ranges) { - for (int i = 0; i < it.count; ++i) { - if (fileItem(it.index + i).url() == url) { - idx = it.index + i; - break; - } - } - if (idx != -1) { - break; - } - } - - if (idx != -1) { - setExpanded(idx, true); - disconnect(*connection); - delete connection; - } - }); - }; - // KDirLister::open() must called at least once to trigger an initial // loading. The pending URLs that must be restored are handled // in slotCompleted(). - for (const auto &url : std::as_const(m_urlsToExpand)) { - const int idx = index(url); - if (idx >= 0) { + QSetIterator it2(m_urlsToExpand); + while (it2.hasNext()) { + const int idx = index(it2.next()); + if (idx >= 0 && !isExpanded(idx)) { setExpanded(idx, true); - } else { - // expand to url asynchronously - expandUrlAfterInserted(url); + break; } } } @@ -1839,8 +1812,8 @@ void KFileItemModel::emitItemsChangedAndTriggerResorting(const KItemRangeList &i void KFileItemModel::resetRoles() { - for (bool &i : m_requestRole) { - i = false; + for (int i = 0; i < RolesCount; ++i) { + m_requestRole[i] = false; } } @@ -1921,7 +1894,14 @@ QHash KFileItemModel::retrieveData(const KFileItem &item, } if (m_requestRole[NameRole]) { - data.insert(sharedValue("text"), item.text()); + QString displayName = item.text(); + if (ContentDisplaySettings::hideFileExtensions() && !isDir) { + const int dotIndex = displayName.lastIndexOf(QLatin1Char('.')); + if (dotIndex > 0) { + displayName = displayName.left(dotIndex); + } + } + data.insert(sharedValue("text"), displayName); } if (m_requestRole[ExtensionRole] && !isDir) { @@ -2043,14 +2023,6 @@ QHash KFileItemModel::retrieveData(const KFileItem &item, data.insert(sharedValue("type"), folderMimeType); } - if (m_requestRole[RatingRole] && item.isLocalFile()) { - KFileMetaData::UserMetaData md(item.localPath()); - const int rating = md.rating(); - if (rating > 0) { - data.insert(sharedValue("rating"), rating); - } - } - return data; } diff --git a/src/kitemviews/private/kpixmapmodifier.cpp b/src/kitemviews/private/kpixmapmodifier.cpp index bf316b880..96aea26d4 100644 --- a/src/kitemviews/private/kpixmapmodifier.cpp +++ b/src/kitemviews/private/kpixmapmodifier.cpp @@ -15,6 +15,8 @@ #include "kpixmapmodifier.h" +#include "dolphin_iconsmodesettings.h" + #include #include #include @@ -281,7 +283,10 @@ void KPixmapModifier::scale(QPixmap &pixmap, const QSize &scaledSize) return; } qreal dpr = pixmap.devicePixelRatio(); - pixmap = pixmap.scaled(scaledSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + const Qt::TransformationMode mode = IconsModeSettings::usePixelatedScaling() + ? Qt::FastTransformation + : Qt::SmoothTransformation; + pixmap = pixmap.scaled(scaledSize, Qt::KeepAspectRatio, mode); pixmap.setDevicePixelRatio(dpr); } diff --git a/src/settings/dolphin_contentdisplaysettings.kcfg b/src/settings/dolphin_contentdisplaysettings.kcfg index 6e8f8e9d5..dd10d09e8 100644 --- a/src/settings/dolphin_contentdisplaysettings.kcfg +++ b/src/settings/dolphin_contentdisplaysettings.kcfg @@ -46,5 +46,9 @@ Middle + + + false + diff --git a/src/settings/dolphin_iconsmodesettings.kcfg b/src/settings/dolphin_iconsmodesettings.kcfg index 7948af75d..d4e3ca8d5 100644 --- a/src/settings/dolphin_iconsmodesettings.kcfg +++ b/src/settings/dolphin_iconsmodesettings.kcfg @@ -31,5 +31,9 @@ 3 + + + false + diff --git a/src/settings/viewmodes/contentdisplaytab.cpp b/src/settings/viewmodes/contentdisplaytab.cpp index 747c3ff20..7b854182e 100644 --- a/src/settings/viewmodes/contentdisplaytab.cpp +++ b/src/settings/viewmodes/contentdisplaytab.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -31,6 +32,7 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) , m_useCombinedPermissions(nullptr) , m_elideMiddle(nullptr) , m_elideEnding(nullptr) + , m_hideFileExtensions(nullptr) { QFormLayout *topLayout = new QFormLayout(this); topLayout->setFormAlignment(Qt::AlignHCenter); @@ -114,6 +116,9 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) elidingModeGroup->addButton(m_elideMiddle); elidingModeGroup->addButton(m_elideEnding); + m_hideFileExtensions = new QCheckBox(i18nc("@option:check", "Hide file name extensions")); + topLayout->addRow(QString(), m_hideFileExtensions); + #ifndef Q_OS_WIN connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, &SettingsPageBase::changed); connect(m_numberOfItems, &QRadioButton::toggled, this, &SettingsPageBase::changed); @@ -133,6 +138,7 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); connect(m_elideMiddle, &QRadioButton::toggled, this, &SettingsPageBase::changed); connect(m_elideEnding, &QRadioButton::toggled, this, &SettingsPageBase::changed); + connect(m_hideFileExtensions, &QCheckBox::toggled, this, &SettingsPageBase::changed); loadSettings(); } @@ -166,6 +172,7 @@ void ContentDisplayTab::applySettings() } else if (m_elideEnding->isChecked()) { settings->setElidingMode(ContentDisplaySettings::ElidingMode::Right); } + settings->setHideFileExtensions(m_hideFileExtensions->isChecked()); settings->save(); GeneralSettings::self()->save(); @@ -188,6 +195,7 @@ void ContentDisplayTab::loadSettings() loadSortingChoiceSettings(); m_elideMiddle->setChecked(settings->elidingMode() == ContentDisplaySettings::ElidingMode::Middle); m_elideEnding->setChecked(settings->elidingMode() == ContentDisplaySettings::ElidingMode::Right); + m_hideFileExtensions->setChecked(settings->hideFileExtensions()); } void ContentDisplayTab::setSortingChoiceValue() diff --git a/src/settings/viewmodes/contentdisplaytab.h b/src/settings/viewmodes/contentdisplaytab.h index 2bae5a87c..6d673b0f6 100644 --- a/src/settings/viewmodes/contentdisplaytab.h +++ b/src/settings/viewmodes/contentdisplaytab.h @@ -10,6 +10,7 @@ #include "dolphin_generalsettings.h" #include "settings/settingspagebase.h" +class QCheckBox; class QRadioButton; class QSpinBox; @@ -45,6 +46,7 @@ private: QRadioButton *m_useCombinedPermissions; QRadioButton *m_elideMiddle; QRadioButton *m_elideEnding; + QCheckBox *m_hideFileExtensions; }; #endif // GENERALTAB_H diff --git a/src/settings/viewmodes/viewsettingstab.cpp b/src/settings/viewmodes/viewsettingstab.cpp index 3593f23dd..1a00c5d84 100644 --- a/src/settings/viewmodes/viewsettingstab.cpp +++ b/src/settings/viewmodes/viewsettingstab.cpp @@ -16,17 +16,14 @@ #include -#include #include #include #include #include #include #include -#include #include #include -#include ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) : SettingsPageBase(parent) @@ -37,6 +34,7 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) , m_widthBox(nullptr) , m_maxLinesBox(nullptr) , m_expandableFolders(nullptr) + , m_pixelatedScaling(nullptr) { QFormLayout *topLayout = new QFormLayout(this); topLayout->setFormAlignment(Qt::AlignHCenter); @@ -65,17 +63,6 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) m_fontRequester = new DolphinFontRequester(this); topLayout->addRow(i18nc("@label:listbox", "Label font:"), m_fontRequester); - // Reserved font style warning - m_fontWarningLabel = new QLabel(this); - m_fontWarningLabel->setWordWrap(true); - m_fontWarningLabel->setVisible(false); - m_fontWarningLabel->setText(i18nc("@info", "Some font styles are reserved by Dolphin and may be overridden.")); - topLayout->addRow(QString(), m_fontWarningLabel); - KColorScheme scheme(QPalette::Normal); - QPalette palette = m_fontWarningLabel->palette(); - palette.setColor(QPalette::WindowText, scheme.foreground(KColorScheme::InactiveText).color()); - m_fontWarningLabel->setPalette(palette); - switch (m_mode) { case IconsMode: { m_widthBox = new QComboBox(); @@ -93,6 +80,9 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "4")); m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "5")); topLayout->addRow(i18nc("@label:listbox", "Maximum lines:"), m_maxLinesBox); + + m_pixelatedScaling = new QCheckBox(i18nc("@option:check", "Use pixelated thumbnail scaling")); + topLayout->addRow(QString(), m_pixelatedScaling); break; } case CompactMode: { @@ -129,12 +119,12 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) connect(m_defaultSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed); connect(m_previewSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed); connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::changed); - connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::checkFontStyle); switch (m_mode) { case IconsMode: connect(m_widthBox, &QComboBox::currentIndexChanged, this, &ViewSettingsTab::changed); connect(m_maxLinesBox, &QComboBox::currentIndexChanged, this, &ViewSettingsTab::changed); + connect(m_pixelatedScaling, &QCheckBox::toggled, this, &ViewSettingsTab::changed); break; case CompactMode: connect(m_widthBox, &QComboBox::currentIndexChanged, this, &ViewSettingsTab::changed); @@ -148,23 +138,8 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) } } -ViewSettingsTab::~ViewSettingsTab() = default; - -void ViewSettingsTab::checkFontStyle() +ViewSettingsTab::~ViewSettingsTab() { - const QFont font = m_fontRequester->currentFont(); - const bool wantsReservedStyle = font.italic() || font.underline() || font.strikeOut(); - - // Disabled warning for System Font - if (m_fontRequester->mode() != DolphinFontRequester::CustomFont) { - m_fontWarningLabel->setVisible(false); - return; - } - - if (wantsReservedStyle) { - m_fontWarningLabel->setVisible(true); - return; - } } void ViewSettingsTab::applySettings() @@ -173,6 +148,7 @@ void ViewSettingsTab::applySettings() case IconsMode: IconsModeSettings::setTextWidthIndex(m_widthBox->currentIndex()); IconsModeSettings::setMaximumTextLines(m_maxLinesBox->currentIndex()); + IconsModeSettings::setUsePixelatedScaling(m_pixelatedScaling->isChecked()); IconsModeSettings::self()->save(); break; case CompactMode: @@ -218,6 +194,7 @@ void ViewSettingsTab::applySettings() settings.setUseSystemFont(useSystemFont); settings.setViewFont(font); + settings.save(); } @@ -235,6 +212,7 @@ void ViewSettingsTab::loadSettings() case IconsMode: m_widthBox->setCurrentIndex(IconsModeSettings::textWidthIndex()); m_maxLinesBox->setCurrentIndex(IconsModeSettings::maximumTextLines()); + m_pixelatedScaling->setChecked(IconsModeSettings::usePixelatedScaling()); break; case CompactMode: m_widthBox->setCurrentIndex(CompactModeSettings::maximumTextWidthIndex()); @@ -285,4 +263,4 @@ void ViewSettingsTab::showToolTip(QSlider *slider, int value) QApplication::sendEvent(slider, &toolTipEvent); } -#include "moc_viewsettingstab.cpp" \ No newline at end of file +#include "moc_viewsettingstab.cpp" diff --git a/src/settings/viewmodes/viewsettingstab.h b/src/settings/viewmodes/viewsettingstab.h index 6ea7a3bf3..fef4a03fe 100644 --- a/src/settings/viewmodes/viewsettingstab.h +++ b/src/settings/viewmodes/viewsettingstab.h @@ -15,7 +15,6 @@ class QCheckBox; class QSlider; class QSpinBox; class QRadioButton; -class QLabel; /** * @brief Represents one tab of the view-settings page. @@ -37,7 +36,6 @@ private Q_SLOTS: void slotDefaultSliderMoved(int value); void slotPreviewSliderMoved(int value); - void checkFontStyle(); private: void loadSettings(); @@ -54,7 +52,7 @@ private: QRadioButton *m_entireRow; QRadioButton *m_iconAndNameOnly; QCheckBox *m_expandableFolders; - QLabel *m_fontWarningLabel; + QCheckBox *m_pixelatedScaling; }; -#endif \ No newline at end of file +#endif -- cgit v1.3