55 mEditor->installEventFilter(
this );
56 installEventFilter(
this );
58 QVBoxLayout *vl =
new QVBoxLayout();
59 vl->setContentsMargins( 0, 0, 0, 0 );
61 vl->addWidget(
editor, 1 );
65 QGridLayout *layout =
new QGridLayout( mEditor );
66 layout->setContentsMargins( 0, 0, 0, 0 );
67 layout->addItem(
new QSpacerItem( 20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding ), 1, 0, 1, 1 );
70 QSizePolicy sizePolicy = QSizePolicy( QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed );
71 mMessageBar->setSizePolicy( sizePolicy );
72 layout->addWidget( mMessageBar, 0, 0, 1, 1 );
75 mFindWidget =
new QWidget();
76 QGridLayout *layoutFind =
new QGridLayout();
77 layoutFind->setContentsMargins( 0, 2, 0, 0 );
78 layoutFind->setSpacing( 1 );
80 if ( !mEditor->isReadOnly() )
82 mShowReplaceBarButton =
new QToolButton();
83 mShowReplaceBarButton->setToolTip( tr(
"Replace" ) );
84 mShowReplaceBarButton->setCheckable(
true );
85 mShowReplaceBarButton->setAutoRaise(
true );
87 layoutFind->addWidget( mShowReplaceBarButton, 0, 0 );
93 mLineEditFind->setShowSearchIcon(
true );
94 mLineEditFind->setPlaceholderText( tr(
"Enter text to find…" ) );
95 layoutFind->addWidget( mLineEditFind, 0, mShowReplaceBarButton ? 1 : 0 );
98 mLineEditReplace->setShowSearchIcon(
true );
99 mLineEditReplace->setPlaceholderText( tr(
"Replace…" ) );
100 layoutFind->addWidget( mLineEditReplace, 1, mShowReplaceBarButton ? 1 : 0 );
102 QHBoxLayout *findButtonLayout =
new QHBoxLayout();
103 findButtonLayout->setContentsMargins( 0, 0, 0, 0 );
104 findButtonLayout->setSpacing( 1 );
105 mCaseSensitiveButton =
new QToolButton();
106 mCaseSensitiveButton->setToolTip( tr(
"Case Sensitive" ) );
107 mCaseSensitiveButton->setCheckable(
true );
108 mCaseSensitiveButton->setAutoRaise(
true );
110 findButtonLayout->addWidget( mCaseSensitiveButton );
112 mWholeWordButton =
new QToolButton();
113 mWholeWordButton->setToolTip( tr(
"Whole Word" ) );
114 mWholeWordButton->setCheckable(
true );
115 mWholeWordButton->setAutoRaise(
true );
117 findButtonLayout->addWidget( mWholeWordButton );
119 mRegexButton =
new QToolButton();
120 mRegexButton->setToolTip( tr(
"Use Regular Expressions" ) );
121 mRegexButton->setCheckable(
true );
122 mRegexButton->setAutoRaise(
true );
124 findButtonLayout->addWidget( mRegexButton );
126 mWrapAroundButton =
new QToolButton();
127 mWrapAroundButton->setToolTip( tr(
"Wrap Around" ) );
128 mWrapAroundButton->setCheckable(
true );
129 mWrapAroundButton->setAutoRaise(
true );
131 findButtonLayout->addWidget( mWrapAroundButton );
133 mFindPrevButton =
new QToolButton();
134 mFindPrevButton->setEnabled(
false );
135 mFindPrevButton->setToolTip( tr(
"Find Previous" ) );
137 mFindPrevButton->setAutoRaise(
true );
138 findButtonLayout->addWidget( mFindPrevButton );
140 mFindNextButton =
new QToolButton();
141 mFindNextButton->setEnabled(
false );
142 mFindNextButton->setToolTip( tr(
"Find Next" ) );
144 mFindNextButton->setAutoRaise(
true );
145 findButtonLayout->addWidget( mFindNextButton );
147 connect( mLineEditFind, &QLineEdit::returnPressed,
this, &QgsCodeEditorWidget::findNext );
148 connect( mLineEditFind, &QLineEdit::textChanged,
this, &QgsCodeEditorWidget::textSearchChanged );
149 connect( mFindNextButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::findNext );
150 connect( mFindPrevButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::findPrevious );
151 connect( mCaseSensitiveButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
152 connect( mWholeWordButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
153 connect( mRegexButton, &QToolButton::toggled,
this, &QgsCodeEditorWidget::updateSearch );
154 connect( mWrapAroundButton, &QCheckBox::toggled,
this, &QgsCodeEditorWidget::updateSearch );
156 QShortcut *findShortcut =
new QShortcut( QKeySequence::StandardKey::Find, mEditor );
157 findShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
160 QShortcut *findNextShortcut =
new QShortcut( QKeySequence::StandardKey::FindNext,
this );
161 findNextShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
162 connect( findNextShortcut, &QShortcut::activated,
this, &QgsCodeEditorWidget::findNext );
164 QShortcut *findPreviousShortcut =
new QShortcut( QKeySequence::StandardKey::FindPrevious,
this );
165 findPreviousShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
166 connect( findPreviousShortcut, &QShortcut::activated,
this, &QgsCodeEditorWidget::findPrevious );
168 if ( !mEditor->isReadOnly() )
170 QShortcut *replaceShortcut =
new QShortcut( QKeySequence::StandardKey::Replace,
this );
171 replaceShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
172 connect( replaceShortcut, &QShortcut::activated,
this, [
this] {
174 const bool show = mLineEditReplace->isHidden();
184 QShortcut *closeFindShortcut =
new QShortcut( Qt::Key::Key_Escape,
this );
185 closeFindShortcut->setContext( Qt::ShortcutContext::WidgetWithChildrenShortcut );
186 connect( closeFindShortcut, &QShortcut::activated,
this, [
this] {
191 layoutFind->addLayout( findButtonLayout, 0, mShowReplaceBarButton ? 2 : 1 );
193 QHBoxLayout *replaceButtonLayout =
new QHBoxLayout();
194 replaceButtonLayout->setContentsMargins( 0, 0, 0, 0 );
195 replaceButtonLayout->setSpacing( 1 );
197 mReplaceButton =
new QToolButton();
198 mReplaceButton->setText( tr(
"Replace" ) );
199 mReplaceButton->setEnabled(
false );
200 connect( mReplaceButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::replace );
201 replaceButtonLayout->addWidget( mReplaceButton );
203 mReplaceAllButton =
new QToolButton();
204 mReplaceAllButton->setText( tr(
"Replace All" ) );
205 mReplaceAllButton->setEnabled(
false );
206 connect( mReplaceAllButton, &QToolButton::clicked,
this, &QgsCodeEditorWidget::replaceAll );
207 replaceButtonLayout->addWidget( mReplaceAllButton );
209 layoutFind->addLayout( replaceButtonLayout, 1, mShowReplaceBarButton ? 2 : 1 );
211 QToolButton *closeFindButton =
new QToolButton(
this );
212 closeFindButton->setToolTip( tr(
"Close" ) );
214 closeFindButton->setStyleSheet(
215 "QToolButton { border:none; background-color: rgba(0, 0, 0, 0); }"
216 "QToolButton::menu-button { border:none; background-color: rgba(0, 0, 0, 0); }"
218 closeFindButton->setCursor( Qt::PointingHandCursor );
222 closeFindButton->setIconSize( QSize( iconSize, iconSize ) );
223 closeFindButton->setFixedSize( QSize( iconSize, iconSize ) );
224 connect( closeFindButton, &QAbstractButton::clicked,
this, [
this] {
228 layoutFind->addWidget( closeFindButton, 0, mShowReplaceBarButton ? 3 : 2 );
230 layoutFind->setColumnStretch( mShowReplaceBarButton ? 1 : 0, 1 );
232 mFindWidget->setLayout( layoutFind );
233 vl->addWidget( mFindWidget );
240 mHighlightController = std::make_unique<QgsScrollBarHighlightController>();
241 mHighlightController->setScrollArea( mEditor );