annotate libgui/src/m-editor/file-editor-tab.cc @ 25883:cfdc768b661c

allow native dialogs for remaining file open/save dialogs (bug #5 * files-dock-widget.cc (popdownmenu_search_dir): allow native dialogs for selecting a new file browser directory * file-editor-tab.cc (load_file): read file in binary form and test for errors when decoding text using the currently set default encoding, allows user to continue editing or close the file in case of invalid characters; (handle_decode_warning_answer): analyze users choice in case of detection of invalid chars during decoding (save_file_as): allow native dialogs for file selection dialog and remove the extra items for encoding and line ending from the dialog; (handle_combo_eol_current_index, handle_combo_enc_current_index): removed obsolete slots for removed dialog items * file-editor-tab.h: update includes, new slot handle_decode_warning_answer, removed slots handle_combo_eol_current_index, handle_combo_enc_current_index * main-window.cc (request_open_file): allow native file dialogs and remove extra items for selecting encoding and line ending from the dialog * shortcut-manager.cc (do_import_export): allow native file dialogs * variable-editor.cc (variable_editor_stack::save): allow native file dialogs
author Torsten <mttl@mailbox.org>
date Fri, 14 Sep 2018 18:47:23 +0200
parents 94b8dc8292af
children bb0c58796275
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
1 /*
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
2
25054
6652d3823428 maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 24827
diff changeset
3 Copyright (C) 2011-2018 Jacob Dawid
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
4
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
5 This file is part of Octave.
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
6
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24495
diff changeset
7 Octave is free software: you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
8 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: 24495
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
10 (at your option) any later version.
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
11
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
12 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
15 GNU General Public License for more details.
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
16
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
17 You should have received a copy of the GNU General Public License
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
18 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: 24495
diff changeset
19 <https://www.gnu.org/licenses/>.
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
20
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
21 */
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
22
24164
44f0ad0e3af5 doc: libgui/src/m-editor/file-editor-tab.cc: fix Doxygen comment.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 24123
diff changeset
23 //! @file file-editor-tab.cc A single GUI file tab.
24109
1d6c940a1b37 doc: Improve Doxygen documentation for some files in libgui.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23996
diff changeset
24 //!
1d6c940a1b37 doc: Improve Doxygen documentation for some files in libgui.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23996
diff changeset
25 //! This interfaces QsciScintilla with the rest of Octave.
21058
759fcdf3666d Test GUI marker flags correctly, and omit unnecessary test finding next marker
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21054
diff changeset
26
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21651
diff changeset
27 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21213
diff changeset
28 # include "config.h"
15286
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
29 #endif
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
30
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21651
diff changeset
31 #if defined (HAVE_QSCINTILLA)
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15860
diff changeset
32
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
33 #if defined (HAVE_QSCI_QSCILEXEROCTAVE_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
34 # define HAVE_LEXER_OCTAVE 1
21203
710e700cdd7f maint: Clean up naming and indentation of #ifdef blocks in libgui
Rik <rik@octave.org>
parents: 21158
diff changeset
35 # include <Qsci/qscilexeroctave.h>
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
36 #elif defined (HAVE_QSCI_QSCILEXERMATLAB_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
37 # define HAVE_LEXER_MATLAB 1
21203
710e700cdd7f maint: Clean up naming and indentation of #ifdef blocks in libgui
Rik <rik@octave.org>
parents: 21158
diff changeset
38 # include <Qsci/qscilexermatlab.h>
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
39 #endif
14873
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
40 #include <Qsci/qscilexercpp.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
41 #include <Qsci/qscilexerbash.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
42 #include <Qsci/qscilexerperl.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
43 #include <Qsci/qscilexerbatch.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
44 #include <Qsci/qscilexerdiff.h>
16440
aaf024ac8015 Add editor print menu/toolbutton implementation
John Donoghue <john.donoghue@ieee.org>
parents: 16437
diff changeset
45 #include <Qsci/qsciprinter.h>
15257
7ee62f559a73 Fix compilation under Windows with GUI and LLVM enabled.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15204
diff changeset
46 #include <QApplication>
7ee62f559a73 Fix compilation under Windows with GUI and LLVM enabled.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15204
diff changeset
47 #include <QFileDialog>
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
48 #include <QMessageBox>
15257
7ee62f559a73 Fix compilation under Windows with GUI and LLVM enabled.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15204
diff changeset
49 #include <QTextStream>
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
50 #include <QVBoxLayout>
16375
f482302d81c9 editor goto line menu item (bug #38590)
John Donoghue <john.donoghue@ieee.org>
parents: 16018
diff changeset
51 #include <QInputDialog>
16440
aaf024ac8015 Add editor print menu/toolbutton implementation
John Donoghue <john.donoghue@ieee.org>
parents: 16437
diff changeset
52 #include <QPrintDialog>
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
53 #include <QDateTime>
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
54 #include <QDesktopServices>
20731
83611b387bc5 provide a user preference for the encoding used by the editor (bug #45597)
Torsten <ttl@justmail.de>
parents: 20713
diff changeset
55 #include <QTextCodec>
21007
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
56 #include <QStyle>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
57 #include <QTextBlock>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
58 #include <QLabel>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
59 #include <QCheckBox>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
60 #include <QDialogButtonBox>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
61 #include <QPushButton>
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
62
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
63 #include "gui-preferences.h"
21007
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
64 #include "resource-manager.h"
25443
2fa7cd178c4a new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents: 25440
diff changeset
65
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
66 #include "file-editor-tab.h"
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
67 #include "file-editor.h"
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
68 #include "octave-txt-lexer.h"
21007
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
69 #include "marker.h"
16547
3cd80afc3509 improve debugging with the GUI
John W. Eaton <jwe@octave.org>
parents: 16520
diff changeset
70
21310
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
71 #include "file-ops.h"
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
72
23137
334119c390b3 move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents: 23084
diff changeset
73 #include "bp-table.h"
22181
acdd8983d308 Force reload of a function after it is saved in the editor (bug #46632)
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22180
diff changeset
74 #include "call-stack.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
75 #include "interpreter-private.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
76 #include "interpreter.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
77 #include "oct-map.h"
16635
25e418d23a4b fix running files from file browser's context menu
Torsten <ttl@justmail.de>
parents: 16591
diff changeset
78 #include "octave-qt-link.h"
22181
acdd8983d308 Force reload of a function after it is saved in the editor (bug #46632)
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22180
diff changeset
79 #include "ov-usr-fcn.h"
acdd8983d308 Force reload of a function after it is saved in the editor (bug #46632)
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22180
diff changeset
80 #include "symtab.h"
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
81 #include "unwind-prot.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
82 #include "utils.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
83 #include "version.h"
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
84
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
85 namespace octave
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
86 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
87 bool file_editor_tab::_cancelled = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
88
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
89 //! A file_editor_tab object consists of a text area and three left margins.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
90 //! The first holds breakpoints, bookmarks, and the debug program counter.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
91 //! The second holds line numbers. The third holds "fold" marks, to hide
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
92 //! sections of text.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
93
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
94 // Make parent null for the file editor tab so that warning WindowModal
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
95 // messages don't affect grandparents.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
96 file_editor_tab::file_editor_tab (const QString& directory_arg)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
97 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
98 _lexer_apis = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
99 _is_octave_file = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
100 _lines_changed = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
101
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
102 _ced = directory_arg;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
103
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
104 _file_name = "";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
105 _file_system_watcher.setObjectName ("_qt_autotest_force_engine_poller");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
106
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
107 _edit_area = new octave_qscintilla (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
108 _line = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
109 _col = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
110
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
111 _bp_lines.clear (); // start with empty lists of breakpoints
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
112 _bp_conditions.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
113 m_bp_restore_count = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
114
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
115 // Initialize last modification date to now
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
116 m_last_modified = QDateTime::currentDateTimeUtc();
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
117
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
118 connect (_edit_area, SIGNAL (cursorPositionChanged (int, int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
119 this, SLOT (handle_cursor_moved (int,int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
120
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
121 connect (_edit_area, SIGNAL (SCN_CHARADDED (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
122 this, SLOT (handle_char_added (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
123
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
124 connect (_edit_area, SIGNAL (SCN_DOUBLECLICK (int, int, int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
125 this, SLOT (handle_double_click (int, int, int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
126
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
127 connect (_edit_area, SIGNAL (linesChanged ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
128 this, SLOT (handle_lines_changed ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
129
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
130 connect (_edit_area, SIGNAL (context_menu_edit_signal (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
131 this, SLOT (handle_context_menu_edit (const QString&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
132
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
133 // create statusbar for row/col indicator and eol mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
134 _status_bar = new QStatusBar (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
135
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
136 // row- and col-indicator
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
137 _row_indicator = new QLabel ("", this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
138 QFontMetrics fm = _row_indicator->fontMetrics ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
139 _row_indicator->setMinimumSize (4.5*fm.averageCharWidth (),0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
140 QLabel *row_label = new QLabel (tr ("line:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
141 _col_indicator = new QLabel ("", this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
142 _col_indicator->setMinimumSize (4*fm.averageCharWidth (),0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
143 QLabel *col_label = new QLabel (tr ("col:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
144 _status_bar->addWidget (row_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
145 _status_bar->addWidget (_row_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
146 _status_bar->addWidget (col_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
147 _status_bar->addWidget (_col_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
148
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
149 // status bar: encoding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
150 QLabel *enc_label = new QLabel (tr ("encoding:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
151 _enc_indicator = new QLabel ("",this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
152 _status_bar->addWidget (enc_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
153 _status_bar->addWidget (_enc_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
154 _status_bar->addWidget (new QLabel (" ", this), 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
155
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
156 // status bar: eol mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
157 QLabel *eol_label = new QLabel (tr ("eol:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
158 _eol_indicator = new QLabel ("",this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
159 _status_bar->addWidget (eol_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
160 _status_bar->addWidget (_eol_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
161 _status_bar->addWidget (new QLabel (" ", this), 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
162
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
163 // Leave the find dialog box out of memory until requested.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
164 _find_dialog = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
165 _find_dialog_is_visible = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
166
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
167 // symbols
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
168 _edit_area->setMarginType (1, QsciScintilla::SymbolMargin);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
169 _edit_area->setMarginSensitivity (1, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
170 _edit_area->markerDefine (QsciScintilla::RightTriangle, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
171 _edit_area->setMarkerBackgroundColor (QColor (0,0,232), marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
172 _edit_area->markerDefine (QsciScintilla::Circle, marker::breakpoint);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
173 _edit_area->setMarkerBackgroundColor (QColor (192,0,0), marker::breakpoint);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
174 _edit_area->markerDefine (QsciScintilla::Circle, marker::cond_break);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
175 _edit_area->setMarkerBackgroundColor (QColor (255,127,0), marker::cond_break);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
176 _edit_area->markerDefine (QsciScintilla::RightArrow, marker::debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
177 _edit_area->setMarkerBackgroundColor (QColor (255,255,0),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
178 marker::debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
179 _edit_area->markerDefine (QsciScintilla::RightArrow,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
180 marker::unsure_debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
181 _edit_area->setMarkerBackgroundColor (QColor (192,192,192),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
182 marker::unsure_debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
183
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
184 connect (_edit_area, SIGNAL (marginClicked (int, int,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
185 Qt::KeyboardModifiers)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
186 this, SLOT (handle_margin_clicked (int, int,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
187 Qt::KeyboardModifiers)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
188
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
189 connect (_edit_area, SIGNAL (context_menu_break_condition_signal (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
190 this, SLOT (handle_context_menu_break_condition (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
191
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
192 // line numbers
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
193 _edit_area->setMarginsForegroundColor (QColor (96, 96, 96));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
194 _edit_area->setMarginsBackgroundColor (QColor (232, 232, 220));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
195 _edit_area->setMarginType (2, QsciScintilla::TextMargin);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
196
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
197 // other features
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
198 _edit_area->setBraceMatching (QsciScintilla::StrictBraceMatch);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
199 _edit_area->setAutoIndent (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
200 _edit_area->setIndentationWidth (2);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
201 _edit_area->setIndentationsUseTabs (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
202
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
203 _edit_area->setUtf8 (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
204
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
205 // auto completion
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
206 _edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCSETCANCELATSTART, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
207
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
208 QVBoxLayout *edit_area_layout = new QVBoxLayout ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
209 edit_area_layout->addWidget (_edit_area);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
210 edit_area_layout->addWidget (_status_bar);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
211 edit_area_layout->setMargin (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
212 setLayout (edit_area_layout);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
213
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
214 // connect modified signal
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
215 connect (_edit_area, SIGNAL (modificationChanged (bool)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
216 this, SLOT (update_window_title (bool)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
217
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
218 connect (_edit_area, SIGNAL (copyAvailable (bool)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
219 this, SLOT (handle_copy_available (bool)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
220
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
221 connect (&_file_system_watcher, SIGNAL (fileChanged (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
222 this, SLOT (file_has_changed (const QString&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
223
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
224 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
225 if (settings)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
226 notice_settings (settings, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
227
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
228 setFocusProxy (_edit_area);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
229
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
230 // encoding, not updated with the settings
20774
5c5e085a1ae6 allow selecting an encoding when saving a file (bug #45688)
Torsten <ttl@justmail.de>
parents: 20753
diff changeset
231 #if defined (Q_OS_WIN32)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
232 _encoding = settings->value ("editor/default_encoding", "SYSTEM")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
233 .toString ();
20774
5c5e085a1ae6 allow selecting an encoding when saving a file (bug #45688)
Torsten <ttl@justmail.de>
parents: 20753
diff changeset
234 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
235 _encoding = settings->value ("editor/default_encoding", "UTF-8")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
236 .toString ();
20774
5c5e085a1ae6 allow selecting an encoding when saving a file (bug #45688)
Torsten <ttl@justmail.de>
parents: 20753
diff changeset
237 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
238 _enc_indicator->setText (_encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
239 // no changes in encoding yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
240 _new_encoding = _encoding;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
241 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
242
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
243 file_editor_tab::~file_editor_tab (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
244 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
245 // Tell all connected markers to self-destruct.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
246 emit remove_all_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
247 emit remove_all_positions ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
248
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
249 // Destroy items attached to _edit_area.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
250 QsciLexer *lexer = _edit_area->lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
251 if (lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
252 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
253 delete lexer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
254 _edit_area->setLexer (nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
255 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
256 if (_find_dialog)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
257 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
258 delete _find_dialog;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
259 _find_dialog = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
260 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
261
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
262 // Destroy _edit_area.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
263 delete _edit_area;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
264 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
265
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
266 void file_editor_tab::set_encoding (const QString& new_encoding)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
267 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
268 if (new_encoding.isEmpty ())
19004
e87e65bc71ae improved finding a function file for editing in gui (bug #41509)
Torsten <ttl@justmail.de>
parents: 18946
diff changeset
269 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
270
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
271 _encoding = new_encoding;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
272 _enc_indicator->setText (_encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
273 if (! _edit_area->text ().isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
274 set_modified (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
275 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
276
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
277 void file_editor_tab::closeEvent (QCloseEvent *e)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
278 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
279 _cancelled = false; // prevent unwanted interaction of previous
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
280 // exits of octave which were canceled by the user
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
281
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
282 if (check_file_modified () == QMessageBox::Cancel)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
283 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
284 // ignore close event if file is not saved and user cancels
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
285 // closing this window
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
286 e->ignore ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
287 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
288 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
289 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
290 e->accept ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
291 emit tab_remove_request ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
292 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
293 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
294
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
295 void file_editor_tab::set_current_directory (const QString& dir)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
296 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
297 _ced = dir;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
298 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
299
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
300 void file_editor_tab::handle_context_menu_edit (const QString& word_at_cursor)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
301 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
302 // search for a subfunction in actual file (this is done at first because
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
303 // octave finds this function before other with same name in the search path
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
304 QRegExp rxfun1 ("^[\t ]*function[^=]+=[\t ]*"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
305 + word_at_cursor + "[\t ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
306 QRegExp rxfun2 ("^[\t ]*function[\t ]+"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
307 + word_at_cursor + "[\t ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
308 QRegExp rxfun3 ("^[\t ]*function[\t ]+"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
309 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
310 QRegExp rxfun4 ("^[\t ]*function[^=]+=[\t ]*"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
311 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
312
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
313 int pos_fct = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
314 QStringList lines = _edit_area->text ().split ("\n");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
315
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
316 int line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
317 for (line = 0; line < lines.count (); line++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
318 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
319 if ((pos_fct = rxfun1.indexIn (lines.at (line))) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
320 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
321 if ((pos_fct = rxfun2.indexIn (lines.at (line))) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
322 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
323 if ((pos_fct = rxfun3.indexIn (lines.at (line))) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
324 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
325 if ((pos_fct = rxfun4.indexIn (lines.at (line))) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
326 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
327 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
328
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
329 if (pos_fct > -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
330 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
331 // reg expr. found: it is an internal function
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
332 _edit_area->setCursorPosition (line, pos_fct);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
333 _edit_area->SendScintilla (2232, line); // SCI_ENSUREVISIBLE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
334 // SCI_VISIBLEFROMDOCLINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
335 int vis_line = _edit_area->SendScintilla (2220, line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
336 _edit_area->SendScintilla (2613, vis_line); // SCI_SETFIRSTVISIBLELINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
337 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
338 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
339
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
340 emit edit_mfile_request (word_at_cursor, _file_name, _ced, -1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
341 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
342
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
343 // If "dbstop if ..." selected from context menu, create a conditional
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
344 // breakpoint. The default condition is (a) the existing condition if there
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
345 // is already a breakpoint (b) any selected text, or (c) empty
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
346 void file_editor_tab::handle_context_menu_break_condition (int linenr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
347 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
348 // Ensure editor line numbers match Octave core's line numbers.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
349 // Give users the option to save modifications if necessary.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
350 if (! unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
351 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
352
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
353 QString cond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
354 bp_info info (_file_name, linenr+1); // Get function name & dir from filename.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
355
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
356 // Search for previous condition. FIXME: is there a more direct way?
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
357 if (_edit_area->markersAtLine (linenr) & (1 << marker::cond_break))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
358 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
359 emit report_marker_linenr (_bp_lines, _bp_conditions);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
360 for (int i = 0; i < _bp_lines.length (); i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
361 if (_bp_lines.value (i) == linenr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
362 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
363 cond = _bp_conditions.value (i);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
364 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
365 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
366 _bp_lines.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
367 _bp_conditions.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
368 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
369
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
370 // If text selected by the mouse, default to that instead
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
371 // If both present, use the OR of them, to avoid accidental overwriting
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
372 // FIXME: If both are present, show old condition unselected and
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
373 // the selection (in edit area) selected (in the dialog).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
374 if (_edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
375 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
376 if (cond == "")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
377 cond = _edit_area->selectedText ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
378 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
379 cond = '(' + cond + ") || (" + _edit_area->selectedText () + ')';
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
380 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
381
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
382 bool valid = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
383 std::string prompt = "dbstop if";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
384 bool ok;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
385 while (! valid)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
386 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
387 QString new_condition
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
388 = QInputDialog::getText (this, tr ("Breakpoint condition"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
389 tr (prompt.c_str ()), QLineEdit::Normal, cond,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
390 &ok);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
391 if (ok) // If cancel, don't change breakpoint condition.
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
392 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
393 try
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
394 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
395 // Suppress error messages on the console.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
396 unwind_protect frame;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
397 frame.protect_var (buffer_error_messages);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
398 buffer_error_messages++;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
399
25336
389757b7b6af eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
400 bp_table& bptab
389757b7b6af eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
401 = __get_bp_table__ ("handle_context_menu_break_condition");
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
402
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
403 bptab.condition_valid (new_condition.toStdString ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
404 valid = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
405 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
406 catch (const index_exception& e) { }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
407 catch (const execution_exception& e) { }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
408 catch (const interrupt_exception&)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
409 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
410 ok = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
411 valid = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
412 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
413
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
414 // In case we repeat, set new prompt.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
415 prompt = "ERROR: " + last_error_message () + "\n\ndbstop if";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
416 cond = new_condition;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
417 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
418 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
419 valid = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
420 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
421
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
422 if (ok) // If the user didn't cancel, actually set the breakpoint.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
423 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
424 info.condition = cond.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
425
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
426 octave_link::post_event
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
427 (this, &file_editor_tab::add_breakpoint_callback, info);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
428 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
429 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
430
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
431 void file_editor_tab::set_file_name (const QString& fileName)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
432 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
433 // update tracked file if we really have a file on disk
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
434 QStringList trackedFiles = _file_system_watcher.files ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
435 if (! trackedFiles.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
436 _file_system_watcher.removePath (_file_name);
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
437 if (! fileName.isEmpty () && QFile::exists (fileName))
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
438 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
439 _file_system_watcher.addPath (fileName);
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
440 m_last_modified = QFileInfo (fileName).lastModified ().toUTC ();
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
441 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
442
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
443 // update lexer and file name variable if file name changes
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
444 if (_file_name != fileName)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
445 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
446 _file_name = fileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
447 update_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
448 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
449
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
450 // update the file editor with current editing directory
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
451 emit editor_state_changed (_copy_available, _is_octave_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
452
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
453 // add the new file to the most-recently-used list
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
454 emit mru_add_file (_file_name, _encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
455 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
456
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
457 // valid_file_name (file): checks whether "file" names a file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
458 // By default, "file" is empty; then _file_name is checked
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
459 bool file_editor_tab::valid_file_name (const QString& file)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
460 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
461 if (file.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
462 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
463 if (_file_name.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
464 return false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
465 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
466 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
467 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
468
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
469 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
470 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
471
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
472 // We cannot create a breakpoint when the file is modified
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
473 // because the line number the editor is providing might
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
474 // not match what Octave core is interpreting in the
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
475 // file on disk. This function gives the user the option
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
476 // to save before creating the breakpoint.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
477 bool file_editor_tab::unchanged_or_saved (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
478 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
479 bool retval = true;
25566
eee01a6e197f allow setting a breakpoint in an unnamed editor file (bug #54231)
Torsten <mttl@mailbox.org>
parents: 25558
diff changeset
480 if (_edit_area->isModified () || ! valid_file_name ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
481 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
482 int ans = QMessageBox::question (nullptr, tr ("Octave Editor"),
25566
eee01a6e197f allow setting a breakpoint in an unnamed editor file (bug #54231)
Torsten <mttl@mailbox.org>
parents: 25558
diff changeset
483 tr ("Cannot add breakpoint to modified or unnamed file.\n"
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
484 "Save and add breakpoint, or cancel?"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
485 QMessageBox::Save | QMessageBox::Cancel, QMessageBox::Save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
486
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
487 if (ans == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
488 save_file (_file_name, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
489 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
490 retval = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
491 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
492
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
493 return retval;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
494 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
495
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
496 // Toggle a breakpoint at the editor_linenr or, if this was called by
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
497 // a click with CTRL pressed, toggle a bookmark at that point.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
498 void file_editor_tab::handle_margin_clicked (int margin, int editor_linenr,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
499 Qt::KeyboardModifiers state)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
500 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
501 if (margin == 1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
502 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
503 unsigned int markers_mask = _edit_area->markersAtLine (editor_linenr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
504
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
505 if (state & Qt::ControlModifier)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
506 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
507 if (markers_mask & (1 << marker::bookmark))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
508 _edit_area->markerDelete (editor_linenr, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
509 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
510 _edit_area->markerAdd (editor_linenr, marker::bookmark);
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
511 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
512 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
513 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
514 if (markers_mask & ((1 << marker::breakpoint)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
515 | (1 << marker::cond_break)))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
516 handle_request_remove_breakpoint (editor_linenr + 1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
517 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
518 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
519 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
520 handle_request_add_breakpoint (editor_linenr + 1, "");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
521 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
522 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
523 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
524 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
525
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
526
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
527 void file_editor_tab::update_lexer (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
528 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
529 // Create a new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
530 QsciLexer *lexer = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
531
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
532 _is_octave_file = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
533
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
534 // Find the required lexer from file extensions
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
535 if (_file_name.endsWith (".m")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
536 || _file_name.endsWith ("octaverc"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
537 {
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
538 #if defined (HAVE_LEXER_OCTAVE)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
539 lexer = new QsciLexerOctave ();
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
540 #elif defined (HAVE_LEXER_MATLAB)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
541 lexer = new QsciLexerMatlab ();
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
542 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
543 lexer = new octave_txt_lexer ();
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
544 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
545 _is_octave_file = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
546 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
547
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
548 if (! lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
549 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
550 if (_file_name.endsWith (".c")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
551 || _file_name.endsWith (".cc")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
552 || _file_name.endsWith (".cpp")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
553 || _file_name.endsWith (".cxx")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
554 || _file_name.endsWith (".c++")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
555 || _file_name.endsWith (".h")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
556 || _file_name.endsWith (".hh")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
557 || _file_name.endsWith (".hpp")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
558 || _file_name.endsWith (".h++"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
559 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
560 lexer = new QsciLexerCPP ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
561 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
562 else if (_file_name.endsWith (".pl"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
563 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
564 lexer = new QsciLexerPerl ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
565 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
566 else if (_file_name.endsWith (".bat"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
567 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
568 lexer = new QsciLexerBatch ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
569 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
570 else if (_file_name.endsWith (".diff"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
571 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
572 lexer = new QsciLexerDiff ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
573 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
574 else if (_file_name.endsWith (".sh"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
575 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
576 lexer = new QsciLexerBash ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
577 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
578 else if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
579 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
580 // new, no yet named file: let us assume it is octave
16716
23b5dde25367 make octave lexer the default and dynamically set margin width for line numbers
Torsten <ttl@justmail.de>
parents: 16715
diff changeset
581 #if defined (HAVE_LEXER_OCTAVE)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
582 lexer = new QsciLexerOctave ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
583 _is_octave_file = true;
16716
23b5dde25367 make octave lexer the default and dynamically set margin width for line numbers
Torsten <ttl@justmail.de>
parents: 16715
diff changeset
584 #elif defined (HAVE_LEXER_MATLAB)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
585 lexer = new QsciLexerMatlab ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
586 _is_octave_file = true;
16716
23b5dde25367 make octave lexer the default and dynamically set margin width for line numbers
Torsten <ttl@justmail.de>
parents: 16715
diff changeset
587 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
588 lexer = new octave_txt_lexer ();
16716
23b5dde25367 make octave lexer the default and dynamically set margin width for line numbers
Torsten <ttl@justmail.de>
parents: 16715
diff changeset
589 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
590 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
591 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
592 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
593 // other or no extension
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
594 lexer = new octave_txt_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
595 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
596 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
597
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
598 // Get any existing lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
599 QsciLexer *old_lexer = _edit_area->lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
600
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
601 // If new file, no lexer, or lexer has changed,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
602 // delete old one and set the newly created as current lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
603 if (! old_lexer || ! valid_file_name ()
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
604 || QString(old_lexer->lexer ()) != QString(lexer->lexer ()))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
605 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
606 // Delete and set new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
607 if (old_lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
608 delete old_lexer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
609 _edit_area->setLexer (lexer);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
610
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
611 // build information for auto completion (APIs)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
612 _lexer_apis = new QsciAPIs (lexer);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
613
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
614 // Get the settings for this new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
615 update_lexer_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
616 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
617 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
618 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
619 // Otherwise, delete the newly created lexer and
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
620 // use the old, exisiting one
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
621 if (lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
622 delete lexer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
623 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
624 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
625
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
626
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
627 // Update settings, which are lexer related and have to be updated
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
628 // when a) the lexer changes or b) the settings have changed.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
629 void file_editor_tab::update_lexer_settings (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
630 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
631 QsciLexer *lexer = _edit_area->lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
632
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
633 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
634
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
635 if (_lexer_apis)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
636 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
637 _lexer_apis->cancelPreparation (); // stop preparing if apis exists
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
638
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
639 bool update_apis = false; // flag, whether update of apis files
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
640
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
641 // get path to prepared api info
24827
1e0718c1867c eliminate most Qt version checks
John W. Eaton <jwe@octave.org>
parents: 24738
diff changeset
642 #if defined (HAVE_QSTANDARDPATHS)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
643 QString prep_apis_path
24827
1e0718c1867c eliminate most Qt version checks
John W. Eaton <jwe@octave.org>
parents: 24738
diff changeset
644 = QStandardPaths::writableLocation (QStandardPaths::HomeLocation)
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
645 + "/.config/octave/" + QString (OCTAVE_VERSION) + "/qsci/";
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
646 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
647 QString prep_apis_path
24827
1e0718c1867c eliminate most Qt version checks
John W. Eaton <jwe@octave.org>
parents: 24738
diff changeset
648 = QDesktopServices::storageLocation (QDesktopServices::HomeLocation)
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
649 + "/.config/octave/" + QString (OCTAVE_VERSION) + "/qsci/";
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
650 #endif
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
651
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
652 // get settings which infos are used for octave
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
653 bool octave_builtins = settings->value (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
654 "editor/codeCompletion_octave_builtins", true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
655 bool octave_functions = settings->value (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
656 "editor/codeCompletion_octave_functions", true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
657
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
658 if (_is_octave_file)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
659 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
660 // Keywords and Builtins do not change, these informations can be
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
661 // stored in prepared form in a file. Information on function are
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
662 // changing frequently, then if functions should also be auto-
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
663 // completed, the date of any existing file is checked.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
664
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
665 // Keywords are always used
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
666 _prep_apis_file = prep_apis_path + lexer->lexer () + "_k";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
667
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
668 // Buitlins are only used if the user settings say so
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
669 if (octave_builtins)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
670 _prep_apis_file += 'b';
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
671
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
672 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
673 _prep_apis_file += 'f';
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
674
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
675 _prep_apis_file += ".pap"; // final name of apis file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
676
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
677 // check whether the APIs info needs to be prepared and saved
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
678 QFileInfo apis_file = QFileInfo (_prep_apis_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
679 // flag whether apis file needs update
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
680 update_apis = ! apis_file.exists ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
681
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
682 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
683 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
684 // Functions may change frequently. Update the apis data
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
685 // if the file is older than a few minutes preventing from
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
686 // re-preparing data when the user opens several files.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
687 QDateTime apis_time = apis_file.lastModified ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
688 if (QDateTime::currentDateTime () > apis_time.addSecs (180))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
689 update_apis = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
690 }
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
691
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
692 }
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
693 else // no octave file, just add extension
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
694 {
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
695
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
696 _prep_apis_file = prep_apis_path + lexer->lexer () + ".pap";
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
697
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
698 }
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
699
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
700 if (update_apis || ! _lexer_apis->loadPrepared (_prep_apis_file))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
701 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
702 // either we have decided to update the apis file or
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
703 // no prepared info was loaded, prepare and save if possible
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
704
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
705 // create raw apis info
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
706 QString keyword;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
707 QStringList keyword_list;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
708 int i,j;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
709
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
710 if (_is_octave_file)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
711 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
712 // octave: get keywords from internal informations depending on
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
713 // user preferences
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
714
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
715 // keywords are always used
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
716 add_octave_apis (Fiskeyword ()); // add new entries
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
717
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
718 interpreter& interp
25336
389757b7b6af eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
719 = __get_interpreter__ ("file_editor_tab::update_lexer_settings");
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
720
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
721 if (octave_builtins)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
722 add_octave_apis (F__builtins__ (interp)); // add new entries
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
723
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
724 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
725 add_octave_apis (F__list_functions__ (interp)); // add new entries
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
726
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
727 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
728 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
729 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
730
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
731 _prep_apis_file = prep_apis_path + lexer->lexer () + ".pap";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
732
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
733 for (i=1; i<=3; i++) // test the first 5 keyword sets
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
734 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
735 keyword = QString (lexer->keywords (i)); // get list
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
736 keyword_list = keyword.split (QRegExp (R"(\s+)")); // split
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
737 for (j = 0; j < keyword_list.size (); j++) // add to API
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
738 _lexer_apis->add (keyword_list.at (j));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
739 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
740 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
741
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
742 // disconnect slot for saving prepared info if already connected
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
743 disconnect (_lexer_apis, SIGNAL (apiPreparationFinished ()), nullptr, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
744 // check whether path for prepared info exists or can be created
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
745 if (QDir ("/").mkpath (prep_apis_path))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
746 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
747 // path exists, apis info can be saved there
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
748 connect (_lexer_apis, SIGNAL (apiPreparationFinished ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
749 this, SLOT (save_apis_info ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
750 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
751
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
752 _lexer_apis->prepare (); // prepare apis info
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
753
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
754 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
755 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
756
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
757 lexer->readSettings (*settings);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
758
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
759 _edit_area->setCaretForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
760 _edit_area->setIndentationGuidesForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
761
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
762 // set some colors depending on selected background color of the lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
763 QColor bg = lexer->paper (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
764 QColor fg = lexer->color (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
765
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
766 int bh, bs, bv, fh, fs, fv, h, s, v;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
767 bg.getHsv (&bh,&bs,&bv);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
768 fg.getHsv (&fh,&fs,&fv);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
769
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
770 // margin colors
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
771 h = bh;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
772 s = bs/2;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
773 v = bv + (fv - bv)/5;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
774
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
775 bg.setHsv (h,s,v);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
776 _edit_area->setEdgeColor (bg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
777
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
778 v = bv + (fv - bv)/8;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
779 bg.setHsv (h,s,v);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
780 v = bv + (fv - bv)/4;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
781 fg.setHsv (h,s,v);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
782
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
783 _edit_area->setMarkerForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
784 _edit_area->setMarginsForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
785 _edit_area->setMarginsBackgroundColor (bg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
786 _edit_area->setFoldMarginColors (bg,fg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
787
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
788 // color indicator for highlighting all occurrences:
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
789 // applications highlight color with more transparency
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
790 QColor hg = QApplication::palette ().color (QPalette::Highlight);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
791 _edit_area->set_selection_marker_color (hg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
792
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
793 // fix line number width with respect to the font size of the lexer and
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
794 // set the line numbers font depending on the lexers font
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
795 if (settings->value ("editor/showLineNumbers", true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
796 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
797 // Line numbers width
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
798 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
799
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
800 // Line numbers font
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
801 QFont line_numbers_font = lexer->defaultFont ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
802 int font_size = line_numbers_font.pointSize ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
803 font_size = font_size
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
804 + settings->value ("editor/line_numbers_size", 0).toInt ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
805 if (font_size < 4)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
806 font_size = 4;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
807 line_numbers_font.setPointSize (font_size);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
808
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
809 _edit_area->setMarginsFont (line_numbers_font);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
810 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
811 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
812 _edit_area->setMarginWidth (2,0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
813 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
814
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
815
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
816 // function for adding entries to the octave lexer's APIs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
817 void file_editor_tab::add_octave_apis (octave_value_list key_ovl)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
818 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
819 octave_value keys = key_ovl(0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
820 Cell key_list = keys.cell_value ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
821
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
822 for (int idx = 0; idx < key_list.numel (); idx++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
823 _lexer_apis->add (QString (key_list.elem (idx).string_value ().data ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
824 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
825
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
826 void file_editor_tab::save_apis_info (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
827 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
828 _lexer_apis->savePrepared (_prep_apis_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
829 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
830
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
831 // slot for fetab_set_focus: sets the focus to the current edit area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
832 void file_editor_tab::set_focus (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
833 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
834 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
835 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
836 _edit_area->setFocus ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
837 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
838
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
839 void file_editor_tab::context_help (const QWidget *ID, bool doc)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
840 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
841 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
842 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
843
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
844 _edit_area->context_help_doc (doc);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
845 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
846
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
847 void file_editor_tab::context_edit (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
848 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
849 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
850 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
851
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
852 _edit_area->context_edit ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
853 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
854
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
855 void file_editor_tab::check_modified_file (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
856 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
857 if (_cancelled)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
858 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
859
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
860 if (check_file_modified () == QMessageBox::Cancel)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
861 _cancelled = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
862 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
863
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
864 void file_editor_tab::save_file (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
865 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
866 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
867 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
868
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
869 save_file (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
870 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
871
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
872 void file_editor_tab::save_file (const QWidget *ID, const QString& fileName,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
873 bool remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
874 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
875 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
876 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
877
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
878 save_file (fileName, remove_on_success);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
879 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
880
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
881 void file_editor_tab::save_file_as (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
882 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
883 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
884 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
885
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
886 save_file_as ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
887 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
888
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
889 void file_editor_tab::print_file (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
890 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
891 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
892 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
893
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
894 QsciPrinter *printer = new QsciPrinter (QPrinter::HighResolution);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
895
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
896 QPrintDialog printDlg (printer, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
897
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
898 if (printDlg.exec () == QDialog::Accepted)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
899 printer->printRange (_edit_area);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
900
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
901 delete printer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
902 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
903
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
904 void file_editor_tab::run_file (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
905 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
906 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
907 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
908
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
909 if (_edit_area->isModified () | ! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
910 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
911 save_file (_file_name); // save file dialog
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
912 if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
913 return; // still invalid filename: "save as" was cancelled
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
914 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
915
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
916 QFileInfo info (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
917 emit run_file_signal (info);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
918 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
919
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
920 void file_editor_tab::context_run (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
921 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
922 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
923 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
924
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
925 _edit_area->context_run ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
926 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
927
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
928 void file_editor_tab::toggle_bookmark (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
929 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
930 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
931 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
932
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
933 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
934 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
935
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
936 if (_edit_area->markersAtLine (line) & (1 << marker::bookmark))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
937 _edit_area->markerDelete (line, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
938 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
939 _edit_area->markerAdd (line, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
940 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
941
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
942 // Move the text cursor to the closest bookmark
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
943 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
944 void file_editor_tab::next_bookmark (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
945 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
946 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
947 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
948
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
949 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
950 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
951
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
952 line++; // Find bookmark strictly after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
953
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
954 int nextline = _edit_area->markerFindNext (line, (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
955
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
956 // Wrap.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
957 if (nextline == -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
958 nextline = _edit_area->markerFindNext (1, (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
959
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
960 _edit_area->setCursorPosition (nextline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
961 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
962
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
963 // Move the text cursor to the closest bookmark
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
964 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
965 void file_editor_tab::previous_bookmark (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
966 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
967 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
968 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
969
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
970 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
971 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
972
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
973 line--; // Find bookmark strictly before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
974
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
975 int prevline = _edit_area->markerFindPrevious (line, (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
976
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
977 // Wrap. Should use the last line of the file, not 1<<15
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
978 if (prevline == -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
979 prevline = _edit_area->markerFindPrevious (_edit_area->lines (),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
980 (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
981
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
982 _edit_area->setCursorPosition (prevline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
983 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
984
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
985 void file_editor_tab::remove_bookmark (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
986 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
987 if (ID != this)
24123
16c8ec7f0867 do not move the cursor when saving a file with breakpoints (bug #51793)
Torsten <mttl@mailbox.org>
parents: 24109
diff changeset
988 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
989
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
990 _edit_area->markerDeleteAll (marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
991 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
992
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
993 void file_editor_tab::add_breakpoint_callback (const bp_info& info)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
994 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
995 bp_table::intmap line_info;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
996 line_info[0] = info.line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
997
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
998 if (octave_qt_link::file_in_path (info.file, info.dir))
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
999 {
25336
389757b7b6af eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
1000 bp_table& bptab = __get_bp_table__ ("octave_qt_link::file_in_path");
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1001
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1002 bptab.add_breakpoint (info.function_name, line_info, info.condition);
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1003 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1004 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1005
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1006 void file_editor_tab::remove_breakpoint_callback (const bp_info& info)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1007 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1008 bp_table::intmap line_info;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1009 line_info[0] = info.line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1010
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1011 if (octave_qt_link::file_in_path (info.file, info.dir))
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1012 {
25336
389757b7b6af eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
1013 bp_table& bptab = __get_bp_table__ ("remove_breakpoint_callback");
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1014
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1015 bptab.remove_breakpoint (info.function_name, line_info);
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1016 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1017 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1018
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1019 void file_editor_tab::remove_all_breakpoints_callback (const bp_info& info)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1020 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1021 if (octave_qt_link::file_in_path (info.file, info.dir))
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1022 {
25336
389757b7b6af eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
1023 bp_table& bptab = __get_bp_table__ ("remove_all_breakpoints_callback");
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1024
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1025 bptab.remove_all_breakpoints_in_file (info.function_name, true);
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
1026 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1027 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1028
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1029 file_editor_tab::bp_info::bp_info (const QString& fname, int l,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1030 const QString& cond)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1031 : line (l), file (fname.toStdString ()), condition (cond.toStdString ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1032 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1033 QFileInfo file_info (fname);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1034
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1035 QString q_dir = file_info.absolutePath ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1036 QString q_function_name = file_info.fileName ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1037
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1038 // We have to cut off the suffix, because octave appends it.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1039 q_function_name.chop (file_info.suffix ().length () + 1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1040
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1041 dir = q_dir.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1042 function_name = q_function_name.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1043
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1044 // Is the last component of DIR @foo? If so, strip it and prepend it
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1045 // to the name of the function.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1046
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1047 size_t pos = dir.rfind (sys::file_ops::dir_sep_chars ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1048
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1049 if (pos != std::string::npos && pos < dir.length () - 1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1050 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1051 if (dir[pos+1] == '@')
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1052 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1053 function_name = sys::file_ops::concat (dir.substr (pos+1), function_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1054
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1055 dir = dir.substr (0, pos);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1056 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1057 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1058 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1059
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1060 void file_editor_tab::handle_request_add_breakpoint (int line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1061 const QString& condition)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1062 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1063 bp_info info (_file_name, line, condition);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1064
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1065 octave_link::post_event
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1066 (this, &file_editor_tab::add_breakpoint_callback, info);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1067 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1068
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1069 void file_editor_tab::handle_request_remove_breakpoint (int line)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1070 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1071 bp_info info (_file_name, line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1072
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1073 octave_link::post_event
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1074 (this, &file_editor_tab::remove_breakpoint_callback, info);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1075 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1076
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1077 void file_editor_tab::toggle_breakpoint (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1078 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1079 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1080 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1081
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1082 int editor_linenr, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1083 _edit_area->getCursorPosition (&editor_linenr, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1084
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1085 if (_edit_area->markersAtLine (editor_linenr) & (1 << marker::breakpoint))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1086 request_remove_breakpoint_via_editor_linenr (editor_linenr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1087 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1088 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1089 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1090 handle_request_add_breakpoint (editor_linenr + 1, "");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1091 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1092 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1093
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1094 // Move the text cursor to the closest breakpoint (conditional or unconditional)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1095 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1096 void file_editor_tab::next_breakpoint (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1097 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1098 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1099 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1100
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1101 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1102 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1103
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1104 line++; // Find breakpoint strictly after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1105
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1106 int nextline = _edit_area->markerFindNext (line, (1 << marker::breakpoint));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1107 int nextcond = _edit_area->markerFindNext (line, (1 << marker::cond_break));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1108
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1109 // Check if the next conditional breakpoint is before next unconditional one.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1110 if (nextcond != -1 && (nextcond < nextline || nextline == -1))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1111 nextline = nextcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1112
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1113 _edit_area->setCursorPosition (nextline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1114 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1115
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1116 // Move the text cursor to the closest breakpoint (conditional or unconditional)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1117 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1118 void file_editor_tab::previous_breakpoint (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1119 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1120 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1121 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1122
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1123 int line, cur, prevline, prevcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1124 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1125
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1126 line--; // Find breakpoint strictly before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1127
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1128 prevline = _edit_area->markerFindPrevious (line, (1 << marker::breakpoint));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1129 prevcond = _edit_area->markerFindPrevious (line, (1 << marker::cond_break));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1130
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1131 // Check if the prev conditional breakpoint is closer than the unconditional.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1132 if (prevcond != -1 && prevcond > prevline)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1133 prevline = prevcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1134
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1135 _edit_area->setCursorPosition (prevline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1136 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1137
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1138 void file_editor_tab::remove_all_breakpoints (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1139 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1140 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1141 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1142
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1143 bp_info info (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1144
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1145 octave_link::post_event
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1146 (this, &file_editor_tab::remove_all_breakpoints_callback, info);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1147 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1148
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1149 void file_editor_tab::scintilla_command (const QWidget *ID, unsigned int sci_msg)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1150 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1151 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1152 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1153
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1154 _edit_area->SendScintilla (sci_msg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1155 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1156
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1157 void file_editor_tab::comment_selected_text (const QWidget *ID, bool input_str)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1158 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1159 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1160 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1161
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1162 do_comment_selected_text (true, input_str);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1163 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1164
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1165 void file_editor_tab::uncomment_selected_text (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1166 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1167 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1168 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1169
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1170 do_comment_selected_text (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1171 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1172
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1173 void file_editor_tab::indent_selected_text (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1174 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1175 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1176 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1177
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1178 do_indent_selected_text (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1179 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1180
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1181 void file_editor_tab::unindent_selected_text (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1182 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1183 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1184 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1185
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1186 do_indent_selected_text (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1187 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1188
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1189 void file_editor_tab::smart_indent_line_or_selected_text (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1190 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1191 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1192 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1193
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1194 do_smart_indent_line_or_selected_text ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1195 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1196
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1197 void file_editor_tab::convert_eol (const QWidget *ID,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1198 QsciScintilla::EolMode eol_mode)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1199 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1200 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1201 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1202
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1203 _edit_area->convertEols (eol_mode);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1204 _edit_area->setEolMode (eol_mode);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1205 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1206 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1207
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1208 void file_editor_tab::zoom_in (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1209 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1210 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1211 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1212
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1213 _edit_area->zoomIn (1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1214 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1215 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1216
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1217 void file_editor_tab::zoom_out (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1218 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1219 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1220 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1221
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1222 _edit_area->zoomOut (1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1223 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1224 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1225
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1226 void file_editor_tab::zoom_normal (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1227 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1228 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1229 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1230
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1231 _edit_area->zoomTo (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1232 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1233 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1234
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1235 void file_editor_tab::handle_find_dialog_finished (int)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1236 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1237 // Find dialog is going to hide. Save location of window for
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1238 // when it is reshown.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1239 _find_dialog_geometry = _find_dialog->geometry ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1240 _find_dialog_is_visible = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1241 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1242
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1243 void file_editor_tab::find (const QWidget *ID, QList<QAction *> fetab_actions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1244 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1245 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1246 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1247
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1248 // The find_dialog feature doesn't need a slot for return info.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1249 // Rather than Qt::DeleteOnClose, let the find feature hang about
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1250 // in case it contains useful information like previous searches
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1251 // and so on. Perhaps one find dialog for the whole editor is
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1252 // better, but individual find dialogs has the nice feature of
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1253 // retaining position per file editor tabs, which can be undocked.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1254
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1255 if (! _find_dialog)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1256 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1257 _find_dialog = new find_dialog (_edit_area,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1258 fetab_actions.mid (0,2),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1259 qobject_cast<QWidget *> (sender ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1260 connect (_find_dialog, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1261 this, SLOT (handle_find_dialog_finished (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1262
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1263 connect (this, SIGNAL (request_find_next ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1264 _find_dialog, SLOT (find_next ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1265
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1266 connect (this, SIGNAL (request_find_previous ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1267 _find_dialog, SLOT (find_prev ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1268
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1269 _find_dialog->setWindowModality (Qt::NonModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1270 _find_dialog_geometry = _find_dialog->geometry ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1271 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1272 else if (! _find_dialog->isVisible ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1273 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1274 _find_dialog->setGeometry (_find_dialog_geometry);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1275 QPoint p = _find_dialog->pos ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1276 _find_dialog->move (p.x ()+10, p.y ()+10);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1277 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1278
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1279 _find_dialog->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1280 _find_dialog_is_visible = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1281 _find_dialog->activateWindow ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1282 _find_dialog->init_search_text ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1283
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1284 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1285
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1286 void file_editor_tab::find_next (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1287 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1288 if (ID == this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1289 emit request_find_next ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1290 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1291
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1292 void file_editor_tab::find_previous (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1293 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1294 if (ID == this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1295 emit request_find_previous ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1296 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1297
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1298 void file_editor_tab::goto_line (const QWidget *ID, int line)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1299 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1300 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1301 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1302
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1303 if (m_bp_restore_count > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1304 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1305 // This goto-line request is invoked by restoring a breakpoint during
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1306 // saving the file, thus, do not go to the related line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1307 m_bp_restore_count--;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1308 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1309 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1310
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1311 if (line <= 0) // ask for desired line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1312 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1313 bool ok = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1314 int index;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1315 _edit_area->getCursorPosition (&line, &index);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1316 line = QInputDialog::getInt (_edit_area, tr ("Goto line"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1317 tr ("Line number"), line+1, 1,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1318 _edit_area->lines (), 1, &ok);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1319 if (ok)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1320 _edit_area->setCursorPosition (line-1, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1321 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1322 else // go to given line without dialog
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1323 _edit_area->setCursorPosition (line-1, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1324
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1325 center_current_line (false); // only center line if at top or bottom
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1326 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1327
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1328 void file_editor_tab::move_match_brace (const QWidget *ID, bool select)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1329 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1330 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1331 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1332
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1333 if (select)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1334 _edit_area->selectToMatchingBrace ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1335 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1336 _edit_area->moveToMatchingBrace ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1337 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1338
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1339 void file_editor_tab::show_auto_completion (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1340 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1341 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1342 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1343
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1344 QsciScintilla::AutoCompletionSource s = _edit_area->autoCompletionSource ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1345 switch (s)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1346 {
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1347 case QsciScintilla::AcsAll:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1348 _edit_area->autoCompleteFromAll ();
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1349 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1350
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1351 case QsciScintilla::AcsAPIs:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1352 _edit_area->autoCompleteFromAPIs ();
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1353 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1354
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1355 case QsciScintilla::AcsDocument:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1356 _edit_area->autoCompleteFromDocument ();
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1357 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1358
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1359 case QsciScintilla::AcsNone:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1360 break;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1361 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1362 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1363
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1364 void file_editor_tab::do_indent_selected_text (bool indent)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1365 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1366 // FIXME:
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1367 _edit_area->beginUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1368
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1369 if (_edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1370 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1371 int lineFrom, lineTo, colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1372 _edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1373
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1374 if (colTo == 0) // the beginning of last line is not selected
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1375 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1376
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1377 for (int i = lineFrom; i <= lineTo; i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1378 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1379 if (indent)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1380 _edit_area->indent (i);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1381 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1382 _edit_area->unindent (i);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1383 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1384 //set selection on (un)indented section
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1385 _edit_area->setSelection (lineFrom, 0, lineTo,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1386 _edit_area->text (lineTo).length ()-1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1387 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1388 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1389 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1390 int cpline, col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1391 _edit_area->getCursorPosition (&cpline, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1392 if (indent)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1393 _edit_area->indent (cpline);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1394 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1395 _edit_area->unindent (cpline);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1396 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1397
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1398 _edit_area->endUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1399 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1400
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1401 void file_editor_tab::do_smart_indent_line_or_selected_text (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1402 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1403 _edit_area->beginUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1404
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1405 int lineFrom, lineTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1406
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1407 if (_edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1408 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1409 int colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1410 _edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1411
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1412 if (colTo == 0) // the beginning of last line is not selected
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1413 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1414 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1415 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1416 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1417 int col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1418 _edit_area->getCursorPosition (&lineFrom, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1419
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1420 lineTo = lineFrom;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1421 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1422
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1423 _edit_area->smart_indent_line_or_selected_text (lineFrom, lineTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1424
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1425 _edit_area->endUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1426 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1427
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1428 void file_editor_tab::do_comment_selected_text (bool comment, bool input_str)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1429 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1430 QRegExp rxc;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1431 QString ws = "^([ \\t]*)";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1432 QStringList comment_str = _edit_area->comment_string (comment);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1433 QString used_comment_str = comment_str.at (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1434
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1435 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1436 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1437 if (input_str)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1438 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1439 bool ok;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1440 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1441
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1442 used_comment_str = QInputDialog::getText (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1443 this, tr ("Comment selected text"),
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1444 tr ("Comment string to use:\n"), QLineEdit::Normal,
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
1445 settings->value (ed_last_comment_str, comment_str.at (0)).toString (),
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1446 &ok);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1447
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1448 if ((! ok) || used_comment_str.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1449 return; // No input, do nothing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1450 else
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
1451 settings->setValue (ed_last_comment_str, used_comment_str); // Store last
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1452 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1453 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1454 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1455 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1456 // Uncommenting (several strings possible)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1457
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1458 // Sort strings according their length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1459 QStringList comment_str_sorted (comment_str.at (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1460 bool inserted;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1461
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1462 for (int i = 1; i < comment_str.length (); i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1463 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1464 inserted = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1465 for (int j = 0; j < comment_str_sorted.length (); j++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1466 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1467 if (comment_str.at (i).length () > comment_str_sorted.at (j).length ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1468 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1469 comment_str_sorted.insert (j, comment_str.at (i));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1470 inserted = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1471 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1472 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1473 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1474 if (! inserted)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1475 comment_str_sorted << comment_str.at (i);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1476 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1477
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1478 // Create regular expression
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1479 QString regexp;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1480 for (int i = 0; i < comment_str_sorted.length (); i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1481 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1482 if (i > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1483 regexp = regexp + QString ("|");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1484 regexp = regexp + comment_str_sorted.at (i);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1485 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1486 rxc = QRegExp (ws + "(" + regexp + ")");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1487 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1488
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1489 // Do the commenting/uncommenting
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1490 int len = 0, lenc = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1491 _edit_area->beginUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1492
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1493 if (_edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1494 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1495 int lineFrom, lineTo, colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1496 int change_col_from = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1497 int change_col_to = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1498 bool removed;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1499
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1500 _edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1501
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1502 if (colTo == 0) // the beginning of last line is not selected
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1503 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1504
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1505 for (int i = lineFrom; i <= lineTo; i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1506 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1507 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1508 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1509 _edit_area->insertAt (used_comment_str, i, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1510 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1511 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1512 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1513 QString line (_edit_area->text (i));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1514 if ((removed = line.contains (rxc)))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1515 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1516 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1517 QString matched_text = rxc.capturedTexts ().at (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1518 lenc = matched_text.remove (QRegExp (ws)).length (); // only comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1519 _edit_area->setSelection (i, len-lenc, i, len);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1520 _edit_area->removeSelectedText ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1521 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1522
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1523 // handle case, where the selection remains unchanged
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1524 if (i == lineFrom && (colFrom < len-lenc || ! removed))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1525 change_col_from = 0; // do not change start of selection
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1526 if (i == lineTo && (colTo < len-lenc || ! removed))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1527 change_col_to = 0; // do not change end of selection
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1528 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1529 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1530
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1531 // update the selection area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1532 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1533 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1534 colFrom = colFrom + lenc; // shift start position by comment length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1535 if (colTo > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1536 colTo = colTo + lenc; // shift end position by comment length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1537 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1538 lineTo++; // colTo == 0 , fully select previous line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1539 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1540 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1541 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1542 if (colTo == 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1543 lineTo++; // colTo == 0 , fully select previous line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1544 colFrom = colFrom - change_col_from*lenc;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1545 colTo = colTo - change_col_to*lenc;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1546 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1547
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1548 // set updated selection area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1549 _edit_area->setSelection (lineFrom, colFrom, lineTo, colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1550 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1551 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1552 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1553 int cpline, col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1554 _edit_area->getCursorPosition (&cpline, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1555 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1556 _edit_area->insertAt (used_comment_str, cpline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1557 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1558 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1559 QString line (_edit_area->text (cpline));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1560 if (line.contains (rxc))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1561 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1562 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1563 QString matched_text = rxc.capturedTexts ().at (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1564 lenc = matched_text.remove (QRegExp (ws)).length (); // only comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1565 _edit_area->setSelection (cpline, len-lenc, cpline, len);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1566 _edit_area->removeSelectedText ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1567 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1568 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1569 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1570 _edit_area->endUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1571 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1572
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1573 void file_editor_tab::update_window_title (bool modified)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1574 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1575 QString title ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1576 QString tooltip ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1577
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1578 if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1579 title = tr ("<unnamed>");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1580 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1581 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1582 if (_long_title)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1583 title = _file_name;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1584 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1585 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1586 QFileInfo file (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1587 title = file.fileName ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1588 tooltip = _file_name;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1589 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1590 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1591
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1592 if (modified)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1593 emit file_name_changed (title.prepend ("* "), tooltip);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1594 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1595 emit file_name_changed (title, tooltip);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1596 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1597
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1598 void file_editor_tab::handle_copy_available (bool enableCopy)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1599 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1600 _copy_available = enableCopy;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1601 emit editor_state_changed (_copy_available, _is_octave_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1602 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1603
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1604 // show_dialog: shows a modal or non modal dialog depending on input arg
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1605 void file_editor_tab::show_dialog (QDialog *dlg, bool modal)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1606 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1607 dlg->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1608 if (modal)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1609 dlg->exec ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1610 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1611 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1612 dlg->setWindowModality (Qt::NonModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1613 dlg->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1614 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1615 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1616
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1617 int file_editor_tab::check_file_modified (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1618 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1619 int decision = QMessageBox::Yes;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1620 if (_edit_area->isModified ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1621 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1622 // File is modified but not saved, ask user what to do. The file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1623 // editor tab can't be made parent because it may be deleted depending
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1624 // upon the response. Instead, change the _edit_area to read only.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1625 QMessageBox::StandardButtons buttons = QMessageBox::Save |
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1626 QMessageBox::Discard |
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1627 QMessageBox::Cancel;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1628
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1629 // For now, just a warning message about closing a tab that has been
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1630 // modified seems sufficient. Exit-condition-specific messages could
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1631 // be achieved by making 'available_actions' a function input string.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1632 QString available_actions =
19714
21015ca26566 Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19697
diff changeset
1633 tr ("Do you want to cancel closing, save or discard the changes?");
16638
3c2e457eeb72 ask for saving modified editor files if octave is closed (bug #38689)
Torsten <ttl@justmail.de>
parents: 16635
diff changeset
1634
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1635 QString file;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1636 if (valid_file_name ())
17973
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1637 file = _file_name;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1638 else
17973
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1639 file = tr ("<unnamed>");
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1640
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1641 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1642 = new QMessageBox (QMessageBox::Warning, tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1643 tr ("The file\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1644 " %1\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1645 "is about to be closed but has been modified. "
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1646 "%2").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1647 arg (file). arg (available_actions),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1648 buttons, qobject_cast<QWidget *> (parent ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1649
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1650 msgBox->setDefaultButton (QMessageBox::Save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1651 _edit_area->setReadOnly (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1652 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1653 this, SLOT (handle_file_modified_answer (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1654
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1655 show_dialog (msgBox, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1656
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1657 if (_cancelled)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1658 return QMessageBox::Cancel;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1659 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1660 return decision;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1661 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1662 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1663 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1664 // Nothing was modified. Leave tab present in case user
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1665 // decides to cancel some point further along.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1666 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1667
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1668 return decision;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1669 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1670
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1671 void file_editor_tab::handle_file_modified_answer (int decision)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1672 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1673 if (decision == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1674 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1675 // Save file, but do not remove from editor.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1676 save_file (_file_name, false, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1677 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1678 else if (decision == QMessageBox::Discard)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1679 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1680 // User doesn't want to save, leave tab and remove subsequently.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1681 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1682 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1683 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1684 // User canceled, allow editing again.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1685 _edit_area->setReadOnly (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1686 _cancelled = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1687 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1688 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1689
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1690 void file_editor_tab::set_modified (bool modified)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1691 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1692 _edit_area->setModified (modified);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1693 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1694
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1695 void file_editor_tab::recover_from_exit (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1696 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1697 // reset the possibly still existing read only state
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1698 _edit_area->setReadOnly (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1699
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1700 // if we are in this slot and the list of breakpoint is not empty,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1701 // then this tab was saved during an exit of the applications (not
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1702 // restoring the breakpoints and not emptying the list) and the user
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1703 // canceled this closing late on.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1704 check_restore_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1705 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1706
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1707 void file_editor_tab::check_restore_breakpoints (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1708 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1709 if (! _bp_lines.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1710 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1711 // At least one breakpoint is present.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1712 // Get rid of breakpoints at old (now possibly invalid) linenumbers
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1713 remove_all_breakpoints (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1714
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1715 // and set breakpoints at the new linenumbers
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1716 m_bp_restore_count = _bp_lines.length ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1717 for (int i = 0; i < _bp_lines.length (); i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1718 handle_request_add_breakpoint (_bp_lines.value (i) + 1,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1719 _bp_conditions.value (i));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1720
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1721 // Keep the list of breakpoints empty, except after explicit requests.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1722 _bp_lines.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1723 _bp_conditions.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1724 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1725 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1726
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1727 QString file_editor_tab::load_file (const QString& fileName)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1728 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1729 // get the absolute path
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1730 QFileInfo file_info = QFileInfo (fileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1731 QString file_to_load;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1732 if (file_info.exists ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1733 file_to_load = file_info.canonicalFilePath ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1734 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1735 file_to_load = fileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1736 QFile file (file_to_load);
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1737 if (!file.open(QIODevice::ReadOnly))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1738 return file.errorString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1739
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1740 QApplication::setOverrideCursor (Qt::WaitCursor);
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1741
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1742 // read the file binary, decoding later
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1743 const QByteArray text_data = file.readAll ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1744
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1745 // decode
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1746 QTextCodec::ConverterState st;
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1747 QTextCodec *codec = QTextCodec::codecForName (_encoding.toLatin1 ());
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1748 const QString text = codec->toUnicode(text_data.constData(),
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1749 text_data.size(), &st);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1750
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1751 // Decoding with invalid characters?
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1752 if (st.invalidChars > 0)
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1753 {
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1754 // Message box for user decision
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1755 QString msg = tr ("There were problems reading the file\n"
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1756 "%1\n"
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1757 "with the selected encoding %2.\n\n"
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1758 "Modifying and saving the file might "
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1759 "cause data loss!")
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1760 .arg (file_to_load).arg (_encoding);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1761 QMessageBox *msg_box = new QMessageBox ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1762 msg_box->setIcon (QMessageBox::Warning);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1763 msg_box->setText (msg);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1764 msg_box->setWindowTitle (tr ("Octave Editor"));
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1765 msg_box->addButton (tr ("&Edit anyway"), QMessageBox::YesRole);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1766 //msg_box->addButton (tr ("&Change encoding"), QMessageBox::AcceptRole);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1767 msg_box->addButton (tr ("&Close"), QMessageBox::RejectRole);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1768
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1769 connect (msg_box, SIGNAL (buttonClicked (QAbstractButton *)),
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1770 this, SLOT (handle_decode_warning_answer (QAbstractButton *)));
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1771
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1772 msg_box->setWindowModality (Qt::WindowModal);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1773 msg_box->setAttribute (Qt::WA_DeleteOnClose);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1774 msg_box->show ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1775 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1776
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1777 _edit_area->setText (text);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1778 _edit_area->setEolMode (detect_eol_mode ());
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1779
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1780 QApplication::restoreOverrideCursor ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1781
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1782 _copy_available = false; // no selection yet available
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1783 set_file_name (file_to_load);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1784 update_window_title (false); // window title (no modification)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1785 _edit_area->setModified (false); // loaded file is not modified yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1786
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1787 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1788
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1789 // FIXME: (BREAKPOINTS) At this point it would be nice to put any set
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1790 // breakpoints on the margin. In order to do this, somehow the
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1791 // "dbstatus" command needs to be accessed. All it would require is a
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1792 // routine that does "res = feval ("dbstatus") and signals that result
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1793 // to some slot.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1794 //
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1795 // See patch #8016 for a general way to get Octave results from
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1796 // commands processed in the background.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1797
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1798 /*
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1799 connect (octave_link, SIGNAL (fileSelected (QObject *, const QString&, const octave_value_list&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1800 this, SLOT (handle_feval_result (QObject *, const QString&, const octave_value_list&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1801 connect (this, SIGNAL (evaluate_octave_command (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1802 octave_link, SLOT (queue_octave_command (const QString&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1803
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1804 emit evaluate_octave_command ("dbstatus");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1805 */
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1806
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1807 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1808 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1809
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1810 void file_editor_tab::handle_decode_warning_answer (QAbstractButton *btn)
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1811 {
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1812 QString txt = btn->text ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1813
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1814 if (txt == tr ("&Close"))
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1815 close ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1816 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1817
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1818 QsciScintilla::EolMode file_editor_tab::detect_eol_mode (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1819 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1820 QByteArray text = _edit_area->text ().toLatin1 ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1821
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1822 QByteArray eol_lf = QByteArray (1,0x0a);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1823 QByteArray eol_cr = QByteArray (1,0x0d);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1824 QByteArray eol_crlf = eol_cr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1825 eol_crlf.append (eol_lf);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1826
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1827 int count_crlf = text.count (eol_crlf);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1828 int count_lf = text.count (eol_lf) - count_crlf; // isolated lf
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1829 int count_cr = text.count (eol_cr) - count_crlf; // isolated cr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1830
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1831 // get default from OS or from settings
19248
54943eb0ce37 reorder eol modes in the editor settings
Torsten <ttl@justmail.de>
parents: 19247
diff changeset
1832 #if defined (Q_OS_WIN32)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1833 int os_eol_mode = QsciScintilla::EolWindows;
19248
54943eb0ce37 reorder eol modes in the editor settings
Torsten <ttl@justmail.de>
parents: 19247
diff changeset
1834 #elif defined (Q_OS_MAC)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1835 int os_eol_mode = QsciScintilla::EolMac;
19248
54943eb0ce37 reorder eol modes in the editor settings
Torsten <ttl@justmail.de>
parents: 19247
diff changeset
1836 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1837 int os_eol_mode = QsciScintilla::EolUnix;
19248
54943eb0ce37 reorder eol modes in the editor settings
Torsten <ttl@justmail.de>
parents: 19247
diff changeset
1838 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1839 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1840 QsciScintilla::EolMode eol_mode = static_cast<QsciScintilla::EolMode> (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1841 settings->value ("editor/default_eol_mode",os_eol_mode).toInt ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1842
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1843 int count_max = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1844
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1845 if (count_crlf > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1846 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1847 eol_mode = QsciScintilla::EolWindows;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1848 count_max = count_crlf;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1849 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1850 if (count_lf > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1851 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1852 eol_mode = QsciScintilla::EolUnix;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1853 count_max = count_lf;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1854 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1855 if (count_cr > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1856 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1857 eol_mode = QsciScintilla::EolMac;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1858 count_max = count_cr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1859 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1860
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1861 return eol_mode;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1862 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1863
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1864 void file_editor_tab::update_eol_indicator (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1865 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1866 switch (_edit_area->eolMode ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1867 {
19237
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1868 case QsciScintilla::EolWindows:
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1869 _eol_indicator->setText ("CRLF");
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1870 break;
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1871 case QsciScintilla::EolMac:
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1872 _eol_indicator->setText ("CR");
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1873 break;
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1874 case QsciScintilla::EolUnix:
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1875 _eol_indicator->setText ("LF");
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
1876 break;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1877 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1878 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1879
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1880 // FIXME: See patch #8016 for a general way to get Octave results from
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1881 // commands processed in the background, e.g., dbstatus.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1882 void file_editor_tab::handle_octave_result (QObject *requester,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1883 QString& command,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1884 octave_value_list&)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1885 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1886 // Check if this object initiated the command.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1887 if (requester == this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1888 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1889 if (command == "dbstatus")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1890 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1891 // Should be installing breakpoints in this file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1892 /*
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1893 octave:1> result = dbstatus
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1894 result =
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1895
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1896 0x1 struct array containing the fields:
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1897
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1898 name
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1899 file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1900 line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1901 */
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1902 // Check for results that match "file".
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1903 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1904 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1905 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1906
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1907 void file_editor_tab::new_file (const QString& commands)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1908 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1909 update_window_title (false); // window title (no modification)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1910
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1911 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1912
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1913 // set the eol mode from the settings or depending on the OS if the entry is
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1914 // missing in the settings
19245
f3c4b48f3c53 add a preference for the default eol mode of new files (bug #43334)
Torsten <ttl@justmail.de>
parents: 19244
diff changeset
1915 #if defined (Q_OS_WIN32)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1916 int eol_mode = QsciScintilla::EolWindows;
19245
f3c4b48f3c53 add a preference for the default eol mode of new files (bug #43334)
Torsten <ttl@justmail.de>
parents: 19244
diff changeset
1917 #elif defined (Q_OS_MAC)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1918 int eol_mode = QsciScintilla::EolMac;
19245
f3c4b48f3c53 add a preference for the default eol mode of new files (bug #43334)
Torsten <ttl@justmail.de>
parents: 19244
diff changeset
1919 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1920 int eol_mode = QsciScintilla::EolUnix;
19245
f3c4b48f3c53 add a preference for the default eol mode of new files (bug #43334)
Torsten <ttl@justmail.de>
parents: 19244
diff changeset
1921 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1922 _edit_area->setEolMode (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1923 static_cast<QsciScintilla::EolMode> (
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1924 settings->value ("editor/default_eol_mode",eol_mode).toInt ()));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1925
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1926 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1927
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1928 update_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1929
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1930 _edit_area->setText (commands);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1931 _edit_area->setModified (false); // new file is not modified yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1932 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1933
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1934 // Force reloading of a file after it is saved.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1935 // This is needed to get the right line numbers for breakpoints (bug #46632).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1936 bool file_editor_tab::exit_debug_and_clear (const QString& full_name_q,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1937 const QString& base_name_q)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1938 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1939 symbol_table& symtab
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1940 = __get_symbol_table__ ("file_editor_tab::exit_debug_and_clear");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1941
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1942 std::string base_name = base_name_q.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1943 octave_value sym;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1944 try
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1945 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1946 sym = symtab.find (base_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1947 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1948 catch (const execution_exception& e)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1949 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1950 // Ignore syntax error.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1951 // It was in the old file on disk; the user may have fixed it already.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1952 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1953
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1954 // Return early if this file is not loaded in the symbol table
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1955 if (! sym.is_defined () || ! sym.is_user_code ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1956 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1957
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1958 octave_user_code *fcn = sym.user_code_value ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1959
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1960 std::string full_name = full_name_q.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1961 if (sys::canonicalize_file_name (full_name.c_str ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1962 != sys::canonicalize_file_name (fcn->fcn_file_name ().c_str ()))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1963 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1964
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1965 // If this file is loaded, check that we aren't currently running it
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1966 bool retval = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1967 octave_idx_type curr_frame = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1968 size_t nskip = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1969 call_stack& cs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1970 = __get_call_stack__ ("file_editor_tab::exit_debug_and_clear");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1971 octave_map stk = cs.backtrace (nskip, curr_frame, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1972 Cell names = stk.contents ("name");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1973 for (octave_idx_type i = names.numel () - 1; i >= 0; i--)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1974 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1975 if (names(i).string_value () == base_name)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1976 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1977 int ans = QMessageBox::question (nullptr, tr ("Debug or Save"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1978 tr ("This file is currently being executed.\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1979 "Quit debugging and save?"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1980 QMessageBox::Save | QMessageBox::Cancel);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1981
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1982 if (ans == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1983 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1984 emit execute_command_in_terminal_signal ("dbquit");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1985 // Wait until dbquit has actually occurred
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1986 while (names.numel () > i)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1987 {
25646
4d565baa475e move libinterp/utils functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 25617
diff changeset
1988 octave::sleep (0.01);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1989 stk = cs.backtrace (nskip, curr_frame, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1990 names = stk.contents ("name");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1991 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1992 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1993 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1994 retval = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1995 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1996 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1997 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1998
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1999 // If we aren't currently running it, or have quit above, force a reload.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2000 if (retval == true)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2001 symtab.clear_user_function (base_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2002
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2003 return retval;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2004 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2005
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2006 void file_editor_tab::save_file (const QString& saveFileName,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2007 bool remove_on_success,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2008 bool restore_breakpoints)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2009 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2010 // If it is a new file with no name, signal that saveFileAs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2011 // should be performed.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2012 if (! valid_file_name (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2013 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2014 save_file_as (remove_on_success);
22181
acdd8983d308 Force reload of a function after it is saved in the editor (bug #46632)
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22180
diff changeset
2015 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2016 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2017
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2018 // Get a list of breakpoint line numbers, before exit_debug_and_clear().
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2019 emit report_marker_linenr (_bp_lines, _bp_conditions);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2020
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2021 // get the absolute path (if existing)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2022 QFileInfo file_info = QFileInfo (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2023 QString file_to_save;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2024 if (file_info.exists ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2025 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2026 file_to_save = file_info.canonicalFilePath ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2027 // Force reparse of this function next time it is used (bug #46632)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2028 if ((Fisdebugmode ())(0).is_true ()
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2029 && ! exit_debug_and_clear (file_to_save, file_info.baseName ()))
23892
ba46a8015b26 close editor tab when related file is deleted in file browser (bug #43922)
Torsten <mttl@mailbox.org>
parents: 23810
diff changeset
2030 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2031 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2032 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2033 file_to_save = saveFileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2034 QFile file (file_to_save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2035
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2036 // stop watching file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2037 QStringList trackedFiles = _file_system_watcher.files ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2038 if (trackedFiles.contains (file_to_save))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2039 _file_system_watcher.removePath (file_to_save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2040
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2041 // open the file for writing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2042 if (! file.open (QIODevice::WriteOnly))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2043 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2044 // Unsuccessful, begin watching file again if it was being
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2045 // watched previously.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2046 if (trackedFiles.contains (file_to_save))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2047 _file_system_watcher.addPath (file_to_save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2048
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2049 // Create a NonModal message about error.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2050 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2051 = new QMessageBox (QMessageBox::Critical,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2052 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2053 tr ("Could not open file %1 for write:\n%2.").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2054 arg (file_to_save).arg (file.errorString ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2055 QMessageBox::Ok, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2056 show_dialog (msgBox, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2057
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2058 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2059 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2060
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2061 // save the contents into the file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2062
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2063 _encoding = _new_encoding; // consider a possible new encoding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2064
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2065 // set the desired codec (if suitable for contents)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2066 QTextCodec *codec = QTextCodec::codecForName (_encoding.toLatin1 ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2067
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2068 if (check_valid_codec (codec))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2069 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2070 save_file_as (remove_on_success);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2071 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2072 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2073
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2074 // write the file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2075 QTextStream out (&file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2076 out.setCodec (codec);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2077
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2078 QApplication::setOverrideCursor (Qt::WaitCursor);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2079 out << _edit_area->text ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2080 out.flush ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2081 QApplication::restoreOverrideCursor ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2082 file.flush ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2083 file.close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2084
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2085 // file exists now
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2086 file_info = QFileInfo (file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2087 file_to_save = file_info.canonicalFilePath ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2088
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2089 // save filename after closing file as set_file_name starts watching again
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2090 set_file_name (file_to_save); // make absolute
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2091
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2092 // set the window title to actual filename (not modified)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2093 update_window_title (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2094
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2095 // files is save -> not modified, update encoding in statusbar
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2096 _edit_area->setModified (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2097 _enc_indicator->setText (_encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2098
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2099 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2100 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2101 emit tab_remove_request ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2102 return; // Don't touch member variables after removal
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2103 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2104
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2105 // Attempt to restore the breakpoints if that is desired.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2106 // This is only allowed if the tab is not closing since changing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2107 // breakpoints would reopen the tab in this case.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2108 if (restore_breakpoints)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2109 check_restore_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2110 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2111
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2112 void file_editor_tab::save_file_as (bool remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2113 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2114 // Simply put up the file chooser dialog box with a slot connection
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2115 // then return control to the system waiting for a file selection.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2116
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2117 // reset _new_encoding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2118 _new_encoding = _encoding;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2119
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2120 // If the tab is removed in response to a QFileDialog signal, the tab
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2121 // can't be a parent.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2122 QFileDialog *fileDialog;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2123 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2124 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2125 // If tab is closed, "this" cannot be parent in which case modality
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2126 // has no effect. Disable editing instead.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2127 _edit_area->setReadOnly (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2128 fileDialog = new QFileDialog ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2129 }
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
2130 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2131 fileDialog = new QFileDialog (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2132
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2133 // add the possible filters and the default suffix
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2134 QStringList filters;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2135 filters << tr ("Octave Files (*.m)")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2136 << tr ("All Files (*)");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2137 fileDialog->setNameFilters (filters);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2138 fileDialog->setDefaultSuffix ("m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2139
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2140 if (valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2141 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2142 fileDialog->selectFile (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2143 QFileInfo file_info (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2144 if (file_info.suffix () != "m")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2145 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2146 // it is not an octave file
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2147 fileDialog->selectNameFilter (filters.at (1)); // "All Files"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2148 fileDialog->setDefaultSuffix (""); // no default suffix
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2149 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2150 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2151 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2152 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2153 fileDialog->selectFile ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2154 fileDialog->setDirectory (_ced);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2155
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2156 // propose a name corresponding to the function name
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2157 QString fname = get_function_name ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2158 if (! fname.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2159 fileDialog->selectFile (fname + ".m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2160 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2161
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2162 fileDialog->setAcceptMode (QFileDialog::AcceptSave);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2163 fileDialog->setViewMode (QFileDialog::Detail);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2164
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2165 connect (fileDialog, SIGNAL (filterSelected (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2166 this, SLOT (handle_save_as_filter_selected (const QString&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2167
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2168 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2169 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2170 connect (fileDialog, SIGNAL (fileSelected (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2171 this, SLOT (handle_save_file_as_answer_close (const QString&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2172
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2173 connect (fileDialog, SIGNAL (rejected ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2174 this, SLOT (handle_save_file_as_answer_cancel ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2175 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2176 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2177 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2178 connect (fileDialog, SIGNAL (fileSelected (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2179 this, SLOT (handle_save_file_as_answer (const QString&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2180 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2181
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2182 show_dialog (fileDialog, ! valid_file_name ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2183 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2184
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2185 void file_editor_tab::handle_save_as_filter_selected (const QString& filter)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2186 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2187 QFileDialog *file_dialog = qobject_cast<QFileDialog *> (sender ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2188
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2189 QRegExp rx ("\\*\\.([^ ^\\)]*)[ \\)]"); // regexp for suffix in filter
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2190 int index = rx.indexIn (filter,0); // get first suffix in filter
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2191
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2192 if (index > -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2193 file_dialog->setDefaultSuffix (rx.cap (1)); // found a suffix, set default
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2194 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2195 file_dialog->setDefaultSuffix (""); // not found, clear default
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2196 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2197
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2198 bool file_editor_tab::check_valid_identifier (QString file_name)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2199 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2200 QFileInfo file = QFileInfo (file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2201 QString base_name = file.baseName ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2202
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2203 if ((file.suffix () == "m")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2204 && (! valid_identifier (base_name.toStdString ())))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2205 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2206 int ans = QMessageBox::question (nullptr, tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2207 tr ("\"%1\"\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2208 "is not a valid identifier.\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2209 "If you keep this filename, you will not be able to\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2210 "call your script using its name as an Octave command.\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2211 "Do you want to choose another name?").arg (base_name),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2212 QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2213
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2214 if (ans == QMessageBox::Yes)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2215 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2216 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2217
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2218 return false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2219 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2220
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2221 bool file_editor_tab::check_valid_codec (QTextCodec *codec)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2222 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2223 if (! codec)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2224 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2225 QMessageBox::critical (nullptr,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2226 tr ("Octave Editor"),
25062
32a7222d637a [mq]: tr
Rik <rik@octave.org>
parents: 25054
diff changeset
2227 tr ("The current encoding %1\n"
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2228 "can not be applied.\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2229 "Please select another one or cancel saving!").arg (_encoding));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2230
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2231 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2232 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2233
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2234 if (! codec->canEncode (_edit_area->text ()))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2235 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2236 int ans = QMessageBox::warning (nullptr,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2237 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2238 tr ("The current editor contents can not be encoded\n"
25062
32a7222d637a [mq]: tr
Rik <rik@octave.org>
parents: 25054
diff changeset
2239 "with the selected encoding %1.\n"
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2240 "Using it will result in data loss!\n\n"
25070
b5b83fcbb498 * file-editor-tab.cc: Fix typo: chose -> choose
alexander-wilms
parents: 25064
diff changeset
2241 "Do you want to choose another encoding?").arg (_encoding),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2242 QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2243
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2244 if (ans == QMessageBox::Yes)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2245 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2246 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2247
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2248 return false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2249 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2250
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2251 void file_editor_tab::handle_save_file_as_answer (const QString& saveFileName)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2252 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2253 if (_save_as_desired_eol != _edit_area->eolMode ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2254 convert_eol (this,_save_as_desired_eol);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2255
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2256 if (saveFileName == _file_name)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2257 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2258 save_file (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2259 }
16702
553cfdd5d660 make white space visibility in the editor configurable
Torsten <ttl@justmail.de>
parents: 16701
diff changeset
2260 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2261 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2262 // Have editor check for conflict, do not delete tab after save.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2263 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2264 save_file_as (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2265 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2266 emit editor_check_conflict_save (saveFileName, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2267 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2268 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2269
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2270 void file_editor_tab::handle_save_file_as_answer_close (const QString& saveFileName)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2271 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2272 if (_save_as_desired_eol != _edit_area->eolMode ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2273 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2274 _edit_area->setReadOnly (false); // was set to read-only in save_file_as
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2275 convert_eol (this,_save_as_desired_eol);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2276 _edit_area->setReadOnly (true); // restore read-only mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2277 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2278
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2279 // saveFileName == _file_name can not happen, because we only can get here
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2280 // when we close a tab and _file_name is not a valid filename yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2281
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2282 // Have editor check for conflict, delete tab after save.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2283 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2284 save_file_as (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2285 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2286 emit editor_check_conflict_save (saveFileName, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2287 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2288
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2289 void file_editor_tab::handle_save_file_as_answer_cancel (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2290 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2291 // User canceled, allow editing again.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2292 _edit_area->setReadOnly (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2293 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2294
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2295 void file_editor_tab::file_has_changed (const QString&, bool do_close)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2296 {
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2297 bool file_exists = QFile::exists (_file_name);
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2298
25741
a3f2b06c599a fix broken file closing when deleted/renamed in file browser
Torsten <mttl@mailbox.org>
parents: 25646
diff changeset
2299 if (file_exists && ! do_close)
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2300 {
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2301 // Test if file is really modified or if just the timezone has
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2302 // changed. In the latter, just return without doing anything
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2303 QDateTime modified = QFileInfo (_file_name).lastModified ().toUTC ();
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2304
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2305 if (modified <= m_last_modified)
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2306 return;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2307
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2308 m_last_modified = modified;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2309 }
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2310
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2311 // Prevent popping up multiple message boxes when the file has
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2312 // been changed multiple times by temporarily removing from the
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2313 // file watcher.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2314 QStringList trackedFiles = _file_system_watcher.files ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2315 if (! trackedFiles.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2316 _file_system_watcher.removePath (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2317
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2318 if (file_exists && ! do_close)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2319 {
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2320
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2321 // The file is modified
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2322 if (_always_reload_changed_files)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2323 load_file (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2324
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2325 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2326 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2327 // give editor and this tab the focus,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2328 // possibly making the editor visible if it is hidden
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2329 emit set_focus_editor_signal (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2330 _edit_area->setFocus ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2331
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2332 // Create a WindowModal message that blocks the edit area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2333 // by making _edit_area parent.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2334 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2335 = new QMessageBox (QMessageBox::Warning,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2336 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2337 tr ("It seems that \'%1\' has been modified by another application. Do you want to reload it?").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2338 arg (_file_name),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2339 QMessageBox::Yes | QMessageBox::No, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2340
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2341 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2342 this, SLOT (handle_file_reload_answer (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2343
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2344 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2345 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2346 msgBox->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2347 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2348 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2349 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2350 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2351 // If desired and if file is not modified,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2352 // close the file without any user interaction
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2353 if (do_close && ! _edit_area->isModified ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2354 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2355 handle_file_resave_answer (QMessageBox::Cancel);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2356 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2357 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2358
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2359 // give editor and this tab the focus,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2360 // possibly making the editor visible if it is hidden
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2361 emit set_focus_editor_signal (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2362 _edit_area->setFocus ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2363
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2364 QString modified = "";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2365 if (_edit_area->isModified ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2366 modified = tr ("\n\nWarning: The contents in the editor is modified!");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2367
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2368 // Create a WindowModal message. The file editor tab can't be made
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2369 // parent because it may be deleted depending upon the response.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2370 // Instead, change the _edit_area to read only.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2371 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2372 = new QMessageBox (QMessageBox::Warning, tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2373 tr ("It seems that the file\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2374 "%1\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2375 "has been deleted or renamed. Do you want to save it now?%2").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2376 arg (_file_name).arg (modified),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2377 QMessageBox::Save | QMessageBox::Close, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2378
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2379 _edit_area->setReadOnly (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2380
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2381 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2382 this, SLOT (handle_file_resave_answer (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2383
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2384 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2385 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2386 msgBox->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2387 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2388 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2389
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2390 void file_editor_tab::notice_settings (const QSettings *settings, bool init)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2391 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2392 // QSettings pointer is checked before emitting.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2393
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2394 if (! init)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2395 update_lexer_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2396
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2397 // code folding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2398 if (settings->value ("editor/code_folding",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2399 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2400 _edit_area->setMarginType (3, QsciScintilla::SymbolMargin);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2401 _edit_area->setFolding (QsciScintilla::BoxedTreeFoldStyle , 3);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2402 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2403 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2404 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2405 _edit_area->setFolding (QsciScintilla::NoFoldStyle, 3);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2406 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2407
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2408 // status bar
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2409 if (settings->value ("editor/show_edit_status_bar",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2410 _status_bar->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2411 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2412 _status_bar->hide ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2413
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2414 //highlight current line color
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2415 QVariant default_var = QColor (240, 240, 240);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2416 QColor setting_color = settings->value ("editor/highlight_current_line_color",
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2417 default_var).value<QColor> ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2418 _edit_area->setCaretLineBackgroundColor (setting_color);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2419 _edit_area->setCaretLineVisible
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2420 (settings->value ("editor/highlightCurrentLine", true).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2421
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2422 bool match_keywords = settings->value
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2423 ("editor/codeCompletion_keywords",true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2424 bool match_document = settings->value
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2425 ("editor/codeCompletion_document",true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2426
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2427 QsciScintilla::AutoCompletionSource source = QsciScintilla::AcsNone;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2428 if (match_keywords)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2429 if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2430 source = QsciScintilla::AcsAll;
23996
a5b20fc6588a editor: more consistent behavior of lon line marker settings in (bug #51872)
Torsten <mttl@mailbox.org>
parents: 23905
diff changeset
2431 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2432 source = QsciScintilla::AcsAPIs;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2433 else if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2434 source = QsciScintilla::AcsDocument;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2435 _edit_area->setAutoCompletionSource (source);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2436
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2437 _edit_area->setAutoCompletionReplaceWord
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2438 (settings->value ("editor/codeCompletion_replace",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2439 _edit_area->setAutoCompletionCaseSensitivity
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2440 (settings->value ("editor/codeCompletion_case",true).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2441
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2442 if (settings->value ("editor/codeCompletion", true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2443 _edit_area->setAutoCompletionThreshold
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2444 (settings->value ("editor/codeCompletion_threshold",2).toInt ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2445 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2446 _edit_area->setAutoCompletionThreshold (-1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2447
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2448 if (settings->value ("editor/show_white_space",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2449 if (settings->value ("editor/show_white_space_indent",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2450 _edit_area->setWhitespaceVisibility (QsciScintilla::WsVisibleAfterIndent);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2451 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2452 _edit_area->setWhitespaceVisibility (QsciScintilla::WsVisible);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2453 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2454 _edit_area->setWhitespaceVisibility (QsciScintilla::WsInvisible);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2455
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2456 _edit_area->setEolVisibility (
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2457 settings->value ("editor/show_eol_chars",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2458
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2459 if (settings->value ("editor/showLineNumbers", true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2460 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2461 _edit_area->setMarginLineNumbers (2, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2462 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2463 connect (_edit_area, SIGNAL (linesChanged ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2464 this, SLOT (auto_margin_width ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2465 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2466 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2467 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2468 _edit_area->setMarginLineNumbers (2, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2469 disconnect (_edit_area, SIGNAL (linesChanged ()), nullptr, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2470 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2471
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2472 _smart_indent = settings->value ("editor/auto_indent",true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2473 _edit_area->setAutoIndent (_smart_indent);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2474 _edit_area->setTabIndents
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2475 (settings->value ("editor/tab_indents_line",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2476 _edit_area->setBackspaceUnindents
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2477 (settings->value ("editor/backspace_unindents_line",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2478 _edit_area->setIndentationGuides
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2479 (settings->value ("editor/show_indent_guides",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2480 _edit_area->setIndentationsUseTabs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2481 (settings->value ("editor/indent_uses_tabs",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2482 _edit_area->setIndentationWidth
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2483 (settings->value ("editor/indent_width",2).toInt ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2484
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2485 _edit_area->setTabWidth
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2486 (settings->value ("editor/tab_width",2).toInt ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2487
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2488 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETHSCROLLBAR,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2489 settings->value ("editor/show_hscroll_bar",true).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2490 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTH,-1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2491 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTHTRACKING,true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2492
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2493 _long_title = settings->value ("editor/longWindowTitle", false).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2494 update_window_title (_edit_area->isModified ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2495
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2496 _auto_endif = settings->value ("editor/auto_endif",1).toInt ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2497
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2498 // long line marker
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2499 int line_length = settings->value ("editor/long_line_column",80).toInt ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2500 _edit_area->setEdgeColumn (line_length);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2501
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2502 if (settings->value ("editor/long_line_marker",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2503 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2504 if (settings->value ("editor/long_line_marker_line",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2505 _edit_area->setEdgeMode (QsciScintilla::EdgeLine);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2506 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2507 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2508 if (settings->value ("editor/long_line_marker_background",false)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2509 .toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2510 _edit_area->setEdgeMode (QsciScintilla::EdgeBackground);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2511 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2512 _edit_area->setEdgeMode (QsciScintilla::EdgeLine);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2513 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2514 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2515 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2516 _edit_area->setEdgeMode (QsciScintilla::EdgeNone);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2517
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2518 // line wrapping and breaking
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2519 _edit_area->setWrapVisualFlags (QsciScintilla::WrapFlagByBorder);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2520 _edit_area->setWrapIndentMode (QsciScintilla::WrapIndentSame);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2521
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2522 if (settings->value ("editor/wrap_lines",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2523 _edit_area->setWrapMode (QsciScintilla::WrapWord);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2524 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2525 _edit_area->setWrapMode (QsciScintilla::WrapNone);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2526
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2527 if (settings->value ("editor/break_lines",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2528 _line_break = line_length;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2529 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2530 _line_break = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2531
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2532 _line_break_comments =
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2533 settings->value ("editor/break_lines_comments",false).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2534
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2535 // highlight all occurrences of a word selected by a double click
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2536 _highlight_all_occurrences =
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2537 settings->value ("editor/highlight_all_occurrences", true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2538
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2539 // reload changed files
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2540 _always_reload_changed_files =
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2541 settings->value ("editor/always_reload_changed_files",false).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2542
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2543 // Set cursor blinking depending on the settings.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2544 // QScintilla ignores the application global settings, so some special
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2545 // handling is required
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2546 bool cursor_blinking;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2547
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2548 if (settings->contains ("cursor_blinking"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2549 cursor_blinking = settings->value ("cursor_blinking",true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2550 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2551 cursor_blinking = settings->value ("terminal/cursorBlinking",true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2552
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2553 if (cursor_blinking)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2554 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD,500);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2555 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2556 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD,0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2557
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2558 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2559
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2560
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2561 void file_editor_tab::auto_margin_width (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2562 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2563 _edit_area->setMarginWidth (2, "1" + QString::number (_edit_area->lines ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2564 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2565
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2566 // the following close request was changed from a signal slot into a
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2567 // normal function because we need the return value from close whether
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2568 // the tab really was closed (for canceling exiting octave).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2569 // When emitting a signal, only the return value from the last slot
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2570 // goes back to the sender
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2571 bool file_editor_tab::conditional_close (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2572 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2573 return close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2574 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2575
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2576 void file_editor_tab::change_editor_state (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2577 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2578 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2579 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2580 // Widget may be going out of focus. If so, record location.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2581 if (_find_dialog)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2582 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2583 if (_find_dialog->isVisible ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2584 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2585 _find_dialog_geometry = _find_dialog->geometry ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2586 _find_dialog->hide ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2587 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2588 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2589 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2590 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2591
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2592 if (_find_dialog && _find_dialog_is_visible)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2593 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2594 _find_dialog->setGeometry (_find_dialog_geometry);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2595 QPoint p = _find_dialog->pos ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2596 _find_dialog->move (p.x ()+10, p.y ()+10);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2597 _find_dialog->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2598 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2599
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2600 emit editor_state_changed (_copy_available, _is_octave_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2601 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2602
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2603 void file_editor_tab::file_name_query (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2604 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2605 // A zero (null pointer) means that all file editor tabs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2606 // should respond, otherwise just the desired file editor tab.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2607 if (ID != this && ID != nullptr)
15848
424edeca3c66 Redo portions of file editor to use more signals/slots rather than casting.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 15449
diff changeset
2608 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2609
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2610 // This list also includes windows with name ""
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2611 emit add_filename_to_list (_file_name, _encoding, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2612 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2613
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2614 void file_editor_tab::handle_file_reload_answer (int decision)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2615 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2616 if (decision == QMessageBox::Yes)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2617 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2618 // reload: file is readded to the file watcher in set_file_name ()
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2619 load_file (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2620 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2621 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2622 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2623 // do not reload: readd to the file watche
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2624 _file_system_watcher.addPath (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2625 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2626 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2627
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2628 void file_editor_tab::handle_file_resave_answer (int decision)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2629 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2630 // check decision of user in dialog
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2631 if (decision == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2632 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2633 save_file (_file_name); // readds file to watcher in set_file_name ()
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2634 _edit_area->setReadOnly (false); // delete read only flag
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2635 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2636 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2637 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2638 // Definitely close the file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2639 // Set modified to false to prevent the dialog box when the close event
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2640 // is posted. If the user cancels the close in this dialog the tab is
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2641 // left open with a non-existing file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2642 _edit_area->setModified (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2643 close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2644 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2645 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2646
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2647 void file_editor_tab::insert_debugger_pointer (const QWidget *ID, int line)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2648 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2649 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2650 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2651
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2652 emit remove_all_positions (); // debugger_position, unsure_debugger_position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2653
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2654 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2655 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2656 marker *dp;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2657
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2658 if (_edit_area->isModified ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2659 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2660 // The best that can be done if the editor contents has been
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2661 // modified is to see if there is a match with the original
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2662 // line number of any existing breakpoints. We can put a normal
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2663 // debugger pointer at that breakpoint position. Otherwise, it
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2664 // isn't certain whether the original line number and current line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2665 // number match.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2666 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2667 marker *dummy;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2668 emit find_translated_line_number (line, editor_linenr, dummy);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2669 if (editor_linenr != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2670 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2671 // Match with an existing breakpoint.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2672 dp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2673 marker::debugger_position, editor_linenr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2674 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2675 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2676 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2677 int original_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2678 editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2679 emit find_linenr_just_before (line, original_linenr, editor_linenr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2680 if (original_linenr >= 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2681 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2682 // Make a guess by using an offset from the breakpoint.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2683 int linenr_guess = editor_linenr + line - original_linenr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2684 dp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2685 marker::unsure_debugger_position,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2686 linenr_guess);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2687 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2688 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2689 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2690 // Can't make a very good guess, so just use the debugger
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2691 // line number.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2692 dp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2693 marker::unsure_debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2694 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2695 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2696 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2697 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2698 dp = new marker (_edit_area, line, marker::debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2699
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2700 connect (this, SIGNAL (remove_position_via_debugger_linenr (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2701 dp, SLOT (handle_remove_via_original_linenr (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2702 connect (this, SIGNAL (remove_all_positions (void)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2703 dp, SLOT (handle_remove (void)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2704
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2705 center_current_line (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2706 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2707 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2708
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2709 void file_editor_tab::delete_debugger_pointer (const QWidget *ID, int line)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2710 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2711 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2712 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2713
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2714 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2715 emit remove_position_via_debugger_linenr (line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2716 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2717
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2718 void file_editor_tab::do_breakpoint_marker (bool insert,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2719 const QWidget *ID, int line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2720 const QString& cond)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2721 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2722 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2723 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2724
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2725 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2726 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2727 if (insert)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2728 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2729 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2730 marker *bp = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2731
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2732 // If comes back indicating a non-zero breakpoint marker,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2733 // reuse it if possible
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2734 emit find_translated_line_number (line, editor_linenr, bp);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2735 if (bp != nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2736 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2737 if ((cond == "") != (bp->get_cond () == ""))
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2738 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2739 // can only reuse conditional bp as conditional
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2740 emit remove_breakpoint_via_debugger_linenr (line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2741 bp = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2742 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2743 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2744 bp->set_cond (cond);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2745 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2746
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2747 if (bp == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2748 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2749 bp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2750 cond == "" ? marker::breakpoint
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2751 : marker::cond_break, cond);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2752
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2753 connect (this, SIGNAL (remove_breakpoint_via_debugger_linenr
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2754 (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2755 bp, SLOT (handle_remove_via_original_linenr (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2756 connect (this, SIGNAL (request_remove_breakpoint_via_editor_linenr
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2757 (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2758 bp, SLOT (handle_request_remove_via_editor_linenr
21651
b4354327d2b5 dbstop: Fix confusion when breakpoints are changed by the GUI (bug #47675)
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21578
diff changeset
2759 (int)));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2760 connect (this, SIGNAL (remove_all_breakpoints (void)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2761 bp, SLOT (handle_remove (void)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2762 connect (this, SIGNAL (find_translated_line_number (int, int&,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2763 marker*&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2764 bp, SLOT (handle_find_translation (int, int&,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2765 marker*&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2766 connect (this, SIGNAL (find_linenr_just_before (int, int&, int&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2767 bp, SLOT (handle_find_just_before (int, int&, int&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2768 connect (this, SIGNAL (report_marker_linenr (QIntList&,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2769 QStringList&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2770 bp, SLOT (handle_report_editor_linenr (QIntList&,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2771 QStringList&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2772 connect (bp, SIGNAL (request_remove (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2773 this, SLOT (handle_request_remove_breakpoint (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2774 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2775 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2776 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2777 emit remove_breakpoint_via_debugger_linenr (line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2778 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2779 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2780
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2781 void file_editor_tab::center_current_line (bool always)
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
2782 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2783 long int visible_lines
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2784 = _edit_area->SendScintilla (QsciScintillaBase::SCI_LINESONSCREEN);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2785
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2786 if (visible_lines > 2)
23237
904c8a356e76 provide the possibility for breaking lines only in comments (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23236
diff changeset
2787 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2788 int line, index;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2789 _edit_area->getCursorPosition (&line, &index);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2790 // compensate for "folding":
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2791 // step 1: expand the current line, if it was folded
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2792 _edit_area->SendScintilla (2232, line); // SCI_ENSUREVISIBLE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2793
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2794 // step 2: map file line num to "visible" one // SCI_VISIBLEFROMDOCLINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2795 int vis_line = _edit_area->SendScintilla (2220, line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2796
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2797 int first_line = _edit_area->firstVisibleLine ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2798
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2799 if (always || vis_line == first_line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2800 || vis_line > first_line + visible_lines - 2)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2801 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2802 first_line += (vis_line - first_line - (visible_lines - 1) / 2);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2803 _edit_area->SendScintilla (2613, first_line); // SCI_SETFIRSTVISIBLELINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2804 }
23237
904c8a356e76 provide the possibility for breaking lines only in comments (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23236
diff changeset
2805 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2806 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2807
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2808 void file_editor_tab::handle_lines_changed (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2809 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2810 // the related signal is emitted before cursor-move-signal!
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2811 _lines_changed = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2812 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2813
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2814 void file_editor_tab::handle_cursor_moved (int line, int col)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2815 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2816 if (_edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCACTIVE))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2817 show_auto_completion (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2818
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2819 if (_lines_changed) // cursor moved and lines have changed
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2820 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2821 _lines_changed = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2822 if (_is_octave_file && line == _line+1 && col < _col)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2823 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2824 // Obviously, we have a newline here
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2825 if (_smart_indent || _auto_endif)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2826 _edit_area->smart_indent (_smart_indent, _auto_endif, _line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2827 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2828 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2829
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2830 _line = line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2831 _col = col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2832
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2833 _row_indicator->setNum (line+1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2834 _col_indicator->setNum (col+1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2835 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2836
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2837 // Slot that is entered each time a new character was typed.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2838 // It is used for handling line breaking if this is desired.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2839 // The related signal is emitted after the signal for a moved cursor
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2840 // such that _col and _line can not be used for current position.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2841 void file_editor_tab::handle_char_added (int)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2842 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2843 if (_line_break)
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
2844 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2845 // If line breaking is desired, get the current line and column.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2846 // For taking the tab width into consideration, use own function
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2847 int line, col, pos;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2848 _edit_area->get_current_position (&pos, &line, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2849
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2850 // immediately return if line has not reached the max. line length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2851 if (col <= _line_break)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2852 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2853
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2854 // If line breaking is only desired in comments,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2855 // return if not in a comment
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2856 int style_comment = octave_qscintilla::ST_NONE;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2857 if (_line_break_comments)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2858 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2859 // line breaking only in comments, check for comment style
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2860 style_comment = _edit_area->is_style_comment ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2861 if (! style_comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2862 return; // no comment, return
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2863 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2864
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2865 // Here we go for breaking the current line by inserting a newline.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2866 // For determining the position of a specific column, we have to get
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2867 // the column from the QScintila function without taking tab lengths
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2868 // into account, since the calculation from line/col to position ignores
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2869 // this, too
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2870 _edit_area->getCursorPosition (&line, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2871 int c = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2872 int col_space = col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2873 int indentation = _edit_area->indentation (line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2874
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2875 // Search the first occurence of space or tab backwards starting from
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2876 // the current column (col_space).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2877 while (c != ' ' && c != '\t' && col_space > indentation)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2878 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2879 pos = _edit_area->positionFromLineIndex (line, col_space--);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2880 c = _edit_area->SendScintilla (QsciScintillaBase::SCI_GETCHARAT, pos);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2881 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2882
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2883 // If a space or tab was found, break at this char,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2884 // otherwise break at cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2885 int col_newline = col - 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2886 if (c == ' ' || c == '\t')
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2887 col_newline = col_space + 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2888
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2889 // Insert a newline char for breaking the line possibly followed
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2890 // by a line comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2891 QString newline = QString ("\n");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2892 style_comment = _edit_area->is_style_comment ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2893 if (style_comment == octave_qscintilla::ST_LINE_COMMENT)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2894 newline = newline + _edit_area->comment_string ().at (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2895 _edit_area->insertAt (newline, line, col_newline);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2896
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2897 // Automatically indent the new line to the indentation of previous line
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2898 // and set the cursor position to the end of the indentation.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2899 _edit_area->setIndentation (line + 1, indentation);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2900 _edit_area->SendScintilla (QsciScintillaBase::SCI_LINEEND);
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
2901 }
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
2902 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2903
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2904 // Slot handling a double click into the text area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2905 void file_editor_tab::handle_double_click (int, int, int modifier)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2906 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2907 if (! modifier)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2908 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2909 // double clicks without modifier
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2910 // clear any existing indicators of this type
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2911 _edit_area->clear_selection_markers ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2912
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2913 if (_highlight_all_occurrences)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2914 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2915 // Clear any previous selection.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2916 _edit_area->set_word_selection ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2917
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2918 // highlighting of all occurrences of the clicked word is enabled
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2919
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2920 // get the resulting cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2921 // (required if click was beyond a line ending)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2922 int line, col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2923 _edit_area->getCursorPosition (&line, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2924
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2925 // get the word at the cursor (if any)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2926 QString word = _edit_area->wordAtLineIndex (line, col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2927 word = word.trimmed ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2928
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2929 if (! word.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2930 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2931 // word is not empty, so find all occurrences of the word
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2932
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2933 // remember first visible line for restoring the view afterwards
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2934 int first_line = _edit_area->firstVisibleLine ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2935
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2936 // search for first occurrence of the detected word
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2937 bool find_result_available
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2938 = _edit_area->findFirst (word,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2939 false, // no regexp
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2940 true, // case sensitive
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2941 true, // whole words only
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2942 false, // do not wrap
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2943 true, // forward
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2944 0,0, // from the beginning
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2945 false
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
2946 #if defined (HAVE_QSCI_VERSION_2_6_0)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2947 , true
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
2948 #endif
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2949 );
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2950
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2951 // loop over all occurrences and set the related indicator
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2952 int oline, ocol;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2953 int wlen = word.length ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2954
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2955 while (find_result_available)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2956 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2957 // get cursor position after having found an occurrence
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2958 _edit_area->getCursorPosition (&oline, &ocol);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2959 // mark the selection
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2960 _edit_area->show_selection_markers (oline, ocol, wlen);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2961
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2962 // find next occurrence
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2963 find_result_available = _edit_area->findNext ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2964 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2965
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2966 // restore the visible area of the file, the cursor position,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2967 // and the selection
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2968 _edit_area->setFirstVisibleLine (first_line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2969 _edit_area->setCursorPosition (line, col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2970 _edit_area->setSelection (line, col - wlen, line, col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2971 _edit_area->set_word_selection (word);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2972 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2973 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2974 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2975 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2976
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2977 QString file_editor_tab::get_function_name (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2978 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2979 QRegExp rxfun1 ("^[\t ]*function[^=]+=([^\\(]+)\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2980 QRegExp rxfun2 ("^[\t ]*function[\t ]+([^\\(]+)\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2981 QRegExp rxfun3 ("^[\t ]*function[^=]+=[\t ]*([^\\s]+)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2982 QRegExp rxfun4 ("^[\t ]*function[\t ]+([^\\s]+)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2983
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2984 QStringList lines = _edit_area->text ().split ("\n");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2985
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2986 for (int i = 0; i < lines.count (); i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2987 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2988 if (rxfun1.indexIn (lines.at (i)) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2989 return rxfun1.cap (1).remove (QRegExp ("[ \t]*"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2990 else if (rxfun2.indexIn (lines.at (i)) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2991 return rxfun2.cap (1).remove (QRegExp ("[ \t]*"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2992 else if (rxfun3.indexIn (lines.at (i)) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2993 return rxfun3.cap (1).remove (QRegExp ("[ \t]*"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2994 else if (rxfun4.indexIn (lines.at (i)) != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2995 return rxfun4.cap (1).remove (QRegExp ("[ \t]*"));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2996 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2997
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2998 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2999 }
18834
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3000 }
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3001
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15860
diff changeset
3002 #endif