59 mEditor->installEventFilter(
this );
60 installEventFilter(
this );
62 QVBoxLayout *vl =
new QVBoxLayout();
63 vl->setContentsMargins( 0, 0, 0, 0 );
65 vl->addWidget(
editor, 1 );
69 QGridLayout *layout =
new QGridLayout( mEditor );
70 layout->setContentsMargins( 0, 0, 0, 0 );
71 layout->addItem(
new QSpacerItem( 20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding ), 1, 0, 1, 1 );
74 QSizePolicy sizePolicy = QSizePolicy( QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed );
75 mMessageBar->setSizePolicy( sizePolicy );
76 layout->addWidget( mMessageBar, 0, 0, 1, 1 );
79 mFindWidget =
new QWidget();
80 QGridLayout *layoutFind =
new QGridLayout();
81 layoutFind->setContentsMargins( 0, 2, 0, 0 );
82 layoutFind->setSpacing( 1 );
84 if ( !mEditor->isReadOnly() )
86 mShowReplaceBarButton =
new QToolButton();
87 mShowReplaceBarButton->setToolTip( tr(
"Replace" ) );
88 mShowReplaceBarButton->setCheckable(
true );
89 mShowReplaceBarButton->setAutoRaise(
true );
91 layoutFind->addWidget( mShowReplaceBarButton, 0, 0 );
97 mLineEditFind->setShowSearchIcon(
true );
98 mLineEditFind->setPlaceholderText( tr(
"Enter text to find…" ) );
99 layoutFind->addWidget( mLineEditFind, 0, mShowReplaceBarButton ? 1 : 0 );
102 mLineEditReplace->setShowSearchIcon(
true );
103 mLineEditReplace->setPlaceholderText( tr(
"Replace…" ) );
104 layoutFind->addWidget( mLineEditReplace, 1, mShowReplaceBarButton ? 1 : 0 );
106 QHBoxLayout *findButtonLayout =
new QHBoxLayout();
107 findButtonLayout->setContentsMargins( 0, 0, 0, 0 );
108 findButtonLayout->setSpacing( 1 );
109 mCaseSensitiveButton =
new QToolButton();
110 mCaseSensitiveButton->setToolTip( tr(
"Case Sensitive" ) );
111 mCaseSensitiveButton->setCheckable(
true );
112 mCaseSensitiveButton->setAutoRaise(
true );
114 findButtonLayout->addWidget( mCaseSensitiveButton );
116 mWholeWordButton =
new QToolButton();
117 mWholeWordButton->setToolTip( tr(
"Whole Word" ) );
118 mWholeWordButton->setCheckable(
true );
119 mWholeWordButton->setAutoRaise(
true );
121 findButtonLayout->addWidget( mWholeWordButton );
123 mRegexButton =
new QToolButton();
124 mRegexButton->setToolTip( tr(
"Use Regular Expressions" ) );
125 mRegexButton->setCheckable(
true );
126 mRegexButton->setAutoRaise(
true );
128 findButtonLayout->addWidget( mRegexButton );
130 mWrapAroundButton =
new QToolButton();
131 mWrapAroundButton->setToolTip( tr(
"Wrap Around" ) );
132 mWrapAroundButton->setCheckable(
true );
133 mWrapAroundButton->setAutoRaise(
true );
135 findButtonLayout->addWidget( mWrapAroundButton );
137 mFindPrevButton =
new QToolButton();
138 mFindPrevButton->setEnabled(
false );
139 mFindPrevButton->setToolTip( tr(
"Find Previous" ) );
141 mFindPrevButton->setAutoRaise(
true );
142 findButtonLayout->addWidget( mFindPrevButton );
144 mFindNextButton =
new QToolButton();
145 mFindNextButton->setEnabled(
false );
146 mFindNextButton->setToolTip( tr(
"Find Next" ) );
148 mFindNextButton->setAutoRaise(
true );
149 findButtonLayout->addWidget( mFindNextButton );
151 connect( mLineEditFind, &QLineEdit::returnPressed,
this, &QgsCodeEditorWidget::findNext );
152 connect( mLineEditFind, &QLineEdit::textChanged,
this, &QgsCodeEditorWidget::textSearchChanged );
153 connect( mFindNextButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::findNext );
154 connect( mFindPrevButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::findPrevious );
155 connect( mCaseSensitiveButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
156 connect( mWholeWordButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
157 connect( mRegexButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
158 connect( mWrapAroundButton, &QCheckBox::toggled,
this, &QgsCodeEditorWidget::updateSearch );
160 QShortcut *findShortcut =
new QShortcut( QKeySequence::StandardKey::Find, mEditor );
161 findShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
164 QShortcut *findNextShortcut =
new QShortcut( QKeySequence::StandardKey::FindNext,
this );
165 findNextShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
166 connect( findNextShortcut, &QShortcut::activated,
this, &QgsCodeEditorWidget::findNext );
168 QShortcut *findPreviousShortcut =
new QShortcut( QKeySequence::StandardKey::FindPrevious,
this );
169 findPreviousShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
170 connect( findPreviousShortcut, &QShortcut::activated,
this, &QgsCodeEditorWidget::findPrevious );
172 if ( !mEditor->isReadOnly() )
174 QShortcut *replaceShortcut =
new QShortcut( QKeySequence::StandardKey::Replace,
this );
175 replaceShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
176 connect( replaceShortcut, &QShortcut::activated,
this, [
this] {
178 const bool show = mLineEditReplace->isHidden();
188 QShortcut *closeFindShortcut =
new QShortcut( Qt::Key::Key_Escape,
this );
189 closeFindShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
190 connect( closeFindShortcut, &QShortcut::activated,
this, [
this] {
195 layoutFind->addLayout( findButtonLayout, 0, mShowReplaceBarButton ? 2 : 1 );
197 QHBoxLayout *replaceButtonLayout =
new QHBoxLayout();
198 replaceButtonLayout->setContentsMargins( 0, 0, 0, 0 );
199 replaceButtonLayout->setSpacing( 1 );
201 mReplaceButton =
new QToolButton();
202 mReplaceButton->setText( tr(
"Replace" ) );
203 mReplaceButton->setEnabled(
false );
204 connect( mReplaceButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::replace );
205 replaceButtonLayout->addWidget( mReplaceButton );
207 mReplaceAllButton =
new QToolButton();
208 mReplaceAllButton->setText( tr(
"Replace All" ) );
209 mReplaceAllButton->setEnabled(
false );
210 connect( mReplaceAllButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::replaceAll );
211 replaceButtonLayout->addWidget( mReplaceAllButton );
213 layoutFind->addLayout( replaceButtonLayout, 1, mShowReplaceBarButton ? 2 : 1 );
215 QToolButton *closeFindButton =
new QToolButton(
this );
216 closeFindButton->setToolTip( tr(
"Close" ) );
218 closeFindButton->setStyleSheet(
219 "QToolButton { border:none; background-color: rgba(0, 0, 0, 0); }"
220 "QToolButton::menu-button { border:none; background-color: rgba(0, 0, 0, 0); }"
222 closeFindButton->setCursor( Qt::PointingHandCursor );
226 closeFindButton->setIconSize( QSize( iconSize, iconSize ) );
227 closeFindButton->setFixedSize( QSize( iconSize, iconSize ) );
228 connect( closeFindButton, &QAbstractButton::clicked,
this, [
this] {
232 layoutFind->addWidget( closeFindButton, 0, mShowReplaceBarButton ? 3 : 2 );
234 layoutFind->setColumnStretch( mShowReplaceBarButton ? 1 : 0, 1 );
236 mFindWidget->setLayout( layoutFind );
237 vl->addWidget( mFindWidget );
244 mHighlightController = std::make_unique<QgsScrollBarHighlightController>();
245 mHighlightController->setScrollArea( mEditor );