/*
This file is part of the KDE project
- SPDX-FileCopyrightText: 2020 Felix Ernst <fe.a.ernst@gmail.com>
+ SPDX-FileCopyrightText: 2020 Felix Ernst <felixernst@kde.org>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "dolphinurlnavigatorscontroller.h"
#include "global.h"
-#include <KUrlComboBox>
#include <KLocalizedString>
+#include <KUrlComboBox>
#include <QAbstractButton>
+#include <QKeyEvent>
+#include <QLabel>
#include <QLayout>
#include <QLineEdit>
-DolphinUrlNavigator::DolphinUrlNavigator(QWidget *parent) :
- DolphinUrlNavigator(QUrl(), parent)
-{}
+DolphinUrlNavigator::DolphinUrlNavigator(QWidget *parent)
+ : DolphinUrlNavigator(QUrl(), parent)
+{
+}
-DolphinUrlNavigator::DolphinUrlNavigator(const QUrl &url, QWidget *parent) :
- KUrlNavigator(DolphinPlacesModelSingleton::instance().placesModel(), url, parent)
+DolphinUrlNavigator::DolphinUrlNavigator(const QUrl &url, QWidget *parent)
+ : KUrlNavigator(DolphinPlacesModelSingleton::instance().placesModel(), url, parent)
{
- const GeneralSettings* settings = GeneralSettings::self();
+ const GeneralSettings *settings = GeneralSettings::self();
setUrlEditable(settings->editableUrl());
setShowFullPath(settings->showFullPath());
setHomeUrl(Dolphin::homeUrl());
setPlacesSelectorVisible(DolphinUrlNavigatorsController::placesSelectorVisible());
editor()->setCompletionMode(KCompletion::CompletionMode(settings->urlCompletionMode()));
setWhatsThis(xi18nc("@info:whatsthis location bar",
- "<para>This describes the location of the files and folders "
- "displayed below.</para><para>The name of the currently viewed "
- "folder can be read at the very right. To the left of it is the "
- "name of the folder that contains it. The whole line is called "
- "the <emphasis>path</emphasis> to the current location because "
- "following these folders from left to right leads here.</para>"
- "<para>This interactive path "
- "is more powerful than one would expect. To learn more "
- "about the basic and advanced features of the location bar "
- "<link url='help:/dolphin/location-bar.html'>click here</link>. "
- "This will open the dedicated page in the Handbook.</para>"));
+ "<para>This describes the location of the files and folders "
+ "displayed below.</para><para>The name of the currently viewed "
+ "folder can be read at the very right. To the left of it is the "
+ "name of the folder that contains it. The whole line is called "
+ "the <emphasis>path</emphasis> to the current location because "
+ "following these folders from left to right leads here.</para>"
+ "<para>This interactive path "
+ "is more powerful than one would expect. To learn more "
+ "about the basic and advanced features of the location bar "
+ "<link url='help:/dolphin/location-bar.html'>click here</link>. "
+ "This will open the dedicated page in the Handbook.</para>"));
DolphinUrlNavigatorsController::registerDolphinUrlNavigator(this);
- connect(this, &KUrlNavigator::returnPressed,
- this, &DolphinUrlNavigator::slotReturnPressed);
+ connect(this, &KUrlNavigator::returnPressed, this, &DolphinUrlNavigator::slotReturnPressed);
+
+ auto readOnlyBadge = new QLabel();
+ readOnlyBadge->setPixmap(QIcon::fromTheme(QStringLiteral("emblem-readonly")).pixmap(12, 12));
+ readOnlyBadge->setToolTip(i18nc("@info:tooltip of a 'locked' symbol in url navigator", "This folder is not writable for you."));
+ readOnlyBadge->hide();
+ setBadgeWidget(readOnlyBadge);
}
DolphinUrlNavigator::~DolphinUrlNavigator()
widthHint += widget->minimumSizeHint().width();
}
}
+ if (readOnlyBadgeVisible()) {
+ widthHint += badgeWidget()->sizeHint().width();
+ }
return QSize(widthHint, KUrlNavigator::sizeHint().height());
}
return visualState;
}
-void DolphinUrlNavigator::setVisualState(const VisualState& visualState)
+void DolphinUrlNavigator::setVisualState(const VisualState &visualState)
{
setUrlEditable(visualState.isUrlEditable);
if (!visualState.isUrlEditable) {
editor()->lineEdit()->setPlaceholderText(text);
}
+void DolphinUrlNavigator::setReadOnlyBadgeVisible(bool visible)
+{
+ QWidget *readOnlyBadge = badgeWidget();
+ if (readOnlyBadge) {
+ readOnlyBadge->setVisible(visible);
+ }
+}
+
+bool DolphinUrlNavigator::readOnlyBadgeVisible() const
+{
+ QWidget *readOnlyBadge = badgeWidget();
+ if (readOnlyBadge) {
+ return readOnlyBadge->isVisible();
+ }
+ return false;
+}
+
void DolphinUrlNavigator::slotReturnPressed()
{
if (!GeneralSettings::editableUrl()) {
setUrlEditable(false);
}
}
+
+void DolphinUrlNavigator::keyPressEvent(QKeyEvent *keyEvent)
+{
+ if (keyEvent->key() == Qt::Key_Escape && !isUrlEditable()) {
+ Q_EMIT requestToLoseFocus();
+ return;
+ }
+ KUrlNavigator::keyPressEvent(keyEvent);
+}
+
+#include "moc_dolphinurlnavigator.cpp"