blob: 280b8b2e11a7ce231ed0da36fdbaabd4bd60466f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
/*
This file is part of the KDE project
SPDX-FileCopyrightText: 2020 Felix Ernst <[email protected]>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "dolphinurlnavigator.h"
#include "dolphin_generalsettings.h"
#include "dolphinplacesmodelsingleton.h"
#include "dolphinurlnavigatorscontroller.h"
#include "global.h"
#include <KLocalizedString>
#include <KUrlComboBox>
#include <QAbstractButton>
#include <QLayout>
#include <QLineEdit>
DolphinUrlNavigator::DolphinUrlNavigator(QWidget *parent)
: DolphinUrlNavigator(QUrl(), parent)
{
}
DolphinUrlNavigator::DolphinUrlNavigator(const QUrl &url, QWidget *parent)
: KUrlNavigator(DolphinPlacesModelSingleton::instance().placesModel(), url, parent)
{
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>"));
DolphinUrlNavigatorsController::registerDolphinUrlNavigator(this);
connect(this, &KUrlNavigator::returnPressed, this, &DolphinUrlNavigator::slotReturnPressed);
}
DolphinUrlNavigator::~DolphinUrlNavigator()
{
DolphinUrlNavigatorsController::unregisterDolphinUrlNavigator(this);
}
QSize DolphinUrlNavigator::sizeHint() const
{
if (isUrlEditable()) {
return editor()->lineEdit()->sizeHint();
}
int widthHint = 0;
for (int i = 0; i < layout()->count(); ++i) {
QWidget *widget = layout()->itemAt(i)->widget();
const QAbstractButton *button = qobject_cast<QAbstractButton *>(widget);
if (button && button->icon().isNull()) {
widthHint += widget->minimumSizeHint().width();
}
}
return QSize(widthHint, KUrlNavigator::sizeHint().height());
}
std::unique_ptr<DolphinUrlNavigator::VisualState> DolphinUrlNavigator::visualState() const
{
std::unique_ptr<VisualState> visualState{new VisualState};
visualState->isUrlEditable = (isUrlEditable());
const QLineEdit *lineEdit = editor()->lineEdit();
visualState->hasFocus = lineEdit->hasFocus();
visualState->text = lineEdit->text();
visualState->cursorPosition = lineEdit->cursorPosition();
visualState->selectionStart = lineEdit->selectionStart();
visualState->selectionLength = lineEdit->selectionLength();
return visualState;
}
void DolphinUrlNavigator::setVisualState(const VisualState &visualState)
{
setUrlEditable(visualState.isUrlEditable);
if (!visualState.isUrlEditable) {
return;
}
editor()->lineEdit()->setText(visualState.text);
if (visualState.hasFocus) {
editor()->lineEdit()->setFocus();
editor()->lineEdit()->setCursorPosition(visualState.cursorPosition);
if (visualState.selectionStart != -1) {
editor()->lineEdit()->setSelection(visualState.selectionStart, visualState.selectionLength);
}
}
}
void DolphinUrlNavigator::clearText() const
{
editor()->lineEdit()->clear();
}
void DolphinUrlNavigator::setPlaceholderText(const QString &text)
{
editor()->lineEdit()->setPlaceholderText(text);
}
void DolphinUrlNavigator::slotReturnPressed()
{
if (!GeneralSettings::editableUrl()) {
setUrlEditable(false);
}
}
|