annotate libgui/src/m-editor/find-dialog.cc @ 27455:e92bab9a7f26 stable

fix editors search and replace in selection (bug #56405) * file-editor-tab.cc (handle_double_click): update call to changed method octave_qscintilla::show_selection_markers * find-dialog.cc (find_dialog): parent is class octave_qscintilla, initialize the new class variables for searching in the selection; (handle_selection_changed): only disable selection checkbox if no text is selected, but leave check state as it is, remove the conditial compilation based on HAVE_QSCI_FINDSELECTION; (find): remove consitional compilation, initialize line and column for the search start also for selected text, remember start and end of a possible selection, remove workaround for wrong selection length update, only use finFirst also for the case with selection, check if search hit lies within the selection if necessary and stop search if required, update slection marker for showing the current selected area, remove this marker and restore real selection if no more occurrance of search text was found; (do_replace): update the length of the selection when replacing text; (replace): remove workaround for buggy selection length update * find-dialog.h: include octave_qscintilla, parent and _edit_area are of type octave_qscintilla, new class variable for storing and handling search in selection as well as selection begin and end * octave-qscintilla.cc (show_selection_markers): paraemters are now start line and column as wells as end line and column * octave-qscintilla.h: new parameters for show_selection_markers
author Torsten Lilge <ttl-octave@mailbox.org>
date Sat, 01 Jun 2019 19:30:56 +0200
parents 8854d65e3bcc
children 15752c577f6d 2310164737b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20946
6eff66fb8a02 style fixes for comments
John W. Eaton <jwe@octave.org>
parents: 20932
diff changeset
1 /*
16520
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
2
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
3 Find dialog derived from an example from Qt Toolkit (license below (**))
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
4
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
5 Copyright (C) 2012-2019 Torsten <ttl@justmail.de>
16520
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
6 Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
7 All rights reserved.
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
8 Contact: Nokia Corporation (qt-info@nokia.com)
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
9
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
10 This file is part of Octave.
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
11
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23449
diff changeset
12 Octave is free software: you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22411
diff changeset
13 under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23449
diff changeset
14 the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22411
diff changeset
15 (at your option) any later version.
16520
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
16
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22411
diff changeset
17 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22411
diff changeset
18 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22411
diff changeset
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22411
diff changeset
20 GNU General Public License for more details.
16520
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
21
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
22 You should have received a copy of the GNU General Public License
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
23 along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23449
diff changeset
24 <https://www.gnu.org/licenses/>.
16520
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
25
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
26 ** This file is part of the examples of the Qt Toolkit.
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
27 **
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
28 ** $QT_BEGIN_LICENSE:LGPL$
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
29 ** Commercial Usage
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
30 ** Licensees holding valid Qt Commercial licenses may use this file in
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
31 ** accordance with the Qt Commercial License Agreement provided with the
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
32 ** Software or, alternatively, in accordance with the terms contained in
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
33 ** a written agreement between you and Nokia.
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
34 **
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
35 ** GNU Lesser General Public License Usage
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
36 ** Alternatively, this file may be used under the terms of the GNU Lesser
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
37 ** General Public License version 2.1 as published by the Free Software
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
38 ** Foundation and appearing in the file LICENSE.LGPL included in the
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
39 ** packaging of this file. Please review the following information to
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
40 ** ensure the GNU Lesser General Public License version 2.1 requirements
24893
a3eb0d746042 doc: use canonical https URLs for all external gnu.org references
Mike Miller <mtmiller@octave.org>
parents: 24716
diff changeset
41 ** will be met: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
42 **
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
43 ** In addition, as a special exception, Nokia gives you certain additional
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
44 ** rights. These rights are described in the Nokia Qt LGPL Exception
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
45 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
46 **
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
47 ** GNU General Public License Usage
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
48 ** Alternatively, this file may be used under the terms of the GNU
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
49 ** General Public License version 3.0 as published by the Free Software
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
50 ** Foundation and appearing in the file LICENSE.GPL included in the
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
51 ** packaging of this file. Please review the following information to
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
52 ** ensure the GNU General Public License version 3.0 requirements will be
24893
a3eb0d746042 doc: use canonical https URLs for all external gnu.org references
Mike Miller <mtmiller@octave.org>
parents: 24716
diff changeset
53 ** met: https://www.gnu.org/copyleft/gpl.html.
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
54 **
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
55 ** If you have questions regarding the use of this file, please contact
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
56 ** Nokia at qt-info@nokia.com.
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
57 ** $QT_END_LICENSE$
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
58 **
20946
6eff66fb8a02 style fixes for comments
John W. Eaton <jwe@octave.org>
parents: 20932
diff changeset
59
6eff66fb8a02 style fixes for comments
John W. Eaton <jwe@octave.org>
parents: 20932
diff changeset
60 */
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
61
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21706
diff changeset
62 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21203
diff changeset
63 # include "config.h"
15286
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
64 #endif
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
65
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21706
diff changeset
66 #if defined (HAVE_QSCINTILLA)
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15368
diff changeset
67
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
68 #include <QCheckBox>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
69 #include <QCheckBox>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
70 #include <QDialogButtonBox>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
71 #include <QGridLayout>
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
72 #include <QIcon>
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
73 #include <QLabel>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
74 #include <QLineEdit>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
75 #include <QMessageBox>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
76 #include <QPushButton>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
77 #include <QVBoxLayout>
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22169
diff changeset
78
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
79 #include "find-dialog.h"
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
80
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
81 namespace octave
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
82 {
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
83 find_dialog::find_dialog (octave_qscintilla *edit_area,
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
84 QList<QAction *> find_actions, QWidget *p)
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
85 : QDialog (p), m_in_sel (false), m_sel_beg (-1), m_sel_end (-1)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
86 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
87 setWindowTitle (tr ("Find and Replace"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
88 setWindowIcon (QIcon (":/actions/icons/find.png"));
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
89
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
90 _search_label = new QLabel (tr ("Find &what:"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
91 _search_line_edit = new QLineEdit;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
92 _search_label->setBuddy (_search_line_edit);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
93 _replace_label = new QLabel (tr ("Re&place with:"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
94 _replace_line_edit = new QLineEdit;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
95 _replace_label->setBuddy (_replace_line_edit);
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
96
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
97 _case_check_box = new QCheckBox (tr ("Match &case"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
98 _from_start_check_box = new QCheckBox (tr ("Search from &start"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
99 _wrap_check_box = new QCheckBox (tr ("&Wrap while searching"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
100 _wrap_check_box->setChecked (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
101 _find_next_button = new QPushButton (tr ("&Find Next"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
102 _find_prev_button = new QPushButton (tr ("Find &Previous"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
103 _replace_button = new QPushButton (tr ("&Replace"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
104 _replace_all_button = new QPushButton (tr ("Replace &All"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
105
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
106 _more_button = new QPushButton (tr ("&More..."));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
107 _more_button->setCheckable (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
108 _more_button->setAutoDefault (false);
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
109
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
110 _button_box = new QDialogButtonBox (Qt::Vertical);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
111 _button_box->addButton (_find_next_button, QDialogButtonBox::ActionRole);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
112 _button_box->addButton (_find_prev_button, QDialogButtonBox::ActionRole);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
113 _button_box->addButton (_replace_button, QDialogButtonBox::ActionRole);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
114 _button_box->addButton (_replace_all_button, QDialogButtonBox::ActionRole);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
115 _button_box->addButton (_more_button, QDialogButtonBox::ActionRole);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
116 _button_box->addButton (QDialogButtonBox::Close);
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
117
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
118 _extension = new QWidget (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
119 _whole_words_check_box = new QCheckBox (tr ("&Whole words"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
120 _regex_check_box = new QCheckBox (tr ("Regular E&xpressions"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
121 _backward_check_box = new QCheckBox (tr ("Search &backward"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
122 _search_selection_check_box = new QCheckBox (tr ("Search se&lection"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
123 _search_selection_check_box->setCheckable (true);
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
124 if (edit_area)
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
125 _search_selection_check_box->setEnabled (edit_area->hasSelectedText ());
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
126
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
127 _edit_area = edit_area;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
128 connect (_find_next_button, SIGNAL (clicked ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
129 this, SLOT (find_next ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
130 connect (_find_prev_button, SIGNAL (clicked ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
131 this, SLOT (find_prev ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
132 connect (_more_button, SIGNAL (toggled (bool)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
133 _extension, SLOT (setVisible (bool)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
134 connect (_replace_button, SIGNAL (clicked ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
135 this, SLOT (replace ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
136 connect (_replace_all_button, SIGNAL (clicked ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
137 this, SLOT (replace_all ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
138 connect (_backward_check_box, SIGNAL (stateChanged (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
139 this, SLOT (handle_backward_search_changed (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
140 connect (_button_box, SIGNAL (rejected ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
141 this, SLOT (close ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
142 connect (_search_line_edit, SIGNAL (textChanged (QString)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
143 this, SLOT (handle_search_text_changed (QString)));
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
144
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
145 connect (_edit_area, SIGNAL (copyAvailable (bool)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
146 this, SLOT (handle_selection_changed (bool)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
147 connect (_search_selection_check_box, SIGNAL (stateChanged (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
148 this, SLOT (handle_sel_search_changed (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
149
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
150 QVBoxLayout *extension_layout = new QVBoxLayout ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
151 extension_layout->setMargin (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
152 extension_layout->addWidget (_whole_words_check_box);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
153 extension_layout->addWidget (_backward_check_box);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
154 extension_layout->addWidget (_search_selection_check_box);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
155 _extension->setLayout (extension_layout);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
156
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
157 QGridLayout *top_left_layout = new QGridLayout;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
158 top_left_layout->addWidget (_search_label, 1, 1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
159 top_left_layout->addWidget (_search_line_edit, 1, 2);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
160 top_left_layout->addWidget (_replace_label, 2, 1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
161 top_left_layout->addWidget (_replace_line_edit, 2, 2);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
162
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
163 QVBoxLayout *left_layout = new QVBoxLayout;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
164 left_layout->addLayout (top_left_layout);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
165 left_layout->insertStretch (1, 5);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
166 left_layout->addWidget (_case_check_box);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
167 left_layout->addWidget (_from_start_check_box);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
168 left_layout->addWidget (_wrap_check_box);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
169 left_layout->addWidget (_regex_check_box);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
170
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
171 QGridLayout *main_layout = new QGridLayout;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
172 main_layout->setSizeConstraint (QLayout::SetFixedSize);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
173 main_layout->addLayout (left_layout, 0, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
174 main_layout->addWidget (_button_box, 0, 1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
175 main_layout->addWidget (_extension, 1, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
176 setLayout (main_layout);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
177
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
178 _extension->hide ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
179 _find_next_button->setDefault (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
180 _find_result_available = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
181 _rep_all = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
182 _rep_active = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
183
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
184 // set the actions
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
185 addActions (find_actions);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
186
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
187 // move dialog to side of the parent if there is room on the desktop to do so.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
188 int xp = p->x () +20;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
189 int yp = p->y () + p->frameGeometry ().height () - sizeHint ().height () -20;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
190
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
191 if (yp < 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
192 yp = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
193
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
194 move (xp, yp);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
195
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
196 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
197
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
198 // set text of "search from start" depending on backward search
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
199 void find_dialog::handle_backward_search_changed (int backward)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
200 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
201 if (backward)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
202 _from_start_check_box->setText (tr ("Search from end"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
203 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
204 _from_start_check_box->setText (tr ("Search from start"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
205 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
206
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
207 // search text has changed: reset the search
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
208 void find_dialog::handle_search_text_changed (QString)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
209 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
210 if (_search_selection_check_box->isChecked ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
211 _find_result_available = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
212 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
213
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
214 void find_dialog::handle_sel_search_changed (int selected)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
215 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
216 _from_start_check_box->setEnabled (! selected);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
217 _find_result_available = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
218 }
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
219
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
220 void find_dialog::handle_selection_changed (bool has_selected)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
221 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
222 if (_rep_active)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
223 return;
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
224
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
225 _search_selection_check_box->setEnabled (has_selected);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
226 _find_result_available = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
227 }
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
228
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
229 // initialize search text with selected text if this is in one single line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
230 void find_dialog::init_search_text (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
231 {
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
232 if (_edit_area && _edit_area->hasSelectedText ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
233 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
234 int lbeg, lend, cbeg, cend;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
235 _edit_area->getSelection (&lbeg,&cbeg,&lend,&cend);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
236 if (lbeg == lend)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
237 _search_line_edit->setText (_edit_area->selectedText ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
238 }
20445
d3f39abe119b GUI-Find: keep focus on Find What and select all text when dialog opens
Rafael Monteiro <rafaelgomesmonteiro@gmail.com>
parents: 20181
diff changeset
239
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
240 // set focus to "Find what" and select all text
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
241 _search_line_edit->setFocus ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
242 _search_line_edit->selectAll ();
21706
cce4eb3f6f7c Prevent find dialog defaulting to "replace all" (bug #47561).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
243
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
244 // Default to "find" next time.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
245 // Otherwise, it defaults to the last action, which may be "replace all".
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
246 _find_next_button->setDefault (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
247 }
15988
38348a6c3db0 gui: initialize search text in the find dialog with selected text in editor file
Torsten <ttl@justmail.de>
parents: 15873
diff changeset
248
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
249 void find_dialog::find_next (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
250 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
251 find (! _backward_check_box->isChecked ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
252 }
15988
38348a6c3db0 gui: initialize search text in the find dialog with selected text in editor file
Torsten <ttl@justmail.de>
parents: 15873
diff changeset
253
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
254 void find_dialog::find_prev (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
255 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
256 find (_backward_check_box->isChecked ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
257 }
16520
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
258
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
259 void find_dialog::find (bool forward)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
260 {
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
261 if (! _edit_area)
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
262 return;
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
263
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
264 // line adn col: -1 means search starts at current position
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
265 int line = -1, col = -1;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
266
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
267 bool do_wrap = _wrap_check_box->isChecked ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
268 bool do_forward = forward;
16511
eee1b78d031f gui: fix backward search in find dialog
Torsten <ttl@justmail.de>
parents: 15988
diff changeset
269
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
270 // Initialize the selection begin and end if it is the first search
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
271 if (! _find_result_available)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
272 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
273 if (_search_selection_check_box->isChecked ()
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
274 && _edit_area->hasSelectedText ())
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
275 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
276 int l1, c1, l2, c2;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
277 _edit_area->getSelection (&l1, &c1, &l2, &c2);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
278
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
279 // Store the position of the selection
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
280 m_sel_beg = _edit_area->positionFromLineIndex (l1, c1);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
281 m_sel_end = _edit_area->positionFromLineIndex (l2, c2);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
282 m_in_sel = true;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
283 }
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
284 else
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
285 m_in_sel = false;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
286 }
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
287
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
288 // Get the correct line/col for beginning the search
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
289 if (_rep_all)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
290 {
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
291 // Replace All
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
292 if (_rep_all == 1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
293 {
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
294 // Start at the beginning of file/sel if it is the first try
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
295 if (m_in_sel)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
296 _edit_area->lineIndexFromPosition (m_sel_beg, &line, &col);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
297 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
298 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
299 line = 0;
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
300 col = 0;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
301 }
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
302 }
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
303 do_wrap = false; // Never wrap when replacing all
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
304 }
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
305 else
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
306 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
307 // Normal search (not replace all): calculate start position of
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
308 // search (in file or selection)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
309 if (_from_start_check_box->isChecked ()
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
310 || (m_in_sel && (! _find_result_available)))
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
311 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
312 // From the beginning or the end of file/sel
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
313 if (do_forward)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
314 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
315 // From the beginning
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
316 if (m_in_sel)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
317 _edit_area->lineIndexFromPosition (m_sel_beg, &line, &col);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
318 else
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
319 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
320 line = 0;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
321 col = 0;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
322 }
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
323 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
324 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
325 {
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
326 // From the end
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
327 if (m_in_sel)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
328 _edit_area->lineIndexFromPosition (m_sel_end, &line, &col);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
329 else
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
330 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
331 line = _edit_area->lines () - 1;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
332 col = _edit_area->text (line).length () - 1;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
333 if (col == -1)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
334 col = 0;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
335 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
336 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
337 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
338 else if (! do_forward)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
339 {
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
340 // Start from where the cursor is. Fix QScintilla's cursor
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
341 // positioning
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
342 _edit_area->getCursorPosition (&line,&col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
343 if (_find_result_available && _edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
344 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
345 int currpos = _edit_area->positionFromLineIndex (line,col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
346 currpos -= (_search_line_edit->text ().length ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
347 if (currpos < 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
348 currpos = 0;
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
349 _edit_area->lineIndexFromPosition (currpos, &line, &col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
350 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
351 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
352 }
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
353
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
354 // Do the search
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
355 _find_result_available = _edit_area->findFirst (
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
356 _search_line_edit->text (),
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
357 _regex_check_box->isChecked (),
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
358 _case_check_box->isChecked (),
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
359 _whole_words_check_box->isChecked (),
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
360 do_wrap,
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
361 do_forward,
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
362 line,col,
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
363 true
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
364 #if defined (HAVE_QSCI_VERSION_2_6_0)
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
365 , true
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
366 #endif
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
367 );
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
368
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
369 if (_find_result_available)
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
370 {
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
371 // Search successful: reset search-from-start box and check for
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
372 // the current selection
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
373 _from_start_check_box->setChecked (0);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
374
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
375 if (m_in_sel)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
376 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
377 _edit_area->getCursorPosition (&line,&col);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
378 int pos = _edit_area->positionFromLineIndex (line, col);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
379
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
380 int l1, c1, l2, c2;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
381 _edit_area->lineIndexFromPosition (m_sel_beg, &l1, &c1);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
382 _edit_area->lineIndexFromPosition (m_sel_end, &l2, &c2);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
383 _edit_area->show_selection_markers (l1, c1, l2, c2);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
384
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
385 // Check if new start position is still wihtin the selection
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
386 _find_result_available = pos >= m_sel_beg && pos <= m_sel_end;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
387 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
388 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
389
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
390 // No more search hits
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
391 if (! _find_result_available)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
392 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
393 if (m_in_sel)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
394 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
395 // Restore real selection and remove marker for selection
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
396 int l1, c1, l2, c2;
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
397 _edit_area->lineIndexFromPosition (m_sel_beg, &l1, &c1);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
398 _edit_area->lineIndexFromPosition (m_sel_end, &l2, &c2);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
399 _edit_area->setSelection (l1, c1, l2, c2);
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
400 _edit_area->clear_selection_markers ();
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
401 }
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
402
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
403 // Display message if not replace all
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
404 if (! _rep_all)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
405 no_matches_message ();
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
406 }
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
407
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
408 }
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
409
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
410 void find_dialog::do_replace (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
411 {
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
412 if (_edit_area)
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
413 {
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
414 _rep_active = true; // changes in selection not made by the user
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
415
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
416 _edit_area->replace (_replace_line_edit->text ());
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
417 if (m_in_sel)
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
418 {
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
419 // Update the length of the selection
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
420 m_sel_end = m_sel_end
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
421 - _search_line_edit->text ().toUtf8 ().size ()
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
422 + _replace_line_edit->text ().toUtf8 ().size ();
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
423 }
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
424
26454
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
425 _rep_active = false;
aced09cc1721 fix utilize pointer before verifying in find dialog (bug #55347)
Torsten <mttl@mailbox.org>
parents: 26376
diff changeset
426 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
427 }
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
428
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
429 void find_dialog::replace (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
430 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
431 if (_edit_area)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
432 {
27455
e92bab9a7f26 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27127
diff changeset
433 // Do the replace if we have selected text
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
434 if (_find_result_available && _edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
435 do_replace ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
436
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
437 find_next ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
438 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
439 }
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
440
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
441 void find_dialog::replace_all (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
442 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
443 int line, col;
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
444
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
445 if (_edit_area)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
446 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
447 _edit_area->getCursorPosition (&line,&col);
15177
d52bac6b9813 find-dialog.{h,cc}: Get rid of DOS newlines
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15105
diff changeset
448
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
449 _rep_all = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
450 find_next (); // find first occurence (forward)
27127
8854d65e3bcc undo a complete replace all action in the editor (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26454
diff changeset
451
8854d65e3bcc undo a complete replace all action in the editor (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26454
diff changeset
452 _edit_area->beginUndoAction ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
453 while (_find_result_available) // while search string is found
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
454 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
455 do_replace ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
456 _rep_all++; // inc counter
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
457 find_next (); // find next
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
458 }
27127
8854d65e3bcc undo a complete replace all action in the editor (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26454
diff changeset
459 _edit_area->endUndoAction ();
18184
5f7f58866922 fix search and replace all in find dialog (bug #41051)
Torsten <ttl@justmail.de>
parents: 17790
diff changeset
460
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
461 QMessageBox msg_box (QMessageBox::Information, tr ("Replace Result"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
462 tr ("%1 items replaced").arg (_rep_all-1),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
463 QMessageBox::Ok, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
464 msg_box.exec ();
18184
5f7f58866922 fix search and replace all in find dialog (bug #41051)
Torsten <ttl@justmail.de>
parents: 17790
diff changeset
465
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
466 _rep_all = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
467 _find_result_available = false;
18854
0a66861d8069 implementation of search in selection in gui editor (bbug #41196)
Torsten <ttl@justmail.de>
parents: 18283
diff changeset
468
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
469 if (! _search_selection_check_box->isChecked ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
470 _edit_area->setCursorPosition (line,col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
471 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
472 }
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15368
diff changeset
473
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
474 void find_dialog::no_matches_message (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
475 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
476 QMessageBox msg_box (QMessageBox::Information, tr ("Find Result"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
477 tr ("No more matches found"), QMessageBox::Ok, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
478 msg_box.exec ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
479 }
16520
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
480 }
086b5e81245b find-dialog: find previous button and initial position next to the editor
Torsten <ttl@justmail.de>
parents: 16516
diff changeset
481
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15368
diff changeset
482 #endif