41 , mMessageBar( messageBar )
45 mEditor->installEventFilter(
this );
46 installEventFilter(
this );
48 QVBoxLayout *vl =
new QVBoxLayout();
49 vl->setContentsMargins( 0, 0, 0, 0 );
51 vl->addWidget(
editor, 1 );
55 QGridLayout *layout =
new QGridLayout( mEditor );
56 layout->setContentsMargins( 0, 0, 0, 0 );
57 layout->addItem(
new QSpacerItem( 20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding ), 1, 0, 1, 1 );
60 QSizePolicy sizePolicy = QSizePolicy( QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed );
61 mMessageBar->setSizePolicy( sizePolicy );
62 layout->addWidget( mMessageBar, 0, 0, 1, 1 );
65 mFindWidget =
new QWidget();
66 QGridLayout *layoutFind =
new QGridLayout();
67 layoutFind->setContentsMargins( 0, 2, 0, 0 );
68 layoutFind->setSpacing( 1 );
70 if ( !mEditor->isReadOnly() )
72 mShowReplaceBarButton =
new QToolButton();
73 mShowReplaceBarButton->setToolTip( tr(
"Replace" ) );
74 mShowReplaceBarButton->setCheckable(
true );
75 mShowReplaceBarButton->setAutoRaise(
true );
77 layoutFind->addWidget( mShowReplaceBarButton, 0, 0 );
84 mLineEditFind->setPlaceholderText( tr(
"Enter text to find…" ) );
85 layoutFind->addWidget( mLineEditFind, 0, mShowReplaceBarButton ? 1 : 0 );
89 mLineEditReplace->setPlaceholderText( tr(
"Replace…" ) );
90 layoutFind->addWidget( mLineEditReplace, 1, mShowReplaceBarButton ? 1 : 0 );
92 QHBoxLayout *findButtonLayout =
new QHBoxLayout();
93 findButtonLayout->setContentsMargins( 0, 0, 0, 0 );
94 findButtonLayout->setSpacing( 1 );
95 mCaseSensitiveButton =
new QToolButton();
96 mCaseSensitiveButton->setToolTip( tr(
"Case Sensitive" ) );
97 mCaseSensitiveButton->setCheckable(
true );
98 mCaseSensitiveButton->setAutoRaise(
true );
100 findButtonLayout->addWidget( mCaseSensitiveButton );
102 mWholeWordButton =
new QToolButton( );
103 mWholeWordButton->setToolTip( tr(
"Whole Word" ) );
104 mWholeWordButton->setCheckable(
true );
105 mWholeWordButton->setAutoRaise(
true );
107 findButtonLayout->addWidget( mWholeWordButton );
109 mRegexButton =
new QToolButton( );
110 mRegexButton->setToolTip( tr(
"Use Regular Expressions" ) );
111 mRegexButton->setCheckable(
true );
112 mRegexButton->setAutoRaise(
true );
114 findButtonLayout->addWidget( mRegexButton );
116 mWrapAroundButton =
new QToolButton();
117 mWrapAroundButton->setToolTip( tr(
"Wrap Around" ) );
118 mWrapAroundButton->setCheckable(
true );
119 mWrapAroundButton->setAutoRaise(
true );
121 findButtonLayout->addWidget( mWrapAroundButton );
123 mFindPrevButton =
new QToolButton();
124 mFindPrevButton->setEnabled(
false );
125 mFindPrevButton->setToolTip( tr(
"Find Previous" ) );
127 mFindPrevButton->setAutoRaise(
true );
128 findButtonLayout->addWidget( mFindPrevButton );
130 mFindNextButton =
new QToolButton();
131 mFindNextButton->setEnabled(
false );
132 mFindNextButton->setToolTip( tr(
"Find Next" ) );
134 mFindNextButton->setAutoRaise(
true );
135 findButtonLayout->addWidget( mFindNextButton );
137 connect( mLineEditFind, &QLineEdit::returnPressed,
this, &QgsCodeEditorWidget::findNext );
138 connect( mLineEditFind, &QLineEdit::textChanged,
this, &QgsCodeEditorWidget::textSearchChanged );
139 connect( mFindNextButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::findNext );
140 connect( mFindPrevButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::findPrevious );
141 connect( mCaseSensitiveButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
142 connect( mWholeWordButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
143 connect( mRegexButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
144 connect( mWrapAroundButton, &QCheckBox::toggled,
this, &QgsCodeEditorWidget::updateSearch );
146 QShortcut *findShortcut =
new QShortcut( QKeySequence::StandardKey::Find, mEditor );
147 findShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
150 QShortcut *findNextShortcut =
new QShortcut( QKeySequence::StandardKey::FindNext,
this );
151 findNextShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
152 connect( findNextShortcut, &QShortcut::activated,
this, &QgsCodeEditorWidget::findNext );
154 QShortcut *findPreviousShortcut =
new QShortcut( QKeySequence::StandardKey::FindPrevious,
this );
155 findPreviousShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
156 connect( findPreviousShortcut, &QShortcut::activated,
this, &QgsCodeEditorWidget::findPrevious );
158 if ( !mEditor->isReadOnly() )
160 QShortcut *replaceShortcut =
new QShortcut( QKeySequence::StandardKey::Replace,
this );
161 replaceShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
162 connect( replaceShortcut, &QShortcut::activated,
this, [ = ]
165 const bool show = mLineEditReplace->isHidden();
175 QShortcut *closeFindShortcut =
new QShortcut( Qt::Key::Key_Escape,
this );
176 closeFindShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
177 connect( closeFindShortcut, &QShortcut::activated,
this, [
this]
183 layoutFind->addLayout( findButtonLayout, 0, mShowReplaceBarButton ? 2 : 1 );
185 QHBoxLayout *replaceButtonLayout =
new QHBoxLayout();
186 replaceButtonLayout->setContentsMargins( 0, 0, 0, 0 );
187 replaceButtonLayout->setSpacing( 1 );
189 mReplaceButton =
new QToolButton();
190 mReplaceButton->setText( tr(
"Replace" ) );
191 mReplaceButton->setEnabled(
false );
192 connect( mReplaceButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::replace );
193 replaceButtonLayout->addWidget( mReplaceButton );
195 mReplaceAllButton =
new QToolButton();
196 mReplaceAllButton->setText( tr(
"Replace All" ) );
197 mReplaceAllButton->setEnabled(
false );
198 connect( mReplaceAllButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::replaceAll );
199 replaceButtonLayout->addWidget( mReplaceAllButton );
201 layoutFind->addLayout( replaceButtonLayout, 1, mShowReplaceBarButton ? 2 : 1 );
203 QToolButton *closeFindButton =
new QToolButton(
this );
204 closeFindButton->setToolTip( tr(
"Close" ) );
206 closeFindButton->setStyleSheet(
207 "QToolButton { border:none; background-color: rgba(0, 0, 0, 0); }"
208 "QToolButton::menu-button { border:none; background-color: rgba(0, 0, 0, 0); }" );
209 closeFindButton->setCursor( Qt::PointingHandCursor );
213 closeFindButton->setIconSize( QSize( iconSize, iconSize ) );
214 closeFindButton->setFixedSize( QSize( iconSize, iconSize ) );
215 connect( closeFindButton, &QAbstractButton::clicked,
this, [
this]
220 layoutFind->addWidget( closeFindButton, 0, mShowReplaceBarButton ? 3 : 2 );
222 layoutFind->setColumnStretch( mShowReplaceBarButton ? 1 : 0, 1 );
224 mFindWidget->setLayout( layoutFind );
225 vl->addWidget( mFindWidget );
232 mHighlightController = std::make_unique< QgsScrollBarHighlightController >();
233 mHighlightController->setScrollArea( mEditor );