┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views/dolphinview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/dolphinview.cpp')
-rw-r--r--src/views/dolphinview.cpp95
1 files changed, 89 insertions, 6 deletions
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp
index b01833d69..3c973618c 100644
--- a/src/views/dolphinview.cpp
+++ b/src/views/dolphinview.cpp
@@ -130,6 +130,25 @@ DolphinView::DolphinView(const QUrl &url, QWidget *parent)
KItemListController *controller = new KItemListController(m_model, m_view, this);
controller->setAutoActivationEnabled(GeneralSettings::autoExpandFolders());
connect(controller, &KItemListController::doubleClickViewBackground, this, &DolphinView::doubleClickViewBackground);
+ connect(controller, &KItemListController::typeAheadUsed, this, [this](const QString &typedString, std::optional<int> foundIndex) {
+ if (foundIndex.has_value()) {
+ const KFileItem item = m_model->fileItem(foundIndex.value());
+ if (item.isNull()) {
+ return;
+ }
+ const KColorScheme colorScheme = KColorScheme(QPalette::Normal, KColorScheme::Tooltip);
+ const QColor autoCompleteTextColor = colorScheme.foreground(KColorScheme::InactiveText).color();
+
+ Q_EMIT showTypeAheadFeedback(QStringLiteral("%1<font color=\"%2\">%3</font>")
+ .arg(typedString.toHtmlEscaped())
+ .arg(autoCompleteTextColor.name())
+ .arg(item.name().toHtmlEscaped().mid(typedString.size())));
+ } else {
+ const KColorScheme colorScheme = KColorScheme(QPalette::Normal, KColorScheme::Tooltip);
+ const QColor noMatchTextColor = colorScheme.foreground(KColorScheme::NegativeText).color();
+ Q_EMIT showTypeAheadFeedback(QStringLiteral("<font color=\"%1\">%2</font>").arg(noMatchTextColor.name()).arg(typedString.toHtmlEscaped()));
+ }
+ });
// The EnlargeSmallPreviews setting can only be changed after the model
// has been set in the view by KItemListController.
@@ -479,9 +498,16 @@ void DolphinView::selectItems(const QRegularExpression &regexp, bool enabled)
void DolphinView::setZoomLevel(int level)
{
+ if (m_defaultZoomLevel < 0) {
+ updateDefaultZoomLevel();
+ }
+
const int oldZoomLevel = zoomLevel();
m_view->setZoomLevel(level);
if (zoomLevel() != oldZoomLevel) {
+ ViewProperties props(viewPropertiesUrl());
+ props.setZoomLevel(level == m_defaultZoomLevel ? -1 : level);
+
hideToolTip();
Q_EMIT zoomLevelChanged(zoomLevel(), oldZoomLevel);
}
@@ -632,6 +658,26 @@ QStringList DolphinView::mimeTypeFilters() const
return m_model->mimeTypeFilters();
}
+void DolphinView::setFilterMode(KFileItemModelFilter::FilterMode mode)
+{
+ m_model->setFilterMode(mode);
+}
+
+KFileItemModelFilter::FilterMode DolphinView::filterMode() const
+{
+ return m_model->filterMode();
+}
+
+void DolphinView::setFilterCaseSensitive(bool caseSensitive)
+{
+ m_model->setFilterCaseSensitive(caseSensitive);
+}
+
+bool DolphinView::isFilterCaseSensitive() const
+{
+ return m_model->isFilterCaseSensitive();
+}
+
void DolphinView::requestStatusBarText()
{
if (m_statJobForStatusBarText) {
@@ -1798,10 +1844,10 @@ Qt::SortOrder DolphinView::defaultSortOrderForRole(const QByteArray &role)
void DolphinView::resetZoomLevel()
{
- ViewModeSettings settings{m_mode};
- const int userDefaultIconSize = settings.iconSize();
-
- setZoomLevel(ZoomLevelInfo::zoomLevelForIconSize(QSize(userDefaultIconSize, userDefaultIconSize)));
+ if (m_defaultZoomLevel < 0) {
+ updateDefaultZoomLevel();
+ }
+ setZoomLevel(m_defaultZoomLevel);
}
void DolphinView::selectFileOnceAvailable(const QUrl &url, const std::function<bool()> &condition)
@@ -2312,11 +2358,16 @@ void DolphinView::applyViewProperties(const ViewProperties &props)
{
m_view->beginTransaction();
+ // Caches old zoom level change for signal emitting
+ int zoomLevelChangeFrom = -1;
+
const Mode mode = props.viewMode();
if (m_mode != mode) {
const Mode previousMode = m_mode;
m_mode = mode;
+ updateDefaultZoomLevel();
+
// Changing the mode might result in changing
// the zoom level. Remember the old zoom level so
// that zoomLevelChanged() can get emitted.
@@ -2326,7 +2377,7 @@ void DolphinView::applyViewProperties(const ViewProperties &props)
Q_EMIT modeChanged(m_mode, previousMode);
if (m_view->zoomLevel() != oldZoomLevel) {
- Q_EMIT zoomLevelChanged(m_view->zoomLevel(), oldZoomLevel);
+ zoomLevelChangeFrom = oldZoomLevel;
}
}
@@ -2383,10 +2434,28 @@ void DolphinView::applyViewProperties(const ViewProperties &props)
// Changing the preview-state might result in a changed zoom-level
if (oldZoomLevel != zoomLevel()) {
- Q_EMIT zoomLevelChanged(zoomLevel(), oldZoomLevel);
+ zoomLevelChangeFrom = oldZoomLevel;
+ }
+ }
+
+ // Only check for folder zoom changes if we're using local view props
+ if (!GeneralSettings::globalViewProps()) {
+ const int propZoomLevel = props.zoomLevel();
+ if (m_defaultZoomLevel < 0) {
+ updateDefaultZoomLevel();
+ }
+
+ const int nextZoomLevel = propZoomLevel < 0 ? m_defaultZoomLevel : propZoomLevel;
+ if (nextZoomLevel != m_view->zoomLevel()) {
+ zoomLevelChangeFrom = m_view->zoomLevel();
+ m_view->setZoomLevel(nextZoomLevel);
}
}
+ if (zoomLevelChangeFrom > -1) {
+ Q_EMIT zoomLevelChanged(m_view->zoomLevel(), zoomLevelChangeFrom);
+ }
+
KItemListView *itemListView = m_container->controller()->view();
if (itemListView->isHeaderVisible()) {
KItemListHeader *header = itemListView->header();
@@ -2409,6 +2478,14 @@ void DolphinView::applyViewProperties(const ViewProperties &props)
m_view->endTransaction();
}
+void DolphinView::updateDefaultZoomLevel()
+{
+ ViewModeSettings settings{m_mode};
+ const int userDefaultIconSize = settings.iconSize();
+
+ m_defaultZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(QSize(userDefaultIconSize, userDefaultIconSize));
+}
+
void DolphinView::applyModeToView()
{
switch (m_mode) {
@@ -2694,6 +2771,12 @@ void DolphinView::updatePlaceholderLabel()
m_placeholderLabel->setText(i18n("No MTP-compatible devices found"));
} else if (m_url.scheme() == QLatin1String("afc") && m_url.path() == QLatin1String("/")) {
m_placeholderLabel->setText(i18n("No Apple devices found"));
+ } else if (m_url.scheme() == QLatin1String("kdeconnect") && m_url.path() == QLatin1String("/")) {
+ if (m_url.host().isEmpty()) {
+ m_placeholderLabel->setText(i18n("No KDE Connect devices found"));
+ } else {
+ m_placeholderLabel->setText(i18n("No storage found on this device"));
+ }
} else if (m_url.scheme() == QLatin1String("bluetooth")) {
m_placeholderLabel->setText(i18n("No Bluetooth devices found"));
} else {