┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views
diff options
context:
space:
mode:
authorFelix Ernst <[email protected]>2020-06-14 16:20:02 +0200
committerElvis Angelaccio <[email protected]>2020-11-09 23:49:07 +0100
commitad5d3367c7fef4c3c11188a768f21a2ee2b3c025 (patch)
treefa59507fdc29060eba061b776c74c53e57b8b668 /src/views
parent880766bd56c0331f39ecffaa08974b5117e3d72a (diff)
Add an option to use an UrlNavigator in the toolbar instead
This commit adds a locationInToolbar KToggleAction to switch between using a location bar to navigate or using a new custom QWidgetAction in the toolbar. A big portion of this MR is refactoring because until now the UrlNavigator was tightly intertwined with the DolphinViewContainer. With this MR an UrlNavigator for controlling a View can be freely connected or disconnected with a single method call. A DolphinUrlNavigator class is created in the process which contains all Dolphin-specific UrlNavigator code which did previously reside in the DolphinViewContainer class. Other application parts that belong to UrlNavigator-management are also moved here.
Diffstat (limited to 'src/views')
-rw-r--r--src/views/dolphinurlnavigatorwidgetaction.cpp58
-rw-r--r--src/views/dolphinurlnavigatorwidgetaction.h57
2 files changed, 115 insertions, 0 deletions
diff --git a/src/views/dolphinurlnavigatorwidgetaction.cpp b/src/views/dolphinurlnavigatorwidgetaction.cpp
new file mode 100644
index 000000000..d9c9a4bfa
--- /dev/null
+++ b/src/views/dolphinurlnavigatorwidgetaction.cpp
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2020 Felix Ernst <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) version 3, or any
+ * later version accepted by the membership of KDE e.V. (or its
+ * successor approved by the membership of KDE e.V.), which shall
+ * act as a proxy defined in Section 6 of version 3 of the license.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include "dolphinurlnavigatorwidgetaction.h"
+
+#include "dolphin_generalsettings.h"
+#include "dolphinviewcontainer.h"
+
+#include <KLocalizedString>
+
+DolphinUrlNavigatorWidgetAction::DolphinUrlNavigatorWidgetAction(QWidget *parent) :
+ QWidgetAction(parent)
+{
+ setText(i18nc("@action:inmenu", "Url navigator"));
+
+ m_stackedWidget = new QStackedWidget(parent);
+
+ auto expandingSpacer = new QWidget(m_stackedWidget);
+ expandingSpacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+ m_stackedWidget->addWidget(expandingSpacer); // index 0 of QStackedWidget
+
+ auto urlNavigator = new DolphinUrlNavigator(m_stackedWidget);
+ m_stackedWidget->addWidget(urlNavigator); // index 1 of QStackedWidget
+
+ setDefaultWidget(m_stackedWidget);
+ setUrlNavigatorVisible(GeneralSettings::locationInToolbar());
+}
+
+DolphinUrlNavigator* DolphinUrlNavigatorWidgetAction::urlNavigator() const
+{
+ return static_cast<DolphinUrlNavigator *>(m_stackedWidget->widget(1));
+}
+
+void DolphinUrlNavigatorWidgetAction::setUrlNavigatorVisible(bool visible)
+{
+ if (!visible) {
+ m_stackedWidget->setCurrentIndex(0); // expandingSpacer
+ } else {
+ m_stackedWidget->setCurrentIndex(1); // urlNavigator
+ }
+}
diff --git a/src/views/dolphinurlnavigatorwidgetaction.h b/src/views/dolphinurlnavigatorwidgetaction.h
new file mode 100644
index 000000000..5efd07f46
--- /dev/null
+++ b/src/views/dolphinurlnavigatorwidgetaction.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2020 Felix Ernst <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) version 3, or any
+ * later version accepted by the membership of KDE e.V. (or its
+ * successor approved by the membership of KDE e.V.), which shall
+ * act as a proxy defined in Section 6 of version 3 of the license.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef DOLPHINURLNAVIGATORWIDGETACTION_H
+#define DOLPHINURLNAVIGATORWIDGETACTION_H
+
+#include "dolphinurlnavigator.h"
+
+#include <QWidgetAction>
+#include <QStackedWidget>
+
+/**
+ * @brief QWidgetAction that allows to use a KUrlNavigator in a toolbar.
+ *
+ * When the UrlNavigator of this object is not in use,
+ * setUrlNavigatorVisible(false) is used to hide it. It will then be
+ * replaced in the toolbar by an empty expanding spacer. This makes sure
+ * that the other widgets in the toolbar will not change location when
+ * switching the UrlNavigators visibility.
+ */
+class DolphinUrlNavigatorWidgetAction : public QWidgetAction
+{
+ Q_OBJECT
+
+public:
+ DolphinUrlNavigatorWidgetAction(QWidget *parent = nullptr);
+
+ DolphinUrlNavigator *urlNavigator() const;
+
+ /**
+ * Set the QStackedWidget which is the defaultWidget() to either
+ * show a KUrlNavigator or an expanding spacer.
+ */
+ void setUrlNavigatorVisible(bool visible);
+
+private:
+ QStackedWidget *m_stackedWidget;
+};
+
+#endif // DOLPHINURLNAVIGATORWIDGETACTION_H