Warning, file /frameworks/ktexteditor/src/vimode/emulatedcommandbar/emulatedcommandbar.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2013-2016 Simon St James <kdedevel@etotheipiplusone.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KATEVI_EMULATED_COMMAND_BAR_H 0008 #define KATEVI_EMULATED_COMMAND_BAR_H 0009 0010 #include "kateviewhelpers.h" 0011 #include <vimode/cmds.h> 0012 0013 namespace KTextEditor 0014 { 0015 class ViewPrivate; 0016 class Command; 0017 } 0018 0019 class QLabel; 0020 class QLayout; 0021 0022 namespace KateVi 0023 { 0024 class MatchHighlighter; 0025 class InteractiveSedReplaceMode; 0026 class SearchMode; 0027 class CommandMode; 0028 class ActiveMode; 0029 class Completer; 0030 0031 /** 0032 * A KateViewBarWidget that attempts to emulate some of the features of Vim's own command bar, 0033 * including insertion of register contents via ctr-r<registername>; dismissal via 0034 * ctrl-c and ctrl-[; bi-directional incremental searching, with SmartCase; interactive sed-replace; 0035 * plus a few extensions such as completion from document and navigable sed search and sed replace history. 0036 */ 0037 class KTEXTEDITOR_EXPORT EmulatedCommandBar : public KateViewBarWidget 0038 { 0039 Q_OBJECT 0040 0041 public: 0042 enum Mode { NoMode, SearchForward, SearchBackward, Command }; 0043 explicit EmulatedCommandBar(KateViInputMode *viInputMode, InputModeManager *viInputModeManager, QWidget *parent = nullptr); 0044 ~EmulatedCommandBar() override; 0045 void init(Mode mode, const QString &initialText = QString()); 0046 bool isActive() const; 0047 void setCommandResponseMessageTimeout(long commandResponseMessageTimeOutMS); 0048 bool handleKeyPress(const QKeyEvent *keyEvent); 0049 bool isSendingSyntheticSearchCompletedKeypress(); 0050 0051 void startInteractiveSearchAndReplace(QSharedPointer<SedReplace::InteractiveSedReplacer> interactiveSedReplace); 0052 QString executeCommand(const QString &commandToExecute); 0053 0054 void setViInputModeManager(InputModeManager *viInputModeManager); 0055 0056 private: 0057 KateViInputMode *m_viInputMode; 0058 InputModeManager *m_viInputModeManager; 0059 bool m_isActive = false; 0060 bool m_wasAborted = true; 0061 Mode m_mode = NoMode; 0062 KTextEditor::ViewPrivate *m_view = nullptr; 0063 QLineEdit *m_edit = nullptr; 0064 0065 QLabel *m_barTypeIndicator = nullptr; 0066 KTEXTEDITOR_NO_EXPORT 0067 void showBarTypeIndicator(Mode mode); 0068 0069 bool m_suspendEditEventFiltering = false; 0070 0071 bool m_waitingForRegister = false; 0072 QLabel *m_waitingForRegisterIndicator; 0073 bool m_insertedTextShouldBeEscapedForSearchingAsLiteral = false; 0074 0075 KTEXTEDITOR_NO_EXPORT 0076 void hideAllWidgetsExcept(QWidget *widgetToKeepVisible); 0077 0078 friend class ActiveMode; 0079 QScopedPointer<MatchHighlighter> m_matchHighligher; 0080 0081 QScopedPointer<Completer> m_completer; 0082 0083 QScopedPointer<InteractiveSedReplaceMode> m_interactiveSedReplaceMode; 0084 QScopedPointer<SearchMode> m_searchMode; 0085 QScopedPointer<CommandMode> m_commandMode; 0086 0087 KTEXTEDITOR_NO_EXPORT 0088 void switchToMode(ActiveMode *newMode); 0089 ActiveMode *m_currentMode = nullptr; 0090 0091 KTEXTEDITOR_NO_EXPORT 0092 bool barHandledKeypress(const QKeyEvent *keyEvent); 0093 KTEXTEDITOR_NO_EXPORT 0094 void insertRegisterContents(const QKeyEvent *keyEvent); 0095 bool eventFilter(QObject *object, QEvent *event) override; 0096 KTEXTEDITOR_NO_EXPORT 0097 void deleteSpacesToLeftOfCursor(); 0098 KTEXTEDITOR_NO_EXPORT 0099 void deleteWordCharsToLeftOfCursor(); 0100 KTEXTEDITOR_NO_EXPORT 0101 bool deleteNonWordCharsToLeftOfCursor(); 0102 0103 void closed() override; 0104 KTEXTEDITOR_NO_EXPORT 0105 void closeWithStatusMessage(const QString &exitStatusMessage); 0106 QTimer *m_exitStatusMessageDisplayHideTimer; 0107 QLabel *m_exitStatusMessageDisplay; 0108 long m_exitStatusMessageHideTimeOutMS = 4000; 0109 0110 KTEXTEDITOR_NO_EXPORT 0111 void createAndAddBarTypeIndicator(QLayout *layout); 0112 KTEXTEDITOR_NO_EXPORT 0113 void createAndAddEditWidget(QLayout *layout); 0114 KTEXTEDITOR_NO_EXPORT 0115 void createAndAddExitStatusMessageDisplay(QLayout *layout); 0116 KTEXTEDITOR_NO_EXPORT 0117 void createAndInitExitStatusMessageDisplayTimer(); 0118 KTEXTEDITOR_NO_EXPORT 0119 void createAndAddWaitingForRegisterIndicator(QLayout *layout); 0120 0121 private Q_SLOTS: 0122 void editTextChanged(const QString &newText); 0123 void startHideExitStatusMessageTimer(); 0124 }; 0125 0126 } 0127 0128 #endif /* KATEVI_EMULATED_COMMAND_BAR_H */