diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp index e3a870f9801..7add0cd8e26 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp @@ -81,7 +81,7 @@ TextEditorView::TextEditorView(QObject *parent) Core::Command *command = Core::ActionManager::registerAction(completionAction, TextEditor::Constants::COMPLETE_THIS, context); command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Meta+Space") : tr("Ctrl+Space"))); - connect(completionAction, &QAction::triggered, [this]() { + connect(completionAction, &QAction::triggered, this, [this] { if (m_widget->textEditor()) m_widget->textEditor()->editorWidget()->invokeAssist(TextEditor::Completion); }); @@ -99,16 +99,12 @@ void TextEditorView::modelAttached(Model *model) AbstractView::modelAttached(model); - auto textEditor = qobject_cast( + auto textEditor = qobject_cast( QmlDesignerPlugin::instance()->currentDesignDocument()->textEditor()->duplicate()); + // Set the context of the text editor, but we add another special context to override shortcuts. Core::Context context = textEditor->context(); context.prepend(TEXTEDITOR_CONTEXT_ID); - - /* - * Set the context of the text editor, but we add another special context to override shortcuts. - */ - m_textEditorContext->setContext(context); m_widget->setTextEditor(textEditor); @@ -272,10 +268,9 @@ void TextEditorView::reformatFile() auto document = qobject_cast(Core::EditorManager::currentDocument()); - /* Reformat document if we have a .ui.qml file */ - if (document - && document->filePath().toString().endsWith(".ui.qml") - && DesignerSettings::getValue(DesignerSettingsKey::REFORMAT_UI_QML_FILES).toBool()) { + // Reformat document if we have a .ui.qml file + if (document && document->filePath().toString().endsWith(".ui.qml") + && DesignerSettings::getValue(DesignerSettingsKey::REFORMAT_UI_QML_FILES).toBool()) { QmlJS::Document::Ptr currentDocument(document->semanticInfo().document); QmlJS::Snapshot snapshot = QmlJS::ModelManagerInterface::instance()->snapshot(); @@ -315,4 +310,3 @@ void TextEditorView::instancePropertyChanged(const QList #include - +#include #include #include @@ -52,13 +52,17 @@ TextEditorWidget::TextEditorWidget(TextEditorView *textEditorView) : QWidget() , m_textEditorView(textEditorView) , m_statusBar(new TextEditorStatusBar(this)) + , m_findToolBar(new Core::FindToolBarPlaceHolder(this)) + , m_layout(new QVBoxLayout(this)) { setAcceptDrops(true); - QBoxLayout *layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(0); - layout->addWidget(m_statusBar); + m_statusBar->hide(); + + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(0); + m_layout->addWidget(m_statusBar); + m_layout->addWidget(m_findToolBar); m_updateSelectionTimer.setSingleShot(true); m_updateSelectionTimer.setInterval(200); @@ -72,24 +76,22 @@ void TextEditorWidget::setTextEditor(TextEditor::BaseTextEditor *textEditor) m_textEditor.reset(textEditor); if (textEditor) { - layout()->removeWidget(m_statusBar); - layout()->addWidget(textEditor->editorWidget()); - layout()->addWidget(m_statusBar); + m_layout->insertWidget(0, textEditor->editorWidget()); + setFocusProxy(textEditor->editorWidget()); QmlDesignerPlugin::instance()->emitCurrentTextEditorChanged(textEditor); - connect(textEditor->editorWidget(), &QPlainTextEdit::cursorPositionChanged, - this, [this]() { - /* Cursor position is changed by rewriter */ + connect(textEditor->editorWidget(), &QPlainTextEdit::cursorPositionChanged, this, [this] { + // Cursor position is changed by rewriter if (!m_blockCursorSelectionSynchronisation) m_updateSelectionTimer.start(); }); textEditor->editorWidget()->installEventFilter(this); + static QString styleSheet = Theme::replaceCssColors( - QString::fromUtf8(Utils::FileReader::fetchQrc( - ":/qmldesigner/scrollbar.css"))); + QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css"))); textEditor->editorWidget()->verticalScrollBar()->setStyleSheet(styleSheet); textEditor->editorWidget()->horizontalScrollBar()->setStyleSheet(styleSheet); } @@ -105,7 +107,6 @@ void TextEditorWidget::contextHelp(const Core::IContext::HelpCallback &callback) void TextEditorWidget::updateSelectionByCursorPosition() { - /* Because of the timer we have to be careful. */ if (!m_textEditorView->model()) return; @@ -162,11 +163,13 @@ void TextEditorWidget::gotoCursorPosition(int line, int column) void TextEditorWidget::setStatusText(const QString &text) { m_statusBar->setText(text); + m_statusBar->setVisible(!text.isEmpty()); } void TextEditorWidget::clearStatusBar() { m_statusBar->clearText(); + m_statusBar->hide(); } int TextEditorWidget::currentLine() const @@ -199,21 +202,25 @@ bool TextEditorWidget::eventFilter(QObject *, QEvent *event) auto keyEvent = static_cast(event); if (std::find(overrideKeys.begin(), overrideKeys.end(), keyEvent->key()) != overrideKeys.end()) { + if (keyEvent->key() == Qt::Key_Escape) + m_findToolBar->hide(); + keyEvent->accept(); return true; } static const Qt::KeyboardModifiers relevantModifiers = Qt::ShiftModifier - | Qt::ControlModifier - | Qt::AltModifier - | Qt::MetaModifier; + | Qt::ControlModifier + | Qt::AltModifier + | Qt::MetaModifier; - QKeySequence keySqeuence(keyEvent->key() | (keyEvent->modifiers() & relevantModifiers)); - for (const QKeySequence &overrideSequence : overrideSequences) + const QKeySequence keySqeuence(keyEvent->key() | (keyEvent->modifiers() & relevantModifiers)); + for (const QKeySequence &overrideSequence : overrideSequences) { if (keySqeuence.matches(overrideSequence)) { keyEvent->accept(); return true; } + } } return false; } diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h index 96a8361069f..efd51d8afc2 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h @@ -26,11 +26,15 @@ #include -#include #include +#include +#include #include +namespace Core { +class FindToolBarPlaceHolder; +} namespace QmlDesigner { class TextEditorView; @@ -72,7 +76,9 @@ private: std::unique_ptr m_textEditor; QPointer m_textEditorView; QTimer m_updateSelectionTimer; - TextEditorStatusBar *m_statusBar; + TextEditorStatusBar *m_statusBar = nullptr; + Core::FindToolBarPlaceHolder *m_findToolBar = nullptr; + QVBoxLayout *m_layout = nullptr; bool m_blockCursorSelectionSynchronisation = false; bool m_blockRoundTrip = false; };