KTextEditor

emulatedcommandbar.h
1/*
2 SPDX-FileCopyrightText: 2013-2016 Simon St James <kdedevel@etotheipiplusone.com>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#ifndef KATEVI_EMULATED_COMMAND_BAR_H
8#define KATEVI_EMULATED_COMMAND_BAR_H
9
10#include "kateviewhelpers.h"
11#include <vimode/cmds.h>
12
13namespace KTextEditor
14{
15class ViewPrivate;
16class Command;
17}
18
19class QLabel;
20class QLayout;
21
22namespace KateVi
23{
24class MatchHighlighter;
25class InteractiveSedReplaceMode;
26class SearchMode;
27class CommandMode;
28class ActiveMode;
29class Completer;
30
31/**
32 * A KateViewBarWidget that attempts to emulate some of the features of Vim's own command bar,
33 * including insertion of register contents via ctr-r<registername>; dismissal via
34 * ctrl-c and ctrl-[; bi-directional incremental searching, with SmartCase; interactive sed-replace;
35 * plus a few extensions such as completion from document and navigable sed search and sed replace history.
36 */
37class EmulatedCommandBar : public KateViewBarWidget
38{
39public:
40 enum Mode {
41 NoMode,
42 SearchForward,
43 SearchBackward,
44 Command
45 };
46 explicit EmulatedCommandBar(KateViInputMode *viInputMode, InputModeManager *viInputModeManager, QWidget *parent = nullptr);
47 ~EmulatedCommandBar() override;
48 void init(Mode mode, const QString &initialText = QString());
49 bool isActive() const;
50 KTEXTEDITOR_EXPORT void setCommandResponseMessageTimeout(long commandResponseMessageTimeOutMS);
51 bool handleKeyPress(const QKeyEvent *keyEvent);
52 bool isSendingSyntheticSearchCompletedKeypress();
53
54 void startInteractiveSearchAndReplace(std::shared_ptr<SedReplace::InteractiveSedReplacer> interactiveSedReplace);
55 KTEXTEDITOR_EXPORT QString executeCommand(const QString &commandToExecute);
56
57 void setViInputModeManager(InputModeManager *viInputModeManager);
58
59private:
60 KateViInputMode *m_viInputMode;
61 InputModeManager *m_viInputModeManager;
62 bool m_isActive = false;
63 bool m_wasAborted = true;
64 Mode m_mode = NoMode;
65 KTextEditor::ViewPrivate *m_view = nullptr;
66 QLineEdit *m_edit = nullptr;
67
68 QLabel *m_barTypeIndicator = nullptr;
69 void showBarTypeIndicator(Mode mode);
70
71 bool m_suspendEditEventFiltering = false;
72
73 bool m_waitingForRegister = false;
74 QLabel *m_waitingForRegisterIndicator;
75 bool m_insertedTextShouldBeEscapedForSearchingAsLiteral = false;
76
77 void hideAllWidgetsExcept(QWidget *widgetToKeepVisible);
78
79 friend class ActiveMode;
80 std::unique_ptr<MatchHighlighter> m_matchHighligher;
81
82 std::unique_ptr<Completer> m_completer;
83
84 std::unique_ptr<InteractiveSedReplaceMode> m_interactiveSedReplaceMode;
85 std::unique_ptr<SearchMode> m_searchMode;
86 std::unique_ptr<CommandMode> m_commandMode;
87
88 void switchToMode(ActiveMode *newMode);
89 ActiveMode *m_currentMode = nullptr;
90
91 bool barHandledKeypress(const QKeyEvent *keyEvent);
92 void insertRegisterContents(const QKeyEvent *keyEvent);
93 bool eventFilter(QObject *object, QEvent *event) override;
94 void deleteSpacesToLeftOfCursor();
95 void deleteWordCharsToLeftOfCursor();
96 bool deleteNonWordCharsToLeftOfCursor();
97
98 void closed() override;
99 void closeWithStatusMessage(const QString &exitStatusMessage);
100 QTimer *m_exitStatusMessageDisplayHideTimer;
101 QLabel *m_exitStatusMessageDisplay;
102 long m_exitStatusMessageHideTimeOutMS = 4000;
103
104 void createAndAddBarTypeIndicator(QLayout *layout);
105 void createAndAddEditWidget(QLayout *layout);
106 void createAndAddExitStatusMessageDisplay(QLayout *layout);
107 void createAndInitExitStatusMessageDisplayTimer();
108 void createAndAddWaitingForRegisterIndicator(QLayout *layout);
109
110private:
111 void editTextChanged(const QString &newText);
112 void startHideExitStatusMessageTimer();
113};
114}
115
116#endif /* KATEVI_EMULATED_COMMAND_BAR_H */
An Editor command line command.
The KTextEditor namespace contains all the public API that is required to use the KTextEditor compone...
QObject(QObject *parent)
QObject * parent() const const
QWidget(QWidget *parent, Qt::WindowFlags f)
virtual bool event(QEvent *event) override
QLayout * layout() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 21 2025 11:52:52 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.