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 */