KTextEditor

katenormalinputmode.cpp
1/*
2 SPDX-FileCopyrightText: KDE Developers
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include "katenormalinputmode.h"
8#include "katecompletionwidget.h"
9#include "kateconfig.h"
10#include "katedocument.h"
11#include "katerenderer.h"
12#include "katesearchbar.h"
13#include "kateview.h"
14#include "kateviewinternal.h"
15
16#include <KLocalizedString>
17
18KateNormalInputMode::KateNormalInputMode(KateViewInternal *viewInternal)
19 : KateAbstractInputMode(viewInternal)
20{
21}
22
23void KateNormalInputMode::activate()
24{
25 view()->activateEditActions();
26}
27
28void KateNormalInputMode::deactivate()
29{
30 view()->deactivateEditActions();
31}
32
33void KateNormalInputMode::reset()
34{
35 // nothing todo
36}
37
38bool KateNormalInputMode::overwrite() const
39{
40 return view()->doc()->config()->ovr();
41}
42
43void KateNormalInputMode::overwrittenChar(const QChar &)
44{
45 // nothing todo
46}
47
48void KateNormalInputMode::clearSelection()
49{
50 view()->clearSelection();
51}
52
53bool KateNormalInputMode::stealKey(QKeyEvent *)
54{
55 return false;
56}
57
58KTextEditor::View::InputMode KateNormalInputMode::viewInputMode() const
59{
61}
62
63QString KateNormalInputMode::viewInputModeHuman() const
64{
65 return i18n("Normal");
66}
67
68KTextEditor::View::ViewMode KateNormalInputMode::viewMode() const
69{
71}
72
73QString KateNormalInputMode::viewModeHuman() const
74{
75 return view()->isOverwriteMode() ? i18n("OVERWRITE") : i18n("INSERT");
76}
77
78void KateNormalInputMode::gotFocus()
79{
80 view()->activateEditActions();
81}
82
83void KateNormalInputMode::lostFocus()
84{
85 view()->deactivateEditActions();
86}
87
88void KateNormalInputMode::readSessionConfig(const KConfigGroup &)
89{
90 // do nothing
91}
92
93void KateNormalInputMode::writeSessionConfig(KConfigGroup &)
94{
95 // do nothing
96}
97
98void KateNormalInputMode::updateConfig()
99{
100 // do nothing
101}
102
103void KateNormalInputMode::readWriteChanged(bool)
104{
105 // inform search bar
106 if (m_searchBar) {
107 m_searchBar->slotReadWriteChanged();
108 }
109}
110
111void KateNormalInputMode::find()
112{
113 KateSearchBar *const bar = searchBar(IncrementalSearchBar);
114 view()->bottomViewBar()->addBarWidget(bar);
115 view()->bottomViewBar()->showBarWidget(bar);
116 bar->setFocus();
117}
118
119void KateNormalInputMode::findSelectedForwards()
120{
121 searchBar(IncrementalSearchBarOrKeepMode)->nextMatchForSelection(view(), KateSearchBar::SearchForward);
122}
123
124void KateNormalInputMode::findSelectedBackwards()
125{
126 searchBar(IncrementalSearchBarOrKeepMode)->nextMatchForSelection(view(), KateSearchBar::SearchBackward);
127}
128
129void KateNormalInputMode::findReplace()
130{
131 KateSearchBar *const bar = searchBar(PowerSearchBar);
132 view()->bottomViewBar()->addBarWidget(bar);
133 view()->bottomViewBar()->showBarWidget(bar);
134 bar->setFocus();
135}
136
137void KateNormalInputMode::findNext()
138{
139 searchBar(IncrementalSearchBarOrKeepMode)->findNext();
140}
141
142void KateNormalInputMode::findPrevious()
143{
144 searchBar(IncrementalSearchBarOrKeepMode)->findPrevious();
145}
146
147void KateNormalInputMode::activateCommandLine()
148{
149 const KTextEditor::Range selection = view()->selectionRange();
150
151 // if the user has selected text, insert the selection's range (start line to end line) in the
152 // command line when opened
153 if (selection.start().line() != -1 && selection.end().line() != -1) {
154 cmdLineBar()->setText(QString::number(selection.start().line() + 1) + QLatin1Char(',') + QString::number(selection.end().line() + 1));
155 }
156 view()->bottomViewBar()->showBarWidget(cmdLineBar());
157 cmdLineBar()->setFocus();
158}
159
160KateSearchBar *KateNormalInputMode::searchBar(const SearchBarMode mode)
161{
162 // power mode wanted?
163 const bool wantPowerMode = (mode == PowerSearchBar);
164
165 // create search bar is not there? use right mode
166 if (!m_searchBar) {
167 m_searchBar.reset(new KateSearchBar(wantPowerMode, view(), KateViewConfig::global()));
168 }
169
170 // else: switch mode if needed!
171 else if (mode != IncrementalSearchBarOrKeepMode) {
172 if (wantPowerMode) {
173 m_searchBar->enterPowerMode();
174 } else {
175 m_searchBar->enterIncrementalMode();
176 }
177 }
178
179 return m_searchBar.get();
180}
181
182KateCommandLineBar *KateNormalInputMode::cmdLineBar()
183{
184 if (!m_cmdLine) {
185 m_cmdLine.reset(new KateCommandLineBar(view(), view()->bottomViewBar()));
186 view()->bottomViewBar()->addBarWidget(m_cmdLine.get());
187 }
188
189 return m_cmdLine.get();
190}
191
192void KateNormalInputMode::updateRendererConfig()
193{
194 if (m_searchBar) {
195 m_searchBar->updateHighlightColors();
196 }
197}
198
199bool KateNormalInputMode::keyPress(QKeyEvent *e)
200{
201 // Note: AND'ing with <Shift> is a quick hack to fix Key_Enter
202 const int key = e->key() | (e->modifiers() & Qt::ShiftModifier);
203
204 if (view()->isCompletionActive()) {
205 if (key == Qt::Key_Tab || key == (Qt::SHIFT | Qt::Key_Backtab).toCombined() || key == Qt::Key_Backtab) {
206 if (KateViewConfig::global()->tabCompletion()) {
207 e->accept();
208 using W = KateCompletionWidget;
209 const auto direction = key == Qt::Key_Tab ? W::Down : W::Up;
210 view()->completionWidget()->tabCompletion(direction);
211 return true;
212 }
213 }
214
215 const bool isEnter = key == Qt::Key_Enter || key == Qt::Key_Return;
216 if (isEnter || key == Qt::Key_Tab) {
217 // Are we allowed to execute a completion on enter press?
218 if (isEnter && !view()->config()->value(KateViewConfig::EnterToInsertCompletion).toBool()) {
219 return false;
220 }
221
222 if (view()->completionWidget()->execute()) {
223 e->accept();
224 return true;
225 }
226 }
227 }
228
229 return false;
230}
231
232bool KateNormalInputMode::blinkCaret() const
233{
234 return true;
235}
236
237KTextEditor::caretStyles KateNormalInputMode::caretStyle() const
238{
239 return view()->isOverwriteMode() ? KTextEditor::caretStyles::Block : KTextEditor::caretStyles::Line;
240}
241
242void KateNormalInputMode::toggleInsert()
243{
244 view()->toggleInsert();
245}
246
247void KateNormalInputMode::launchInteractiveCommand(const QString &command)
248{
249 KateCommandLineBar *cmdLine = cmdLineBar();
250 view()->bottomViewBar()->showBarWidget(cmdLine);
251 cmdLine->setText(command, false);
252}
253
254QString KateNormalInputMode::bookmarkLabel(int) const
255{
256 return QString();
257}
constexpr int line() const noexcept
Retrieve the line on which this cursor is situated.
Definition cursor.h:174
An object representing a section of text, from one Cursor to another.
constexpr Cursor end() const noexcept
Get the end position of this range.
constexpr Cursor start() const noexcept
Get the start position of this range.
ViewMode
Possible view modes These correspond to various modes the text editor might be in.
Definition view.h:295
@ NormalModeInsert
Insert mode.
Definition view.h:296
@ NormalModeOverwrite
Overwrite mode.
Definition view.h:297
InputMode
Possible input modes.
Definition view.h:286
@ NormalInputMode
Normal Mode.
Definition view.h:287
This is the code completion's main widget, and also contains the core interface logic.
QString i18n(const char *text, const TYPE &arg...)
void accept()
int key() const const
Qt::KeyboardModifiers modifiers() const const
QString number(double n, char format, int precision)
ShiftModifier
void setFocus()
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:15:43 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.