annotate libgui/src/m-editor/file-editor-tab.cc @ 29359:7854d5752dd2

maint: merge stable to default.
author John W. Eaton <jwe@octave.org>
date Wed, 10 Feb 2021 10:10:40 -0500
parents ab8aa1bb3c2f 0a5b15007766
children fe06fafb4cac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
29358
0a5b15007766 update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 29201
diff changeset
3 // Copyright (C) 2011-2021 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
25
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
26 //! @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
27 //!
1d6c940a1b37 doc: Improve Doxygen documentation for some files in libgui.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23996
diff changeset
28 //! 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
29
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21651
diff changeset
30 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21213
diff changeset
31 # include "config.h"
15286
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
32 #endif
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
33
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21651
diff changeset
34 #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
35
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
36 #include <QApplication>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
37 #include <QCheckBox>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
38 #include <QDateTime>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
39 #include <QDesktopServices>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
40 #include <QDialogButtonBox>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
41 #include <QFileDialog>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
42 #include <QInputDialog>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
43 #include <QLabel>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
44 #include <QMessageBox>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
45 #include <QPrintDialog>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
46 #include <QPushButton>
28360
668b38ab90f7 fix jumping vertical scrollbar when file is saved in editor (bug #58418)
Markus Meisinger <chloros2@gmx.de>
parents: 28301
diff changeset
47 #include <QScrollBar>
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
48 #include <QStyle>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
49 #include <QTextBlock>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
50 #include <QTextCodec>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
51 #include <QTextStream>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
52 #include <QVBoxLayout>
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
53 #if defined (HAVE_QSCI_QSCILEXEROCTAVE_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
54 # 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
55 # 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
56 #elif defined (HAVE_QSCI_QSCILEXERMATLAB_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
57 # 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
58 # 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
59 #endif
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
60 #include <Qsci/qscilexerbash.h>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
61 #include <Qsci/qscilexerbatch.h>
14873
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
62 #include <Qsci/qscilexercpp.h>
29165
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
63 #include <Qsci/qscilexerjava.h>
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
64 #include <Qsci/qscilexerdiff.h>
14873
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
65 #include <Qsci/qscilexerperl.h>
16440
aaf024ac8015 Add editor print menu/toolbutton implementation
John Donoghue <john.donoghue@ieee.org>
parents: 16437
diff changeset
66 #include <Qsci/qsciprinter.h>
25443
2fa7cd178c4a new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents: 25440
diff changeset
67
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
68 #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
69 #include "file-editor.h"
27664
bd7decacf32e avoid unnecessary includes of gui-preference header files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27651
diff changeset
70 #include "gui-preferences-cs.h"
27560
3fcc650de22f split gui-preferences.h into one file per widget
John W. Eaton <jwe@octave.org>
parents: 27556
diff changeset
71 #include "gui-preferences-ed.h"
27671
61883a1a80a1 don't include gui-preferences-global.h in gui-preferences.h
John W. Eaton <jwe@octave.org>
parents: 27664
diff changeset
72 #include "gui-preferences-global.h"
29220
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
73 #include "gui-utils.h"
21007
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
74 #include "marker.h"
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
75 #include "octave-qobject.h"
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
76 #include "octave-txt-lexer.h"
16547
3cd80afc3509 improve debugging with the GUI
John W. Eaton <jwe@octave.org>
parents: 16520
diff changeset
77
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
78 #include "cmd-edit.h"
21310
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
79 #include "file-ops.h"
28118
f2789cae04f3 Don't use "codecForLocale" to get encoding for locale charset.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27987
diff changeset
80 #include "localcharset-wrapper.h"
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
81 #include "uniconv-wrappers.h"
21310
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
82
23137
334119c390b3 move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents: 23084
diff changeset
83 #include "bp-table.h"
27405
646efbb5f407 avoid including builtin-defun-decls.h unless needed
John W. Eaton <jwe@octave.org>
parents: 27403
diff changeset
84 #include "builtin-defun-decls.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
85 #include "interpreter-private.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
86 #include "interpreter.h"
27396
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
87 #include "load-path.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
88 #include "oct-map.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
89 #include "ov-usr-fcn.h"
27263
99aa1bcb8848 rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 27261
diff changeset
90 #include "qt-interpreter-events.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
91 #include "symtab.h"
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
92 #include "unwind-prot.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
93 #include "utils.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
94 #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
95
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
96 namespace octave
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
97 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
98 //! 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
99 //! 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
100 //! 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
101 //! sections of text.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
102
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
103 // 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
104 // messages don't affect grandparents.
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
105 file_editor_tab::file_editor_tab (base_qobject& oct_qobj,
27620
45bb5bbaf291 don't use singleton pattern for resource manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27611
diff changeset
106 const QString& directory_arg)
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
107 : m_octave_qobj (oct_qobj)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
108 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
109 m_lexer_apis = nullptr;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
110 m_is_octave_file = true;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
111 m_lines_changed = false;
28382
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
112 m_autoc_active = false;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
113
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
114 m_ced = directory_arg;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
115
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
116 m_file_name = "";
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
117 m_file_system_watcher.setObjectName ("_qt_autotest_force_engine_poller");
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
118
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
119 m_edit_area = new octave_qscintilla (this, m_octave_qobj);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
120 m_line = 0;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
121 m_col = 0;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
122
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
123 m_bp_lines.clear (); // start with empty lists of breakpoints
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
124 m_bp_conditions.clear ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
125 m_bp_restore_count = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
126
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
127 m_breakpoint_info.remove_next = false;
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
128 m_breakpoint_info.remove_line = -1;
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
129
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
130 // Initialize last modification date to now
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
131 m_last_modified = QDateTime::currentDateTimeUtc();
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
132
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
133 connect (m_edit_area, SIGNAL (cursorPositionChanged (int, int)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
134 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
135
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
136 connect (m_edit_area, SIGNAL (SCN_CHARADDED (int)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
137 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
138
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
139 connect (m_edit_area, SIGNAL (SCN_DOUBLECLICK (int, int, int)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
140 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
141
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
142 connect (m_edit_area, SIGNAL (linesChanged ()),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
143 this, SLOT (handle_lines_changed ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
144
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
145 connect (m_edit_area, SIGNAL (context_menu_edit_signal (const QString&)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
146 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
147
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
148 // create statusbar for row/col indicator and eol mode
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
149 m_status_bar = new QStatusBar (this);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
150
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
151 // row- and col-indicator
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
152 m_row_indicator = new QLabel ("", this);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
153 QFontMetrics fm = m_row_indicator->fontMetrics ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
154 m_row_indicator->setMinimumSize (4.5*fm.averageCharWidth (),0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
155 QLabel *row_label = new QLabel (tr ("line:"), this);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
156 m_col_indicator = new QLabel ("", this);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
157 m_col_indicator->setMinimumSize (4*fm.averageCharWidth (),0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
158 QLabel *col_label = new QLabel (tr ("col:"), this);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
159 m_status_bar->addWidget (row_label, 0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
160 m_status_bar->addWidget (m_row_indicator, 0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
161 m_status_bar->addWidget (col_label, 0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
162 m_status_bar->addWidget (m_col_indicator, 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
163
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
164 // status bar: encoding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
165 QLabel *enc_label = new QLabel (tr ("encoding:"), this);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
166 m_enc_indicator = new QLabel ("",this);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
167 m_status_bar->addWidget (enc_label, 0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
168 m_status_bar->addWidget (m_enc_indicator, 0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
169 m_status_bar->addWidget (new QLabel (" ", this), 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
170
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
171 // status bar: eol mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
172 QLabel *eol_label = new QLabel (tr ("eol:"), this);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
173 m_eol_indicator = new QLabel ("",this);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
174 m_status_bar->addWidget (eol_label, 0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
175 m_status_bar->addWidget (m_eol_indicator, 0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
176 m_status_bar->addWidget (new QLabel (" ", this), 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
177
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
178 // symbols
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
179 m_edit_area->setMarginType (1, QsciScintilla::SymbolMargin);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
180 m_edit_area->setMarginSensitivity (1, true);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
181 m_edit_area->markerDefine (QsciScintilla::RightTriangle, marker::bookmark);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
182 m_edit_area->setMarkerBackgroundColor (QColor (0,0,232), marker::bookmark);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
183 m_edit_area->markerDefine (QsciScintilla::Circle, marker::breakpoint);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
184 m_edit_area->setMarkerBackgroundColor (QColor (192,0,0), marker::breakpoint);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
185 m_edit_area->markerDefine (QsciScintilla::Circle, marker::cond_break);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
186 m_edit_area->setMarkerBackgroundColor (QColor (255,127,0), marker::cond_break);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
187 m_edit_area->markerDefine (QsciScintilla::RightArrow,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
188 marker::debugger_position);
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
189 m_edit_area->setMarkerBackgroundColor (QColor (255,255,0),
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
190 marker::debugger_position);
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
191 m_edit_area->markerDefine (QsciScintilla::RightArrow,
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
192 marker::unsure_debugger_position);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
193 m_edit_area->setMarkerBackgroundColor (QColor (192,192,192),
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
194 marker::unsure_debugger_position);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
195
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
196 connect (m_edit_area, SIGNAL (marginClicked (int, int,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
197 Qt::KeyboardModifiers)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
198 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
199 Qt::KeyboardModifiers)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
200
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
201 connect (m_edit_area, SIGNAL (context_menu_break_condition_signal (int)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
202 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
203
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
204 // line numbers
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
205 m_edit_area->setMarginsForegroundColor (QColor (96, 96, 96));
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
206 m_edit_area->setMarginsBackgroundColor (QColor (232, 232, 220));
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
207 m_edit_area->setMarginType (2, QsciScintilla::TextMargin);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
208
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
209 // other features
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
210 m_edit_area->setBraceMatching (QsciScintilla::StrictBraceMatch);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
211 m_edit_area->setAutoIndent (true);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
212 m_edit_area->setIndentationWidth (2);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
213 m_edit_area->setIndentationsUseTabs (false);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
214
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
215 m_edit_area->setUtf8 (true);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
216
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
217 // auto completion
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
218 m_edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCSETCANCELATSTART, false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
219
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
220 QVBoxLayout *edit_area_layout = new QVBoxLayout ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
221 edit_area_layout->addWidget (m_edit_area);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
222 edit_area_layout->addWidget (m_status_bar);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
223 edit_area_layout->setMargin (0);
27090
e83d3161b256 make editor toolbar, tabs and statusbar more comapct (bug #53902)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27089
diff changeset
224 edit_area_layout->setSpacing (0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
225 setLayout (edit_area_layout);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
226
27556
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
227 // Any interpreter_event signal from a file_editor_tab_widget is
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
228 // handled the same as for the parent main_window object.
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
229
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
230 connect (m_edit_area, SIGNAL (interpreter_event (const fcn_callback&)),
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
231 this, SIGNAL (interpreter_event (const fcn_callback&)));
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
232
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
233 connect (m_edit_area, SIGNAL (interpreter_event (const meth_callback&)),
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
234 this, SIGNAL (interpreter_event (const meth_callback&)));
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
235
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
236 // connect modified signal
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
237 connect (m_edit_area, SIGNAL (modificationChanged (bool)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
238 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
239
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
240 connect (m_edit_area, SIGNAL (copyAvailable (bool)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
241 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
242
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
243 connect (&m_file_system_watcher, SIGNAL (fileChanged (const QString&)),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
244 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
245
27397
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
246 connect (this, SIGNAL (maybe_remove_next (int)),
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
247 this, SLOT (handle_remove_next (int)));
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
248
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
249 connect (this, SIGNAL (dbstop_if (const QString&, int, const QString&)),
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
250 this,
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
251 SLOT (handle_dbstop_if (const QString&, int, const QString&)));
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
252
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
253 connect (this, SIGNAL (request_add_breakpoint (int, const QString&)),
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
254 this, SLOT (handle_request_add_breakpoint (int, const QString&)));
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
255
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
256 connect (this, SIGNAL (api_entries_added (void)),
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
257 this, SLOT (handle_api_entries_added (void)));
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
258
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
259 connect (this, SIGNAL (confirm_dbquit_and_save_signal (const QString&, const QString&, bool, bool)),
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
260 this, SLOT (confirm_dbquit_and_save (const QString&, const QString&, bool, bool)));
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
261
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
262 connect (this, SIGNAL (do_save_file_signal (const QString&, bool, bool)),
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
263 this, SLOT (do_save_file (const QString&, bool, bool)));
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
264
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
265 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
266 gui_settings *settings = rmgr.get_settings ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
267 if (settings)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
268 notice_settings (settings, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
269
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
270 // encoding, not updated with the settings
29120
eb6599cf2db5 Use UTF-8 encoding for .m files by default (bug #59387).
Markus Mützel <markus.muetzel@gmx.de>
parents: 28851
diff changeset
271 m_encoding = settings->value (ed_default_enc.key, "UTF-8").toString ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
272 m_enc_indicator->setText (m_encoding);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
273 // no changes in encoding yet
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
274 m_new_encoding = m_encoding;
24716
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 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
278 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
279 // 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
280 emit remove_all_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
281 emit remove_all_positions ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
282
29177
bd5961abe971 * file-editor-tab.cc (dtor): do not delete m_edit_area (bug #59628)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28497
diff changeset
283 // Destroy lexer attached to m_edit_area, which is not the parent
bd5961abe971 * file-editor-tab.cc (dtor): do not delete m_edit_area (bug #59628)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28497
diff changeset
284 // of lexer
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
285 QsciLexer *lexer = m_edit_area->lexer ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
286 if (lexer)
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 delete lexer;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
289 m_edit_area->setLexer (nullptr);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
290 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
291 }
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 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
294 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
295 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
296 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
297
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
298 m_encoding = new_encoding;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
299 m_enc_indicator->setText (m_encoding);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
300 if (! m_edit_area->text ().isEmpty ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
301 set_modified (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
302 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
303
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
304 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
305 {
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
306 int save_dialog = check_file_modified (true);
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
307 if ((save_dialog == QMessageBox::Cancel) ||
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
308 (save_dialog == QMessageBox::Save))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
309 {
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
310 // Ignore close event if file is saved or user cancels
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
311 // closing this window. In case of saving, tab is closed after
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
312 // successful saving.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
313 e->ignore ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
314 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
315 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
316 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
317 e->accept ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
318 emit tab_remove_request ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
319 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
320 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
321
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
322 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
323 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
324 m_ced = dir;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
325 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
326
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
327 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
328 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
329 // Search for a subfunction in actual file (this is done first because
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
330 // Octave finds this function before others with the same name in the
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
331 // search path.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
332 QRegExp rxfun1 ("^[\t ]*function[^=]+=[\t ]*"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
333 + word_at_cursor + "[\t ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
334 QRegExp rxfun2 ("^[\t ]*function[\t ]+"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
335 + word_at_cursor + "[\t ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
336 QRegExp rxfun3 ("^[\t ]*function[\t ]+"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
337 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
338 QRegExp rxfun4 ("^[\t ]*function[^=]+=[\t ]*"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
339 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
340
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
341 int pos_fct = -1;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
342 QStringList lines = m_edit_area->text ().split ("\n");
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
343
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
344 int line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
345 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
346 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
347 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
348 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
349 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
350 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
351 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
352 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
353 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
354 break;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
357 if (pos_fct > -1)
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 // reg expr. found: it is an internal function
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
360 m_edit_area->setCursorPosition (line, pos_fct);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
361 m_edit_area->SendScintilla (2232, line); // SCI_ENSUREVISIBLE
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
362 // SCI_VISIBLEFROMDOCLINE
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
363 int vis_line = m_edit_area->SendScintilla (2220, line);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
364 m_edit_area->SendScintilla (2613, vis_line); // SCI_SETFIRSTVISIBLELINE
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
365 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
366 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
367
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
368 emit edit_mfile_request (word_at_cursor, m_file_name, m_ced, -1);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
371 // 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
372 // breakpoint. The default condition is (a) the existing condition if there
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
373 // is already a breakpoint, (b) any selected text, or (c) empty
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
374 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
375 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
376 // 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
377 // 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
378 if (! unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
379 return;
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 QString cond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
382
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
383 // Search for previous condition. FIXME: is there a more direct way?
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
384 if (m_edit_area->markersAtLine (linenr) & (1 << marker::cond_break))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
385 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
386 emit report_marker_linenr (m_bp_lines, m_bp_conditions);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
387 for (int i = 0; i < m_bp_lines.length (); i++)
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
388 if (m_bp_lines.value (i) == linenr)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
389 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
390 cond = m_bp_conditions.value (i);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
391 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
392 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
393 m_bp_lines.clear ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
394 m_bp_conditions.clear ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
395 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
396
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
397 // 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
398 // 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
399 // 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
400 // the selection (in edit area) selected (in the dialog).
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
401 if (m_edit_area->hasSelectedText ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
402 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
403 if (cond == "")
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
404 cond = m_edit_area->selectedText ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
405 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
406 cond = '(' + cond + ") || (" + m_edit_area->selectedText () + ')';
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
407 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
408
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
409 emit dbstop_if ("dbstop if", linenr+1, cond);
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
410 }
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
411
27971
ec769a7ab9fb fix more spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27957
diff changeset
412 // Display dialog in GUI thread to get condition, then emit
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
413 // interpreter_event signal to check it in the interpreter thread.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
414 // If the dialog returns a valid condition, then either emit a signal
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
415 // to add the breakpoint in the editor tab or a signal to display a
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
416 // new dialog.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
417
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
418 void file_editor_tab::handle_dbstop_if (const QString& prompt, int line,
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
419 const QString& cond)
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
420 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
421 bool ok;
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
422 QString new_cond
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
423 = QInputDialog::getText (this, tr ("Breakpoint condition"),
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
424 prompt, QLineEdit::Normal, cond, &ok);
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
425
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
426 // If cancel, don't change breakpoint condition.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
427
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
428 if (ok && ! new_cond.isEmpty ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
429 {
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
430 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
431 ([=] (interpreter& interp)
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
432 {
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
433 // INTERPRETER THREAD
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
434
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
435 error_system& es = interp.get_error_system ();
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
436
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
437 unwind_protect frame;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
438
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
439 // Prevent an error in the evaluation here from sending us
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
440 // into the debugger.
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
441
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
442 es.interpreter_try (frame);
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
443
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
444 bool eval_error = false;
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
445 std::string msg;
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
446
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
447 try
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
448 {
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
449 tree_evaluator& tw = interp.get_evaluator ();
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
450 bp_table& bptab = tw.get_bp_table ();
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
451
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
452 bptab.condition_valid (new_cond.toStdString ());
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
453
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
454 // The condition seems OK, so set the conditional
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
455 // breakpoint.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
456
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
457 emit request_add_breakpoint (line, new_cond);
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
458 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 29162
diff changeset
459 catch (const execution_exception& ee)
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
460 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
461 interp.recover_from_exception ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
462
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 29162
diff changeset
463 msg = ee.message ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
464 eval_error = true;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
465 }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
466 catch (const interrupt_exception&)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
467 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
468 interp.recover_from_exception ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
469
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
470 msg = "evaluation interrupted";
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
471 eval_error = true;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
472 }
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
473
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
474 if (eval_error)
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
475 {
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
476 // Try again with a prompt that indicates the last
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
477 // attempt was an error.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
478
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
479 QString new_prompt = (tr ("ERROR: ")
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
480 + QString::fromStdString (msg)
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
481 + "\n\ndbstop if");
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
482
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
483 emit dbstop_if (new_prompt, line, "");
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
484 }
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
485 });
24716
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
488
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
489 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
490 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
491 // update tracked file if we really have a file on disk
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
492 QStringList trackedFiles = m_file_system_watcher.files ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
493 if (! trackedFiles.isEmpty ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
494 m_file_system_watcher.removePath (m_file_name);
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
495 if (! fileName.isEmpty () && QFile::exists (fileName))
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
496 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
497 m_file_system_watcher.addPath (fileName);
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
498 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
499 }
24716
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 // update lexer and file name variable if file name changes
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
502 if (m_file_name != fileName)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
503 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
504 m_file_name = fileName;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
505 update_lexer ();
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
508 // update the file editor with current editing directory
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
509 emit editor_state_changed (m_copy_available, m_is_octave_file);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
510
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
511 // add the new file to the most-recently-used list
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
512 emit mru_add_file (m_file_name, m_encoding);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
515 // valid_file_name (file): checks whether "file" names a file.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
516 // By default, "file" is empty; then m_file_name is checked
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
517 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
518 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
519 if (file.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
520 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
521 if (m_file_name.isEmpty ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
522 return false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
523 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
524 return true;
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 return true;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
530 // 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
531 // 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
532 // 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
533 // 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
534 // 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
535 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
536 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
537 bool retval = true;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
538 if (m_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
539 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
540 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
541 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
542 "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
543 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
544
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
545 if (ans == QMessageBox::Save)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
546 save_file (m_file_name, false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
547 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
548 retval = false;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
551 return retval;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
552 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
553
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
554 // 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
555 // 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
556 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
557 Qt::KeyboardModifiers state)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
558 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
559 if (margin == 1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
560 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
561 unsigned int markers_mask = m_edit_area->markersAtLine (editor_linenr);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
562
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
563 if (state & Qt::ControlModifier)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
564 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
565 if (markers_mask & (1 << marker::bookmark))
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
566 m_edit_area->markerDelete (editor_linenr, marker::bookmark);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
567 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
568 m_edit_area->markerAdd (editor_linenr, marker::bookmark);
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
569 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
570 else
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 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
573 | (1 << marker::cond_break)))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
574 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
575 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
576 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
577 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
578 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
579 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
580 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
581 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
582 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
583
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
584
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
585 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
586 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
587 // Create a new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
588 QsciLexer *lexer = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
589
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
590 m_is_octave_file = false;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
591
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
592 // Find the required lexer from file extensions
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
593 if (m_file_name.endsWith (".m")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
594 || m_file_name.endsWith ("octaverc"))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
595 {
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
596 #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
597 lexer = new QsciLexerOctave ();
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
598 #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
599 lexer = new QsciLexerMatlab ();
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
600 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
601 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
602 #endif
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
603 m_is_octave_file = true;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
604 }
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 if (! lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
607 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
608 if (m_file_name.endsWith (".c")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
609 || m_file_name.endsWith (".cc")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
610 || m_file_name.endsWith (".cpp")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
611 || m_file_name.endsWith (".cxx")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
612 || m_file_name.endsWith (".c++")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
613 || m_file_name.endsWith (".h")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
614 || m_file_name.endsWith (".hh")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
615 || m_file_name.endsWith (".hpp")
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
616 || m_file_name.endsWith (".h++"))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
617 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
618 lexer = new QsciLexerCPP ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
619 }
29165
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
620 else if (m_file_name.endsWith (".java"))
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
621 {
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
622 lexer = new QsciLexerJava ();
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
623 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
624 else if (m_file_name.endsWith (".pl"))
24716
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 lexer = new QsciLexerPerl ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
627 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
628 else if (m_file_name.endsWith (".bat"))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
629 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
630 lexer = new QsciLexerBatch ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
631 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
632 else if (m_file_name.endsWith (".diff"))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
633 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
634 lexer = new QsciLexerDiff ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
635 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
636 else if (m_file_name.endsWith (".sh"))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
637 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
638 lexer = new QsciLexerBash ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
639 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
640 else if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
641 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
642 // new, not 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
643 #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
644 lexer = new QsciLexerOctave ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
645 m_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
646 #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
647 lexer = new QsciLexerMatlab ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
648 m_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
649 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
650 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
651 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
652 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
653 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
654 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
655 // other or no extension
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
656 lexer = new octave_txt_lexer ();
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 }
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 // Get any existing lexer
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
661 QsciLexer *old_lexer = m_edit_area->lexer ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
662
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
663 // 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
664 // 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
665 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
666 || 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
667 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
668 // Delete and set new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
669 if (old_lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
670 delete old_lexer;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
671 m_edit_area->setLexer (lexer);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
672
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
673 // Build information for auto completion (APIs)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
674 m_lexer_apis = new QsciAPIs (lexer);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
675
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
676 connect (this, SIGNAL (request_add_octave_apis (const QStringList&)),
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
677 this, SLOT (handle_add_octave_apis (const QStringList&)));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
678
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
679 // 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
680 update_lexer_settings ();
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 else
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 // Otherwise, delete the newly created lexer and
26369
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26346
diff changeset
685 // use the old, existing one.
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26346
diff changeset
686 delete lexer;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
687 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
688 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
689
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
690
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
691 // Update settings, which are lexer related and have to be updated
28788
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
692 // when
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
693 // a) the lexer changes,
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
694 // b) the settings have changed, or
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
695 // c) a package was loaded/unloaded
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
696 void file_editor_tab::update_lexer_settings (bool update_apis_only)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
697 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
698 QsciLexer *lexer = m_edit_area->lexer ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
699
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
700 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
701 gui_settings *settings = rmgr.get_settings ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
702
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
703 if (m_lexer_apis)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
704 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
705 m_lexer_apis->cancelPreparation (); // stop preparing if apis exists
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
706
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
707 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
708
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
709 // Get path to prepared api info (cache). Temporarily set the
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
710 // application name to 'octave' instead of 'GNU Octave' name for
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
711 // not having blanks in the path.
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
712 QString tmp_app_name = QCoreApplication::applicationName ();
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
713 QCoreApplication::setApplicationName ("octave"); // Set new name
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
714
24827
1e0718c1867c eliminate most Qt version checks
John W. Eaton <jwe@octave.org>
parents: 24738
diff changeset
715 #if defined (HAVE_QSTANDARDPATHS)
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
716 QString local_data_path
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
717 = QStandardPaths::writableLocation (QStandardPaths::CacheLocation);
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
718 #else
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
719 QString local_data_path
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
720 = QDesktopServices::storageLocation (QDesktopServices::CacheLocation);
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
721 #endif
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
722
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
723 QCoreApplication::setApplicationName ("octave"); // Set temp. name
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
724
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
725 m_prep_apis_path
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
726 = local_data_path + "/" + QString (OCTAVE_VERSION) + "/qsci/";
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
727
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
728 // get settings which infos are used for octave
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
729 bool octave_builtins
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
730 = settings->value (ed_code_completion_octave_builtins).toBool ();
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
731 bool octave_functions
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
732 = settings->value (ed_code_completion_octave_functions).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
733
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
734 QCoreApplication::setApplicationName (tmp_app_name); // Restore name
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
735
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
736 if (m_is_octave_file)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
737 {
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27455
diff changeset
738 // Keywords and Builtins do not change, this information can be
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
739 // 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
740 // 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
741 // 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
742
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
743 // Keywords are always used
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
744 m_prep_apis_file = m_prep_apis_path + lexer->lexer () + "_k";
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
745
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27455
diff changeset
746 // Builtins are only used if the user settings say so
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
747 if (octave_builtins)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
748 m_prep_apis_file += 'b';
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
749
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
750 if (octave_functions)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
751 m_prep_apis_file += 'f';
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
752
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
753 m_prep_apis_file += ".pap"; // final name of apis file
24716
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 // check whether the APIs info needs to be prepared and saved
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
756 QFileInfo apis_file = QFileInfo (m_prep_apis_file);
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
757
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
758 // 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
759 update_apis = ! apis_file.exists ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
760
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
761 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
762 {
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
763 // Functions may change frequently. Update the apis data
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
764 // 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
765 // 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
766 QDateTime apis_time = apis_file.lastModified ();
28788
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
767 if (update_apis_only
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
768 || QDateTime::currentDateTime () > apis_time.addSecs (180))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
769 update_apis = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
770 }
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
771
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
772 }
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
773 else
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
774 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
775 // No octave file, just add extension.
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
776 m_prep_apis_file = m_prep_apis_path + lexer->lexer () + ".pap";
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
777 }
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
778
26841
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
779 // Make sure the apis file is usable, otherwise the gui might crash,
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
780 // e.g., in case of max. number of opened files
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
781 QFile f (m_prep_apis_file);
26841
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
782
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
783 bool apis_usable = f.open (QIODevice::ReadOnly);
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
784 if (! apis_usable)
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
785 {
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
786 QDir ().mkpath (QFileInfo (f).absolutePath ());
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
787 apis_usable = f.open (QIODevice::WriteOnly);
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
788 }
26522
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
789 if (apis_usable)
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
790 f.close ();
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
791
27277
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 27276
diff changeset
792 if (apis_usable
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
793 && (update_apis || ! m_lexer_apis->loadPrepared (m_prep_apis_file)))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
794 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
795 // 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
796 // 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
797
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
798 // create raw apis info
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
799
28788
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
800 m_lexer_apis->clear (); // Clear current contents
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
801
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
802 if (m_is_octave_file)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
803 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
804 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
805 ([=] (interpreter& interp)
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
806 {
27405
646efbb5f407 avoid including builtin-defun-decls.h unless needed
John W. Eaton <jwe@octave.org>
parents: 27403
diff changeset
807 // INTERPRETER THREAD
646efbb5f407 avoid including builtin-defun-decls.h unless needed
John W. Eaton <jwe@octave.org>
parents: 27403
diff changeset
808
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
809 QStringList api_entries;
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
810
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
811 octave_value_list tmp = Fiskeyword ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
812 const Cell ctmp = tmp(0).cell_value ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
813 for (octave_idx_type i = 0; i < ctmp.numel (); i++)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
814 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
815 std::string kw = ctmp(i).string_value ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
816 api_entries.append (QString::fromStdString (kw));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
817 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
818
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
819 if (octave_builtins)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
820 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
821 symbol_table& symtab = interp.get_symbol_table ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
822
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
823 string_vector bfl = symtab.built_in_function_names ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
824
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
825 for (octave_idx_type i = 0; i < bfl.numel (); i++)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
826 api_entries.append (QString::fromStdString (bfl[i]));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
827 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
828
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
829
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
830 if (octave_functions)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
831 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
832 load_path& lp = interp.get_load_path ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
833
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
834 string_vector ffl = lp.fcn_names ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
835 string_vector afl = interp.autoloaded_functions ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
836
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
837 for (octave_idx_type i = 0; i < ffl.numel (); i++)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
838 api_entries.append (QString::fromStdString (ffl[i]));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
839
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
840 for (octave_idx_type i = 0; i < afl.numel (); i++)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
841 api_entries.append (QString::fromStdString (afl[i]));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
842 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
843
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
844 emit request_add_octave_apis (api_entries);
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
845 });
24716
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 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
848 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
849 for (int i = 1; i <= 3; i++)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
850 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
851 // Get list, split, and add to API.
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
852
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
853 QString keyword = QString (lexer->keywords (i));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
854
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
855 QStringList keyword_list
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
856 = keyword.split (QRegExp (R"(\s+)"));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
857
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
858 for (int j = 0; j < keyword_list.size (); j++)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
859 m_lexer_apis->add (keyword_list.at (j));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
860 }
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
861
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
862 emit api_entries_added ();
24716
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 }
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
28788
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
867 if (update_apis_only)
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
868 return; // We are done here
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
869
29162
bb6bb306b8a6 copy lexer settings from default settings file for new languages
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29155
diff changeset
870 rmgr.read_lexer_settings (lexer, settings);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
871
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
872 m_edit_area->setCaretForegroundColor (lexer->color (0));
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
873 m_edit_area->setIndentationGuidesForegroundColor (lexer->color (0));
24716
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 // 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
876 QColor bg = lexer->paper (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
877 QColor fg = lexer->color (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
878
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
879 // margin colors
29220
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
880 QColor bgm, fgm;
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
881
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
882 bgm = interpolate_color (bg, fg, 0.5, 0.2);
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
883 m_edit_area->setEdgeColor (bgm);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
884
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
885 m_edit_area->setMarkerForegroundColor (lexer->color (0));
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
886 m_edit_area->setMarginsForegroundColor (lexer->color (0));
29220
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
887
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
888 bgm = interpolate_color (bg, fg, 0.5, 0.125);
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
889 fgm = interpolate_color (bg, fg, 0.5, 0.25);
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
890 m_edit_area->setMarginsBackgroundColor (bgm);
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
891 m_edit_area->setFoldMarginColors (bgm, fgm);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
892
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
893 // 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
894 // 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
895 QColor hg = QApplication::palette ().color (QPalette::Highlight);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
896 m_edit_area->set_selection_marker_color (hg);
24716
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 // fix line number width with respect to the font size of the lexer and
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
899 // set the line numbers font depending on the lexer's font
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
900 if (settings->value (ed_show_line_numbers).toBool ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
901 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
902 // Line numbers width
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
903 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
904
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
905 // Line numbers font
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
906 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
907 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
908 font_size = font_size
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
909 + settings->value (ed_line_numbers_size).toInt ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
910 if (font_size < 4)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
911 font_size = 4;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
912 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
913
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
914 m_edit_area->setMarginsFont (line_numbers_font);
24716
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 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
917 m_edit_area->setMarginWidth (2,0);
24716
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 // function for adding entries to the octave lexer's APIs
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
921 void file_editor_tab::handle_add_octave_apis (const QStringList& api_entries)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
922 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
923 for (int idx = 0; idx < api_entries.size (); idx++)
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
924 m_lexer_apis->add (api_entries.at (idx));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
925
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
926 emit api_entries_added ();
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
927 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
928
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
929 void file_editor_tab::handle_api_entries_added (void)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
930 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
931 // disconnect slot for saving prepared info if already connected
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
932 disconnect (m_lexer_apis, SIGNAL (apiPreparationFinished ()),
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
933 nullptr, nullptr);
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
934
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
935 // check whether path for prepared info exists or can be created
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
936 if (QDir ("/").mkpath (m_prep_apis_path))
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
937 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
938 // path exists, apis info can be saved there
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
939 connect (m_lexer_apis, SIGNAL (apiPreparationFinished ()),
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
940 this, SLOT (save_apis_info ()));
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
941 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
942
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
943 m_lexer_apis->prepare (); // prepare apis info
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
944 }
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 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
947 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
948 m_lexer_apis->savePrepared (m_prep_apis_file);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
949 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
950
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
951 // 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
952 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
953 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
954 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
955 return;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
956 m_edit_area->setFocus ();
27787
5169ed0ff0f0 only one find dialog for all editor tabs (bug #57238)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27672
diff changeset
957 emit edit_area_changed (m_edit_area); // update the edit area in find dlg
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
958 }
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 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
961 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
962 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
963 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
964
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
965 m_edit_area->context_help_doc (doc);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
968 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
969 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
970 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
971 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
972
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
973 m_edit_area->context_edit ();
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
976 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
977 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
978 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
979 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
980
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
981 save_file (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
982 }
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 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
985 bool remove_on_success)
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)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
988 return;
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 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
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::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
994 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
995 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
996 return;
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 save_file_as ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
999 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1000
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1001 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
1002 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1003 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1004 return;
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 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
1007
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1008 QPrintDialog printDlg (printer, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1009
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1010 if (printDlg.exec () == QDialog::Accepted)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1011 printer->printRange (m_edit_area);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1012
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1013 delete printer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1014 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1015
26873
9ec36417c262 debug step starts script if not already running in debug mode (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26855
diff changeset
1016 void file_editor_tab::run_file (const QWidget *ID, bool step_into)
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 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1019 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1020
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1021 if (m_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
1022 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1023 save_file (m_file_name); // save file dialog
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1024 if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1025 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
1026 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1027
26873
9ec36417c262 debug step starts script if not already running in debug mode (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26855
diff changeset
1028 if (step_into)
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1029 {
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1030 // Get current first breakpoint and set breakpoint waiting for
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
1031 // the returned line number. Store whether to remove this breakpoint
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1032 // afterwards.
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1033 int first_bp_line
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1034 = m_edit_area->markerFindNext (0, (1 << marker::breakpoint)) + 1;
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1035
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1036 // Set flag for storing the line number of the breakpoint
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1037 m_breakpoint_info.remove_next = true;
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1038 m_breakpoint_info.do_not_remove_line = first_bp_line;
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1039
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1040 // Add breakpoint, storing its line number
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1041 handle_request_add_breakpoint (1, QString ());
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1042 }
26873
9ec36417c262 debug step starts script if not already running in debug mode (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26855
diff changeset
1043
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1044 QFileInfo info (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1045 emit run_file_signal (info);
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1048 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
1049 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1050 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1051 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1052
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1053 m_edit_area->context_run ();
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1056 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
1057 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1058 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1059 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1060
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1061 int line, cur;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1062 m_edit_area->getCursorPosition (&line, &cur);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1063
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1064 if (m_edit_area->markersAtLine (line) & (1 << marker::bookmark))
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1065 m_edit_area->markerDelete (line, marker::bookmark);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1066 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1067 m_edit_area->markerAdd (line, marker::bookmark);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1070 // 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
1071 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1072 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
1073 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1074 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1075 return;
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 int line, cur;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1078 m_edit_area->getCursorPosition (&line, &cur);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1079
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1080 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
1081
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1082 int nextline = m_edit_area->markerFindNext (line, (1 << marker::bookmark));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1083
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1084 // Wrap.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1085 if (nextline == -1)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1086 nextline = m_edit_area->markerFindNext (1, (1 << marker::bookmark));
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1087
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1088 m_edit_area->setCursorPosition (nextline, 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1089 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1090
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1091 // 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
1092 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1093 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
1094 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1095 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1096 return;
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 int line, cur;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1099 m_edit_area->getCursorPosition (&line, &cur);
24716
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 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
1102
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1103 int prevline = m_edit_area->markerFindPrevious (line, (1 << marker::bookmark));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1104
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1105 // 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
1106 if (prevline == -1)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1107 prevline = m_edit_area->markerFindPrevious (m_edit_area->lines (),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1108 (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1109
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1110 m_edit_area->setCursorPosition (prevline, 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1111 }
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 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
1114 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1115 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
1116 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1117
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1118 m_edit_area->markerDeleteAll (marker::bookmark);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1121 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
1122 const QString& cond)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1123 : 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
1124 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1125 QFileInfo file_info (fname);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1126
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1127 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
1128 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
1129
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1130 // 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
1131 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
1132
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1133 dir = q_dir.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1134 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
1135
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1136 // 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
1137 // 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
1138
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1139 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
1140
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1141 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
1142 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1143 if (dir[pos+1] == '@')
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 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
1146
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1147 dir = dir.substr (0, pos);
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 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1152 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
1153 const QString& condition)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1154 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1155 bp_info info (m_file_name, line, condition);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1156
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1157 add_breakpoint_event (info);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1160 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
1161 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1162 bp_info info (m_file_name, line);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1163
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1164 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
1165 ([=] (interpreter& interp)
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1166 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1167 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1168
27396
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1169 load_path& lp = interp.get_load_path ();
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1170
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1171 bp_table::intmap line_info;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1172 line_info[0] = info.line;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1173
27396
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1174 if (lp.contains_file_in_dir (info.file, info.dir))
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1175 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1176 tree_evaluator& tw = interp.get_evaluator ();
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1177
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1178 bp_table& bptab = tw.get_bp_table ();
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1179
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1180 bptab.remove_breakpoint (info.function_name, line_info);
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1181 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1182 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1183 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1184
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1185 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
1186 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1187 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1188 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1189
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1190 int editor_linenr, cur;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1191 m_edit_area->getCursorPosition (&editor_linenr, &cur);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1192
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1193 if (m_edit_area->markersAtLine (editor_linenr) & (1 << marker::breakpoint))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1194 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
1195 else
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 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1198 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
1199 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1200 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1201
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1202 // 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
1203 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1204 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
1205 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1206 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1207 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1208
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1209 int line, cur;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1210 m_edit_area->getCursorPosition (&line, &cur);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1211
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1212 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
1213
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1214 int nextline = m_edit_area->markerFindNext (line, (1 << marker::breakpoint));
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1215 int nextcond = m_edit_area->markerFindNext (line, (1 << marker::cond_break));
24716
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 // 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
1218 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
1219 nextline = nextcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1220
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1221 m_edit_area->setCursorPosition (nextline, 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1222 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1223
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1224 // 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
1225 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1226 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
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 int line, cur, prevline, prevcond;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1232 m_edit_area->getCursorPosition (&line, &cur);
24716
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 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
1235
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1236 prevline = m_edit_area->markerFindPrevious (line, (1 << marker::breakpoint));
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1237 prevcond = m_edit_area->markerFindPrevious (line, (1 << marker::cond_break));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1238
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1239 // 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
1240 if (prevcond != -1 && prevcond > prevline)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1241 prevline = prevcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1242
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1243 m_edit_area->setCursorPosition (prevline, 0);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1246 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
1247 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1248 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1249 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1250
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1251 bp_info info (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1252
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1253 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
1254 ([=] (interpreter& interp)
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1255 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1256 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1257
27396
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1258 load_path& lp = interp.get_load_path ();
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1259
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1260 if (lp.contains_file_in_dir (info.file, info.dir))
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1261 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1262 tree_evaluator& tw = interp.get_evaluator ();
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1263
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1264 bp_table& bptab = tw.get_bp_table ();
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1265
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1266 bptab.remove_all_breakpoints_in_file (info.function_name, true);
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1267 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1268 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1269 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1270
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1271 void file_editor_tab::scintilla_command (const QWidget *ID,
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1272 unsigned int sci_msg)
24716
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 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1275 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1276
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1277 m_edit_area->SendScintilla (sci_msg);
24716
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
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1280 void file_editor_tab::comment_selected_text (const QWidget *ID,
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1281 bool input_str)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1282 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1283 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1284 return;
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 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
1287 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1288
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1289 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
1290 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1291 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1292 return;
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 do_comment_selected_text (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1295 }
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 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
1298 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1299 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1300 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1301
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1302 do_indent_selected_text (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1303 }
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 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
1306 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1307 if (ID != this)
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 do_indent_selected_text (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1311 }
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 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
1314 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1315 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1316 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1317
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1318 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
1319 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1320
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1321 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
1322 QsciScintilla::EolMode eol_mode)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1323 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1324 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1325 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1326
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1327 m_edit_area->convertEols (eol_mode);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1328 m_edit_area->setEolMode (eol_mode);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1329 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1330 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1331
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1332 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
1333 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1334 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1335 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1336
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1337 m_edit_area->zoomIn (1);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1338 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1339 }
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 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
1342 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1343 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1344 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1345
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1346 m_edit_area->zoomOut (1);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1347 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1348 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1349
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1350 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
1351 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1352 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1353 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1354
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1355 m_edit_area->zoomTo (0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1356 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1357 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1358
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1359 void file_editor_tab::add_breakpoint_event (const bp_info& info)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1360 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1361 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
1362 ([=] (interpreter& interp)
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1363 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1364 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1365
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
1366 // FIXME: note duplication with the code in
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
1367 // handle_context_menu_break_condition.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
1368
27396
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1369 load_path& lp = interp.get_load_path ();
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1370
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1371 bp_table::intmap line_info;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1372 line_info[0] = info.line;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1373
27396
930c0fbc003b move qt_interpreter_events::file_in_path to load_path::contains_file_in_dir
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
1374 if (lp.contains_file_in_dir (info.file, info.dir))
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1375 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1376 tree_evaluator& tw = interp.get_evaluator ();
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1377
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1378 bp_table& bptab = tw.get_bp_table ();
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1379
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1380 bp_table::intmap bpmap
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
1381 = bptab.add_breakpoint (info.function_name, "", line_info,
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
1382 info.condition);
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1383
27397
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1384 if (! bpmap.empty ())
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1385 {
27397
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1386 bp_table::intmap::iterator bp_it = bpmap.begin ();
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1387
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1388 int remove_line = bp_it->second;
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1389
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1390 emit maybe_remove_next (remove_line);
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1391 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1392 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1393 });
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1394 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1395
27397
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1396 void file_editor_tab::handle_remove_next (int remove_line)
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1397 {
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1398 // Store some info breakpoint
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1399 if (m_breakpoint_info.remove_next)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1400 {
27397
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1401 m_breakpoint_info.remove_line = remove_line;
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1402 m_breakpoint_info.remove_next = false;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1403 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1406 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
1407 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1408 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1409 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1410
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1411 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
1412 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1413 // 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
1414 // 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
1415 m_bp_restore_count--;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1416 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1417 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1418
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1419 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
1420 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1421 bool ok = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1422 int index;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1423 m_edit_area->getCursorPosition (&line, &index);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1424 line = QInputDialog::getInt (m_edit_area, tr ("Goto line"),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1425 tr ("Line number"), line+1, 1,
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1426 m_edit_area->lines (), 1, &ok);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1427 if (ok)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1428 m_edit_area->setCursorPosition (line-1, 0);
24716
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 else // go to given line without dialog
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1431 m_edit_area->setCursorPosition (line-1, 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1432
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1433 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
1434 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1435
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1436 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
1437 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1438 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1439 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1440
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1441 if (select)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1442 m_edit_area->selectToMatchingBrace ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1443 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1444 m_edit_area->moveToMatchingBrace ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1445 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1446
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1447 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
1448 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1449 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1450 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1451
28382
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
1452 m_autoc_active = true;
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
1453
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1454 QsciScintilla::AutoCompletionSource s = m_edit_area->autoCompletionSource ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1455 switch (s)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1456 {
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1457 case QsciScintilla::AcsAll:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1458 m_edit_area->autoCompleteFromAll ();
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1459 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1460
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1461 case QsciScintilla::AcsAPIs:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1462 m_edit_area->autoCompleteFromAPIs ();
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1463 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1464
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1465 case QsciScintilla::AcsDocument:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1466 m_edit_area->autoCompleteFromDocument ();
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1467 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1468
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1469 case QsciScintilla::AcsNone:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1470 break;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1471 }
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 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
1475 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1476 // FIXME:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1477 m_edit_area->beginUndoAction ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1478
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1479 if (m_edit_area->hasSelectedText ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1480 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1481 int lineFrom, lineTo, colFrom, colTo;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1482 m_edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1483
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1484 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
1485 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1486
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1487 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
1488 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1489 if (indent)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1490 m_edit_area->indent (i);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1491 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1492 m_edit_area->unindent (i);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1493 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1494 //set selection on (un)indented section
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1495 m_edit_area->setSelection (lineFrom, 0, lineTo,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1496 m_edit_area->text (lineTo).length ()-1);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1497 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1498 else
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 int cpline, col;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1501 m_edit_area->getCursorPosition (&cpline, &col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1502 if (indent)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1503 m_edit_area->indent (cpline);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1504 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1505 m_edit_area->unindent (cpline);
24716
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
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1508 m_edit_area->endUndoAction ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1509 }
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 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
1512 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1513 m_edit_area->beginUndoAction ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1514
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1515 int lineFrom, lineTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1516
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1517 if (m_edit_area->hasSelectedText ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1518 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1519 int colFrom, colTo;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1520 m_edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
24716
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 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
1523 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1524 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1525 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1526 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1527 int col;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1528 m_edit_area->getCursorPosition (&lineFrom, &col);
24716
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 lineTo = lineFrom;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1531 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1532
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1533 m_edit_area->smart_indent_line_or_selected_text (lineFrom, lineTo);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1534
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1535 m_edit_area->endUndoAction ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1536 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1537
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1538 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
1539 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1540 QRegExp rxc;
27914
a044e50c8dcb Streamline QRegExp instances in libgu.
Rik <rik@octave.org>
parents: 27893
diff changeset
1541 QString ws = "^(?:[ \\t]*)";
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1542 QStringList comment_str = m_edit_area->comment_string (comment);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1543 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
1544
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1545 if (comment)
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 if (input_str)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1548 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1549 bool ok;
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
1550 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
1551 gui_settings *settings = rmgr.get_settings ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1552
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1553 used_comment_str
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1554 = QInputDialog::getText (this, tr ("Comment selected text"),
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1555 tr ("Comment string to use:\n"),
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1556 QLineEdit::Normal,
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1557 settings->value (ed_last_comment_str, comment_str.at (0)).toString (),
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1558 &ok);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1559
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1560 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
1561 return; // No input, do nothing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1562 else
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
1563 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
1564 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1565 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1566 else
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 // Uncommenting (several strings possible)
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 // Sort strings according their length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1571 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
1572 bool inserted;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1573
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1574 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
1575 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1576 inserted = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1577 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
1578 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1579 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
1580 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1581 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
1582 inserted = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1583 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1584 }
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 if (! inserted)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1587 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
1588 }
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 // Create regular expression
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1591 QString regexp;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1592 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
1593 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1594 if (i > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1595 regexp = regexp + QString ("|");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1596 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
1597 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1598 rxc = QRegExp (ws + "(" + regexp + ")");
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1601 // Do the commenting/uncommenting
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1602 int len = 0, lenc = 0;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1603 m_edit_area->beginUndoAction ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1604
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1605 if (m_edit_area->hasSelectedText ())
24716
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 int lineFrom, lineTo, colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1608 int change_col_from = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1609 int change_col_to = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1610 bool removed;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1611
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1612 m_edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1613
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1614 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
1615 lineTo--; // stop at line above
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 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
1618 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1619 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1620 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1621 m_edit_area->insertAt (used_comment_str, i, 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1622 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1623 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1624 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1625 QString line (m_edit_area->text (i));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1626 if ((removed = line.contains (rxc)))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1627 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1628 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1629 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
1630 lenc = matched_text.remove (QRegExp (ws)).length (); // only comment string
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1631 m_edit_area->setSelection (i, len-lenc, i, len);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1632 m_edit_area->removeSelectedText ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1633 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1634
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1635 // 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
1636 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
1637 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
1638 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
1639 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
1640 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1641 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1642
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1643 // update the selection area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1644 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1645 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1646 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
1647 if (colTo > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1648 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
1649 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1650 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
1651 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1652 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1653 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1654 if (colTo == 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1655 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
1656 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
1657 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
1658 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1659
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1660 // set updated selection area
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1661 m_edit_area->setSelection (lineFrom, colFrom, lineTo, colTo);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1662 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1663 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1664 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1665 int cpline, col;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1666 m_edit_area->getCursorPosition (&cpline, &col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1667 if (comment)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1668 m_edit_area->insertAt (used_comment_str, cpline, 0);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1669 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1670 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1671 QString line (m_edit_area->text (cpline));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1672 if (line.contains (rxc))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1673 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1674 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1675 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
1676 lenc = matched_text.remove (QRegExp (ws)).length (); // only comment string
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1677 m_edit_area->setSelection (cpline, len-lenc, cpline, len);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1678 m_edit_area->removeSelectedText ();
24716
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1681 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1682 m_edit_area->endUndoAction ();
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1685 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
1686 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1687 QString title ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1688 QString tooltip ("");
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 if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1691 title = tr ("<unnamed>");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1692 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1693 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1694 if (m_long_title)
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1695 title = m_file_name;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1696 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1697 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1698 QFileInfo file (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1699 title = file.fileName ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1700 tooltip = m_file_name;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1701 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1702 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1703
27053
1bdfd2b523c9 use tab icon for indicating a modified editor file (bug #56158)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27037
diff changeset
1704 emit file_name_changed (title, tooltip, modified);
24716
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::handle_copy_available (bool enableCopy)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1708 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1709 m_copy_available = enableCopy;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1710 emit editor_state_changed (m_copy_available, m_is_octave_file);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1711 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1712
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1713 // 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
1714 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
1715 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1716 dlg->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1717 if (modal)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1718 dlg->exec ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1719 else
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 dlg->setWindowModality (Qt::NonModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1722 dlg->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1723 }
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
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1726 int file_editor_tab::check_file_modified (bool remove)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1727 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1728 int decision = QMessageBox::Yes;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1729 if (m_edit_area->isModified ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1730 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1731 // 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
1732 // editor tab can't be made parent because it may be deleted depending
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1733 // upon the response. Instead, change the m_edit_area to read only.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1734 QMessageBox::StandardButtons buttons = QMessageBox::Save |
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1735 QMessageBox::Discard |
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1736 QMessageBox::Cancel;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1737
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1738 // 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
1739 // 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
1740 // 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
1741 QString available_actions =
19714
21015ca26566 Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19697
diff changeset
1742 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
1743
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1744 QString file;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1745 if (valid_file_name ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1746 file = m_file_name;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1747 else
17973
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1748 file = tr ("<unnamed>");
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1749
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1750 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1751 = 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
1752 tr ("The file\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1753 " %1\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1754 "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
1755 "%2").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1756 arg (file). arg (available_actions),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1757 buttons, qobject_cast<QWidget *> (parent ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1758
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1759 msgBox->setDefaultButton (QMessageBox::Save);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1760 m_edit_area->setReadOnly (true);
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1761
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1762 decision = msgBox->exec (); // show_dialog (msgBox, true);
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1763
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1764 if (decision == QMessageBox::Cancel)
27633
fd009322dd9f eliminate static variable in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27629
diff changeset
1765 m_edit_area->setReadOnly (false);
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1766 else if (decision == QMessageBox::Save)
27651
c9ebcb9050b4 fix broken storing of editor session data at shutdown
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27639
diff changeset
1767 save_file (m_file_name, remove, false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1768 else
27651
c9ebcb9050b4 fix broken storing of editor session data at shutdown
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27639
diff changeset
1769 emit tab_ready_to_close ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1770 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1771 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1772 {
27651
c9ebcb9050b4 fix broken storing of editor session data at shutdown
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27639
diff changeset
1773 emit tab_ready_to_close ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1774 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1775
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1776 return decision;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1777 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1778
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1779 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
1780 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1781 m_edit_area->setModified (modified);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1782 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1783
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1784 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
1785 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1786 // reset the possibly still existing read only state
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1787 m_edit_area->setReadOnly (false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1788
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
1789 // if we are in this slot and the list of breakpoints is not empty,
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1790 // 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
1791 // 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
1792 // canceled this closing late on.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1793 check_restore_breakpoints ();
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1796 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
1797 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1798 if (! m_bp_lines.isEmpty ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1799 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1800 // 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
1801 // 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
1802 remove_all_breakpoints (this);
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 // and set breakpoints at the new linenumbers
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1805 m_bp_restore_count = m_bp_lines.length ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1806 for (int i = 0; i < m_bp_lines.length (); i++)
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1807 handle_request_add_breakpoint (m_bp_lines.value (i) + 1,
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1808 m_bp_conditions.value (i));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1809
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1810 // Keep the list of breakpoints empty, except after explicit requests.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1811 m_bp_lines.clear ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1812 m_bp_conditions.clear ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1813 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1814 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1815
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1816 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
1817 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1818 // get the absolute path
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1819 QFileInfo file_info = QFileInfo (fileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1820 QString file_to_load;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1821 if (file_info.exists ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1822 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
1823 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1824 file_to_load = fileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1825 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
1826 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
1827 return file.errorString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1828
26131
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1829 int col = 0, line = 0;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1830 if (fileName == m_file_name)
26131
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1831 {
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1832 // We have to reload the current file, thus get current cursor position
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1833 line = m_line;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1834 col = m_col;
26131
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1835 }
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1836
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1837 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
1838
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1839 // read the file binary, decoding later
28134
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1840 QByteArray text_data = file.readAll ();
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1841
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1842 // remove newline at end of file if we add one again when saving
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1843 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1844 gui_settings *settings = rmgr.get_settings ();
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1845
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1846 if (settings->value (ed_force_newline).toBool ())
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1847 {
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1848 const QByteArray eol_lf = QByteArray (1,0x0a);
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1849 const QByteArray eol_cr = QByteArray (1,0x0d);
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1850
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1851 if (text_data.endsWith (eol_lf))
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1852 text_data.chop (1); // remove LF
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1853
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1854 if (text_data.endsWith (eol_cr)) // remove CR (altogether CRLF, too)
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1855 text_data.chop (1);
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1856 }
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1857
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1858 // decode
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1859 QTextCodec::ConverterState st;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1860 QTextCodec *codec = QTextCodec::codecForName (m_encoding.toLatin1 ());
26172
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1861 if (codec == nullptr)
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1862 codec = QTextCodec::codecForLocale ();
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1863
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1864 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
1865 text_data.size(), &st);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1866
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1867 // Decoding with invalid characters?
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1868 if (st.invalidChars > 0)
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1869 {
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1870 // Set read only
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1871 m_edit_area->setReadOnly (true);
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1872
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1873 // 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
1874 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
1875 "%1\n"
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1876 "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
1877 "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
1878 "cause data loss!")
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1879 .arg (file_to_load).arg (m_encoding);
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1880 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
1881 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
1882 msg_box->setText (msg);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1883 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
1884 msg_box->addButton (tr ("&Edit anyway"), QMessageBox::YesRole);
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1885 msg_box->addButton (tr ("Chan&ge encoding"), QMessageBox::AcceptRole);
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1886 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
1887
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1888 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
1889 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
1890
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1891 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
1892 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
1893 msg_box->show ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1894 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1895
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1896 m_edit_area->setText (text);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1897 m_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
1898
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1899 QApplication::restoreOverrideCursor ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1900
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1901 m_copy_available = false; // no selection yet available
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1902 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
1903 update_window_title (false); // window title (no modification)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1904 m_edit_area->setModified (false); // loaded file is not modified yet
24716
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 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1907
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1908 m_edit_area->setCursorPosition (line, col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1909
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1910 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1911 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1912
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1913 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
1914 {
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1915 QString txt = btn->text ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1916
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1917 if (txt == tr ("&Close"))
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1918 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1919 // Just close the file
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1920 close ();
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1921 return;
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1922 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1923
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1924 if (txt == tr ("Chan&ge encoding"))
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1925 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1926 // Dialog for reloading the file with another encoding
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1927 QDialog dlg;
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1928 dlg.setWindowTitle (tr ("Select new default encoding"));
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1929
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1930 QLabel *text
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1931 = new QLabel (tr ("Please select a new encoding\n"
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1932 "for reloading the current file.\n\n"
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1933 "This does not change the default encoding.\n"));
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1934
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1935 QComboBox *enc_combo = new QComboBox ();
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
1936 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
1937 rmgr.combo_encoding (enc_combo);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1938 m_new_encoding = enc_combo->currentText ();
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1939 connect (enc_combo, SIGNAL (currentTextChanged (const QString&)),
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1940 this, SLOT (handle_current_enc_changed (const QString&)));
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1941
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1942 QDialogButtonBox *buttons
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1943 = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1944 Qt::Horizontal);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1945 connect (buttons, SIGNAL (accepted ()), &dlg, SLOT (accept ()));
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1946 connect (buttons, SIGNAL (rejected ()), &dlg, SLOT (reject ()));
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1947
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1948 QGridLayout *main_layout = new QGridLayout;
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1949 main_layout->setSizeConstraint (QLayout::SetFixedSize);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1950 main_layout->addWidget (text, 0, 0);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1951 main_layout->addWidget (enc_combo, 1, 0);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1952 main_layout->addWidget (buttons, 2, 0);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1953 dlg.setLayout (main_layout);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1954
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1955 int answer = dlg.exec ();
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1956
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1957 if (answer == QDialog::Accepted)
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1958 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1959 // Reload the file with new encoding but using the same tab
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1960 QString reload_file_name = m_file_name; // store file name
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1961 m_file_name = ""; // force reuse of this tab when opening a new file
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1962 emit request_open_file (reload_file_name, m_new_encoding);
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1963 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1964 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1965
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1966 // Continue editing, set writable again
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1967 m_edit_area->setReadOnly (false);
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1968 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1969
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1970 void file_editor_tab::handle_current_enc_changed (const QString& enc)
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1971 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1972 m_new_encoding = enc;
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1973 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1974
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1975 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
1976 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1977 QByteArray text = m_edit_area->text ().toLatin1 ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1978
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1979 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
1980 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
1981 QByteArray eol_crlf = eol_cr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1982 eol_crlf.append (eol_lf);
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 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
1985 int count_lf = text.count (eol_lf) - count_crlf; // isolated lf
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
1986 int count_cr = text.count (eol_cr) - count_crlf; // isolated cr
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1987
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
1988 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
1989 gui_settings *settings = rmgr.get_settings ();
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1990 QsciScintilla::EolMode eol_mode
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
1991 = static_cast<QsciScintilla::EolMode> (settings->value (ed_default_eol_mode).toInt ());
24716
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 int count_max = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1994
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1995 if (count_crlf > count_max)
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 eol_mode = QsciScintilla::EolWindows;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1998 count_max = count_crlf;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1999 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2000 if (count_lf > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2001 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2002 eol_mode = QsciScintilla::EolUnix;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2003 count_max = count_lf;
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 if (count_cr > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2006 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2007 eol_mode = QsciScintilla::EolMac;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2008 }
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 return eol_mode;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2011 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2012
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2013 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
2014 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2015 switch (m_edit_area->eolMode ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2016 {
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
2017 case QsciScintilla::EolWindows:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2018 m_eol_indicator->setText ("CRLF");
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
2019 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
2020 case QsciScintilla::EolMac:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2021 m_eol_indicator->setText ("CR");
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
2022 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
2023 case QsciScintilla::EolUnix:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2024 m_eol_indicator->setText ("LF");
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
2025 break;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2026 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2027 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2028
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2029 void file_editor_tab::update_breakpoints ()
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2030 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2031 if (m_file_name.isEmpty ())
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2032 return;
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2033
27255
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2034 // Create and queue the command object.
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2035
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
2036 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
2037 ([=] (interpreter& interp)
27255
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2038 {
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2039 // INTERPRETER THREAD
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2040
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2041 octave_value_list argout = Fdbstatus (interp, ovl (), 1);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2042
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2043 connect (this, SIGNAL (update_breakpoints_signal (const octave_value_list&)),
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2044 this, SLOT (update_breakpoints_handler (const octave_value_list&)),
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2045 Qt::QueuedConnection);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2046
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2047 emit update_breakpoints_signal (argout);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2048 });
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2049 }
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2050
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2051 void file_editor_tab::update_breakpoints_handler (const octave_value_list& argout)
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2052 {
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2053 octave_map dbg = argout(0).map_value ();
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2054 octave_idx_type n_dbg = dbg.numel ();
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2055
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2056 Cell file = dbg.contents ("file");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2057 Cell line = dbg.contents ("line");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2058 Cell cond = dbg.contents ("cond");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2059
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2060 for (octave_idx_type i = 0; i < n_dbg; i++)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2061 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2062 if (file (i).string_value () == m_file_name.toStdString ())
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2063 do_breakpoint_marker (true, this, line (i).int_value (),
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2064 QString::fromStdString (cond (i).string_value ()));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2065 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2066 }
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 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
2069 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2070 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
2071
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
2072 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
2073 gui_settings *settings = rmgr.get_settings ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2074
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2075 // 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
2076 // missing in the settings
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2077 m_edit_area->setEolMode (static_cast<QsciScintilla::EolMode> (settings->value (ed_default_eol_mode).toInt ()));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2078
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2079 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2080
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2081 update_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2082
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2083 m_edit_area->setText (commands);
29201
6695a6bf4836 mark script created with commands from history as modified
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29177
diff changeset
2084 m_edit_area->setModified (!commands.isEmpty ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2085 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2086
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2087 void file_editor_tab::confirm_dbquit_and_save (const QString& file_to_save,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2088 const QString& base_name,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2089 bool remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2090 bool restore_breakpoints)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2091 {
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2092 int ans = QMessageBox::question (nullptr, tr ("Debug or Save"),
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2093 tr ("This file is currently being executed.\n"
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2094 "Quit debugging and save?"),
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2095 QMessageBox::Save | QMessageBox::Cancel);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2096
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2097 if (ans == QMessageBox::Save)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2098 {
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2099 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
2100 ([=] (interpreter& interp)
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2101 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2102 // INTERPRETER THREAD
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2103
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2104 tree_evaluator& tw = interp.get_evaluator ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2105
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2106 tw.dbquit (true);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2107
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2108 command_editor::interrupt (true);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2109
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2110 std::string std_base_name = base_name.toStdString ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2111
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2112 symbol_table& symtab = interp.get_symbol_table ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2113
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2114 symtab.clear_user_function (std_base_name);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2115
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2116 emit do_save_file_signal (file_to_save, remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2117 restore_breakpoints);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2118 });
24716
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2121
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2122 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
2123 bool remove_on_success,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2124 bool restore_breakpoints)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2125 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2126 // 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
2127 // should be performed.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2128 if (! valid_file_name (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2129 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2130 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
2131 return;
24716
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
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2134 m_encoding = m_new_encoding; // consider a possible new encoding
26393
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2135
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2136 // set the desired codec (if suitable for contents)
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2137 QTextCodec *codec = check_valid_codec ();
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2138 if (! codec)
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2139 return; // No valid codec
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2140
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2141 // Get a list of breakpoint line numbers, before exiting debug mode
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2142 // and clearing function in interpreter_event action below.
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2143
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2144 emit report_marker_linenr (m_bp_lines, m_bp_conditions);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2145
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2146 // 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
2147 QFileInfo file_info = QFileInfo (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2148 QString file_to_save;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2149 if (file_info.exists ())
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 file_to_save = file_info.canonicalFilePath ();
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2152 QString base_name = file_info.baseName ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2153
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2154 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
2155 ([=] (interpreter& interp)
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2156 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2157 // INTERPRETER THREAD
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2158
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2159 // Force reloading of a file after it is saved.
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2160 // This is needed to get the right line numbers for
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2161 // breakpoints (bug #46632).
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2162
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2163 tree_evaluator& tw = interp.get_evaluator ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2164
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2165 symbol_table& symtab = interp.get_symbol_table ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2166
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2167 std::string std_base_name = base_name.toStdString ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2168
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2169 if (tw.in_debug_repl ())
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2170 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2171 octave_value sym;
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2172 try
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2173 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2174 sym = symtab.find_user_function (std_base_name);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2175 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 29162
diff changeset
2176 catch (const execution_exception&)
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2177 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
2178 interp.recover_from_exception ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
2179
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2180 // Ignore syntax error. It was in the old file on disk;
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2181 // the user may have fixed it already.
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2182 }
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2183
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2184 // Return early if this file is not loaded in the symbol table
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2185 if (! sym.is_defined () || ! sym.is_user_code ())
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2186 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2187 emit do_save_file_signal (file_to_save, remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2188 restore_breakpoints);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2189 return;
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2190 }
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2191
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2192 octave_user_code *fcn = sym.user_code_value ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2193
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2194 std::string full_name = file_to_save.toStdString ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2195
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2196 if (sys::canonicalize_file_name (full_name)
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2197 != sys::canonicalize_file_name (fcn->fcn_file_name ()))
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2198 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2199 emit do_save_file_signal (file_to_save, remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2200 restore_breakpoints);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2201 return;
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2202 }
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2203
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2204 // If this file is loaded, check that we aren't currently
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2205 // running it.
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2206 // FIXME: is there a better way to get this info?
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2207
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2208 octave_idx_type curr_frame = -1;
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2209
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2210 octave_map stk = tw.backtrace (curr_frame, false);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2211
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2212 Cell names = stk.contents ("name");
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2213
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2214 for (octave_idx_type i = names.numel () - 1; i >= 0; i--)
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2215 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2216 if (names(i).string_value () == std_base_name)
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2217 {
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2218 emit confirm_dbquit_and_save_signal
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2219 (file_to_save, base_name, remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2220 restore_breakpoints);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2221 return;
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2222 }
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2223 }
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2224 }
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2225
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2226 symtab.clear_user_function (std_base_name);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2227
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2228 emit do_save_file_signal (file_to_save, remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2229 restore_breakpoints);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2230 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2231 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2232 else
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2233 emit do_save_file_signal (saveFileName, remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2234 restore_breakpoints);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2235 }
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2236
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2237 void file_editor_tab::do_save_file (const QString& file_to_save,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2238 bool remove_on_success,
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2239 bool restore_breakpoints)
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2240 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2241 QFile file (file_to_save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2242
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2243 // stop watching file
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2244 QStringList trackedFiles = m_file_system_watcher.files ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2245 if (trackedFiles.contains (file_to_save))
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2246 m_file_system_watcher.removePath (file_to_save);
24716
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 // open the file for writing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2249 if (! file.open (QIODevice::WriteOnly))
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 // 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
2252 // watched previously.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2253 if (trackedFiles.contains (file_to_save))
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2254 m_file_system_watcher.addPath (file_to_save);
24716
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 // 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
2257 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2258 = new QMessageBox (QMessageBox::Critical,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2259 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2260 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
2261 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
2262 QMessageBox::Ok, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2263 show_dialog (msgBox, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2264
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2265 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2266 }
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 // 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
2269
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2270 // write the file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2271 QTextStream out (&file);
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2272
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2273 // set the desired codec (if suitable for contents)
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2274 QTextCodec *codec = check_valid_codec ();
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2275 if (! codec)
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2276 return; // No valid codec
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2277
28134
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
2278 // Remove trailing white spaces if desired
28132
4cfe24f56336 add editor prefs for forcing coding standards (bug #57860, bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28118
diff changeset
2279 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
4cfe24f56336 add editor prefs for forcing coding standards (bug #57860, bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28118
diff changeset
2280 gui_settings *settings = rmgr.get_settings ();
4cfe24f56336 add editor prefs for forcing coding standards (bug #57860, bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28118
diff changeset
2281
28134
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
2282 if (settings->value (ed_rm_trailing_spaces).toBool ())
28364
44f2d73df4b3 remove trailing spaces without replacing full editor text (bug #58417)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28361
diff changeset
2283 m_edit_area->replace_all ("[ \\t]+$", "", true, false, false);
28132
4cfe24f56336 add editor prefs for forcing coding standards (bug #57860, bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28118
diff changeset
2284
4cfe24f56336 add editor prefs for forcing coding standards (bug #57860, bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28118
diff changeset
2285 // Save the file
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2286 out.setCodec (codec);
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 QApplication::setOverrideCursor (Qt::WaitCursor);
28134
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
2289
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2290 out << m_edit_area->text ();
28142
908bdd05398a do not add a newline on empty editor files (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28141
diff changeset
2291 if (settings->value (ed_force_newline).toBool ()
908bdd05398a do not add a newline on empty editor files (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28141
diff changeset
2292 && m_edit_area->text ().length ())
28364
44f2d73df4b3 remove trailing spaces without replacing full editor text (bug #58417)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28361
diff changeset
2293 out << m_edit_area->eol_string (); // Add newline if desired
28134
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
2294
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2295 out.flush ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2296 QApplication::restoreOverrideCursor ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2297 file.flush ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2298 file.close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2299
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2300 // file exists now
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2301 QFileInfo file_info = QFileInfo (file);
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2302 QString full_file_to_save = file_info.canonicalFilePath ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2303
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2304 // save filename after closing file as set_file_name starts watching again
27403
27967cb3dea5 attempt to avoid threading issues when saving a file in the file editor tab
John W. Eaton <jwe@octave.org>
parents: 27401
diff changeset
2305 set_file_name (full_file_to_save); // make absolute
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2306
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2307 // 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
2308 update_window_title (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2309
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
2310 // file is save -> not modified, update encoding in statusbar
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2311 m_edit_area->setModified (false);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2312 m_enc_indicator->setText (m_encoding);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2313
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
2314 emit tab_ready_to_close ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2315
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2316 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2317 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2318 emit tab_remove_request ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2319 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
2320 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2321
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2322 // 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
2323 // 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
2324 // 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
2325 if (restore_breakpoints)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2326 check_restore_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2327 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2328
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2329 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
2330 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2331 // 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
2332 // 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
2333
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2334 // reset m_new_encoding
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2335 m_new_encoding = m_encoding;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2336
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2337 // 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
2338 // can't be a parent.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2339 QFileDialog *fileDialog;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2340 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2341 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2342 // 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
2343 // has no effect. Disable editing instead.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2344 m_edit_area->setReadOnly (true);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2345 fileDialog = new QFileDialog ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2346 }
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
2347 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2348 fileDialog = new QFileDialog (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2349
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2350 // 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
2351 QStringList filters;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2352 filters << tr ("Octave Files (*.m)")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2353 << tr ("All Files (*)");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2354 fileDialog->setNameFilters (filters);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2355 fileDialog->setDefaultSuffix ("m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2356
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2357 if (valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2358 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2359 fileDialog->selectFile (m_file_name);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2360 QFileInfo file_info (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2361 if (file_info.suffix () != "m")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2362 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2363 // 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
2364 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
2365 fileDialog->setDefaultSuffix (""); // no default suffix
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2366 }
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 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2369 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2370 fileDialog->selectFile ("");
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2371 fileDialog->setDirectory (m_ced);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2372
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2373 // 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
2374 QString fname = get_function_name ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2375 if (! fname.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2376 fileDialog->selectFile (fname + ".m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2377 }
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 fileDialog->setAcceptMode (QFileDialog::AcceptSave);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2380 fileDialog->setViewMode (QFileDialog::Detail);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2381
26096
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2382 // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
2383 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
2384 gui_settings *settings = rmgr.get_settings ();
28497
2813ac10ca1e force non-native file dialogs on Mac ignoring current user pref (bug #52840)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28382
diff changeset
2385 if (! settings->value (global_use_native_dialogs).toBool ())
26096
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2386 fileDialog->setOption(QFileDialog::DontUseNativeDialog);
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2387
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2388 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
2389 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
2390
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2391 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2392 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2393 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
2394 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
2395
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2396 connect (fileDialog, SIGNAL (rejected ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2397 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
2398 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2399 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2400 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2401 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
2402 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
2403 }
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 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
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 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
2409 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2410 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
2411
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2412 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
2413 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
2414
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2415 if (index > -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2416 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
2417 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2418 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
2419 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2420
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2421 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
2422 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2423 QFileInfo file = QFileInfo (file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2424 QString base_name = file.baseName ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2425
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2426 if ((file.suffix () == "m")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2427 && (! valid_identifier (base_name.toStdString ())))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2428 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2429 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
2430 tr ("\"%1\"\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2431 "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
2432 "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
2433 "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
2434 "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
2435 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
2436
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2437 if (ans == QMessageBox::Yes)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2438 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2439 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2440
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2441 return false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2442 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2443
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2444 QTextCodec* file_editor_tab::check_valid_codec ()
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2445 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2446 QTextCodec *codec = QTextCodec::codecForName (m_encoding.toLatin1 ());
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2447
27272
9de4741a896e Do not ignore user preferences for locale encoding on non-Windows platforms.
Markus Mützel <markus.muetzel@gmx.de>
parents: 27271
diff changeset
2448 // "SYSTEM" is used as alias for the locale encoding.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2449 if ((! codec) && m_encoding.startsWith("SYSTEM"))
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2450 codec = QTextCodec::codecForLocale ();
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2451
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2452 if (! codec)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2453 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2454 QMessageBox::critical (nullptr,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2455 tr ("Octave Editor"),
25062
32a7222d637a [mq]: tr
Rik <rik@octave.org>
parents: 25054
diff changeset
2456 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
2457 "can not be applied.\n\n"
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2458 "Please select another one!").arg (m_encoding));
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2459
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2460 return nullptr;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2461 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2462
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2463 QString editor_text = m_edit_area->text ();
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2464 bool can_encode = codec->canEncode (editor_text);
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2465
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2466 // We cannot rely on QTextCodec::canEncode because it uses the
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2467 // ConverterState of convertFromUnicode which isn't updated by some
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2468 // implementations.
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2469 if (can_encode)
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2470 {
26346
fd890481c408 file-editor-tab.cc: Use function available since Qt4.2.
Markus Mützel <markus.muetzel@gmx.de>
parents: 26331
diff changeset
2471 QVector<uint> u32_str = editor_text.toUcs4 ();
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2472 const uint32_t *src = reinterpret_cast<const uint32_t *>
26346
fd890481c408 file-editor-tab.cc: Use function available since Qt4.2.
Markus Mützel <markus.muetzel@gmx.de>
parents: 26331
diff changeset
2473 (u32_str.data ());
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2474
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2475 size_t length;
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2476 char *res_str =
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2477 octave_u32_conv_to_encoding_strict (m_encoding.toStdString ().c_str (),
26429
ba8493779dc8 file-editor-tab.cc: Revert accidental change in 1e3c42fbf4d3.
Markus Mützel <markus.muetzel@gmx.de>
parents: 26394
diff changeset
2478 src, u32_str.size (), &length);
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2479 if (! res_str)
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2480 {
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2481 if (errno == EILSEQ)
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2482 can_encode = false;
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2483 }
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2484 else
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2485 ::free (static_cast<void *> (res_str));
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2486 }
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2487
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2488 if (! can_encode)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2489 {
26394
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2490 QMessageBox::StandardButton pressed_button
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2491 = QMessageBox::critical (nullptr,
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2492 tr ("Octave Editor"),
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2493 tr ("The current editor contents can not be encoded\n"
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2494 "with the selected encoding %1.\n"
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2495 "Using it would result in data loss!\n\n"
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2496 "Please select another one!").arg (m_encoding),
26394
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2497 QMessageBox::Cancel | QMessageBox::Ignore,
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2498 QMessageBox::Cancel);
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2499
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2500 if (pressed_button == QMessageBox::Ignore)
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2501 return codec;
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2502 else
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2503 return nullptr;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2504 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2505
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2506 return codec;
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2509 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
2510 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2511 if (saveFileName == m_file_name)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2512 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2513 save_file (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2514 }
16702
553cfdd5d660 make white space visibility in the editor configurable
Torsten <ttl@justmail.de>
parents: 16701
diff changeset
2515 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2516 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2517 // 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
2518 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2519 save_file_as (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2520 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2521 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
2522 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2523 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2524
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2525 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
2526 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2527 // saveFileName == m_file_name can not happen, because we only can get here
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2528 // when we close a tab and m_file_name is not a valid filename yet
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2529
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2530 // 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
2531 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2532 save_file_as (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2533 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2534 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
2535 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2536
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2537 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
2538 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2539 // User canceled, allow editing again.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2540 m_edit_area->setReadOnly (false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2541 }
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 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
2544 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2545 bool file_exists = QFile::exists (m_file_name);
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2546
25741
a3f2b06c599a fix broken file closing when deleted/renamed in file browser
Torsten <mttl@mailbox.org>
parents: 25646
diff changeset
2547 if (file_exists && ! do_close)
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2548 {
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2549 // Test if file is really modified or if just the timezone has
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
2550 // changed. In the latter, just return without doing anything.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2551 QDateTime modified = QFileInfo (m_file_name).lastModified ().toUTC ();
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2552
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2553 if (modified <= m_last_modified)
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2554 return;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2555
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2556 m_last_modified = modified;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2557 }
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2558
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2559 // 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
2560 // 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
2561 // file watcher.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2562 QStringList trackedFiles = m_file_system_watcher.files ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2563 if (! trackedFiles.isEmpty ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2564 m_file_system_watcher.removePath (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2565
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2566 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
2567 {
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2568
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2569 // The file is modified
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2570 if (m_always_reload_changed_files)
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2571 load_file (m_file_name);
24716
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 else
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 // 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
2576 // 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
2577 emit set_focus_editor_signal (this);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2578 m_edit_area->setFocus ();
24716
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 // Create a WindowModal message that blocks the edit area
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2581 // by making m_edit_area parent.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2582 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2583 = new QMessageBox (QMessageBox::Warning,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2584 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2585 tr ("It seems that \'%1\' has been modified by another application. Do you want to reload it?").
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2586 arg (m_file_name),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2587 QMessageBox::Yes | QMessageBox::No, this);
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 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2590 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
2591
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2592 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2593 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2594 msgBox->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2595 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2596 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2597 else
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 // 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
2600 // close the file without any user interaction
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2601 if (do_close && ! m_edit_area->isModified ())
24716
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 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
2604 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2605 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2606
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2607 // give editor and this tab the focus,
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
2608 // possibly making the editor visible if it is hidden
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2609 emit set_focus_editor_signal (this);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2610 m_edit_area->setFocus ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2611
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2612 QString modified = "";
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2613 if (m_edit_area->isModified ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2614 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
2615
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
2616 // Create a WindowModal message. The file editor tab can't be made
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2617 // parent because it may be deleted depending upon the response.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2618 // Instead, change the m_edit_area to read only.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2619 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2620 = 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
2621 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
2622 "%1\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2623 "has been deleted or renamed. Do you want to save it now?%2").
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2624 arg (m_file_name).arg (modified),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2625 QMessageBox::Save | QMessageBox::Close, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2626
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2627 m_edit_area->setReadOnly (true);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2628
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2629 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2630 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
2631
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2632 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2633 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2634 msgBox->show ();
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2637
27611
0495b64288f7 use new gui_settings class instead of using QSettings directly
John W. Eaton <jwe@octave.org>
parents: 27605
diff changeset
2638 void file_editor_tab::notice_settings (const gui_settings *settings, bool init)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2639 {
27611
0495b64288f7 use new gui_settings class instead of using QSettings directly
John W. Eaton <jwe@octave.org>
parents: 27605
diff changeset
2640 if (! settings)
0495b64288f7 use new gui_settings class instead of using QSettings directly
John W. Eaton <jwe@octave.org>
parents: 27605
diff changeset
2641 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2642
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2643 if (! init)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2644 update_lexer_settings ();
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 // code folding
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2647 if (settings->value (ed_code_folding).toBool ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2648 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2649 m_edit_area->setMarginType (3, QsciScintilla::SymbolMargin);
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
2650 m_edit_area->setFolding (QsciScintilla::BoxedTreeFoldStyle, 3);
24716
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 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2653 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2654 m_edit_area->setFolding (QsciScintilla::NoFoldStyle, 3);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2657 // status bar
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2658 if (settings->value (ed_show_edit_status_bar).toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2659 m_status_bar->show ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2660 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2661 m_status_bar->hide ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2662
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2663 //highlight current line color
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2664 QColor setting_color = settings->value (ed_highlight_current_line_color).value<QColor> ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2665 m_edit_area->setCaretLineBackgroundColor (setting_color);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2666 m_edit_area->setCaretLineVisible
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2667 (settings->value (ed_highlight_current_line).toBool ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2668
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2669 bool match_keywords = settings->value
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2670 (ed_code_completion_keywords).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2671 bool match_document = settings->value
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2672 (ed_code_completion_document).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2673
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2674 QsciScintilla::AutoCompletionSource source = QsciScintilla::AcsNone;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2675 if (match_keywords)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2676 if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2677 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
2678 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2679 source = QsciScintilla::AcsAPIs;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2680 else if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2681 source = QsciScintilla::AcsDocument;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2682 m_edit_area->setAutoCompletionSource (source);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2683
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2684 m_edit_area->setAutoCompletionReplaceWord
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2685 (settings->value (ed_code_completion_replace).toBool ());
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2686 m_edit_area->setAutoCompletionCaseSensitivity
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2687 (settings->value (ed_code_completion_case).toBool ());
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2688
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2689 if (settings->value (ed_code_completion).toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2690 m_edit_area->setAutoCompletionThreshold
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2691 (settings->value (ed_code_completion_threshold).toInt ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2692 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2693 m_edit_area->setAutoCompletionThreshold (-1);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2694
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2695 if (settings->value (ed_show_white_space).toBool ())
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2696 if (settings->value (ed_show_white_space_indent).toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2697 m_edit_area->setWhitespaceVisibility (QsciScintilla::WsVisibleAfterIndent);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2698 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2699 m_edit_area->setWhitespaceVisibility (QsciScintilla::WsVisible);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2700 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2701 m_edit_area->setWhitespaceVisibility (QsciScintilla::WsInvisible);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2702
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2703 m_edit_area->setEolVisibility (settings->value (ed_show_eol_chars).toBool ());
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2704
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2705 if (settings->value (ed_show_line_numbers).toBool ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2706 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2707 m_edit_area->setMarginLineNumbers (2, true);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2708 auto_margin_width ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2709 connect (m_edit_area, SIGNAL (linesChanged ()),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2710 this, SLOT (auto_margin_width ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2711 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2712 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2713 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2714 m_edit_area->setMarginLineNumbers (2, false);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2715 disconnect (m_edit_area, SIGNAL (linesChanged ()), nullptr, nullptr);
24716
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
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2718 m_smart_indent = settings->value (ed_auto_indent).toBool ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2719 m_edit_area->setAutoIndent (m_smart_indent);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2720 m_edit_area->setTabIndents
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2721 (settings->value (ed_tab_indents_line).toBool ());
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2722 m_edit_area->setBackspaceUnindents
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2723 (settings->value (ed_backspace_unindents_line).toBool ());
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2724 m_edit_area->setIndentationGuides
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2725 (settings->value (ed_show_indent_guides).toBool ());
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2726 m_edit_area->setIndentationsUseTabs
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2727 (settings->value (ed_indent_uses_tabs).toBool ());
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2728 m_edit_area->setIndentationWidth
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2729 (settings->value (ed_indent_width).toInt ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2730
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2731 m_edit_area->setTabWidth
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2732 (settings->value (ed_tab_width).toInt ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2733
27198
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
2734 m_ind_char_width = 1;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2735 if (m_edit_area->indentationsUseTabs ())
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2736 m_ind_char_width = m_edit_area->tabWidth ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2737
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2738 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETHSCROLLBAR,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
2739 settings->value (ed_show_hscroll_bar).toBool ());
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2740 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTH,-1);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2741 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTHTRACKING,true);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2742
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2743 m_long_title = settings->value (ed_long_window_title).toBool ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2744 update_window_title (m_edit_area->isModified ());
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2745
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2746 m_auto_endif = settings->value (ed_auto_endif).toInt ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2747
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2748 // long line marker
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2749 int line_length = settings->value (ed_long_line_column).toInt ();
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2750 m_edit_area->setEdgeColumn (line_length);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2751
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2752 if (settings->value (ed_long_line_marker).toBool ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2753 {
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2754 if (settings->value (ed_long_line_marker_line).toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2755 m_edit_area->setEdgeMode (QsciScintilla::EdgeLine);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2756 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2757 {
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2758 if (settings->value (ed_long_line_marker_background)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2759 .toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2760 m_edit_area->setEdgeMode (QsciScintilla::EdgeBackground);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2761 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2762 m_edit_area->setEdgeMode (QsciScintilla::EdgeLine);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2763 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2764 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2765 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2766 m_edit_area->setEdgeMode (QsciScintilla::EdgeNone);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2767
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2768 // line wrapping and breaking
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2769 m_edit_area->setWrapVisualFlags (QsciScintilla::WrapFlagByBorder);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2770 m_edit_area->setWrapIndentMode (QsciScintilla::WrapIndentSame);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2771
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2772 if (settings->value (ed_wrap_lines).toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2773 m_edit_area->setWrapMode (QsciScintilla::WrapWord);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2774 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2775 m_edit_area->setWrapMode (QsciScintilla::WrapNone);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2776
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2777 if (settings->value (ed_break_lines).toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2778 m_line_break = line_length;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2779 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2780 m_line_break = 0;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2781
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2782 m_line_break_comments =
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2783 settings->value (ed_break_lines_comments).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2784
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2785 // highlight all occurrences of a word selected by a double click
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2786 m_highlight_all_occurrences =
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2787 settings->value (ed_highlight_all_occurrences).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2788
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2789 // reload changed files
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2790 m_always_reload_changed_files =
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2791 settings->value (ed_always_reload_changed_files).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2792
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2793 // 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
2794 // 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
2795 // handling is required
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2796 bool cursor_blinking;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2797
27583
315c35e6037c use symbolic constants for command widget preferences
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27562
diff changeset
2798 if (settings->contains (global_cursor_blinking.key))
27672
a36443e94f8a simplify gui_settings->value (PREF.key, PREF.def) calls
John W. Eaton <jwe@octave.org>
parents: 27671
diff changeset
2799 cursor_blinking = settings->value (global_cursor_blinking).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2800 else
27672
a36443e94f8a simplify gui_settings->value (PREF.key, PREF.def) calls
John W. Eaton <jwe@octave.org>
parents: 27671
diff changeset
2801 cursor_blinking = settings->value (cs_cursor_blinking).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2802
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2803 if (cursor_blinking)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2804 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD,500);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2805 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2806 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD,0);
24716
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 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2811 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
2812 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2813 m_edit_area->setMarginWidth (2, "1" + QString::number (m_edit_area->lines ()));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2814 }
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 // 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
2817 // 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
2818 // 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
2819 // 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
2820 // goes back to the sender
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2821 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
2822 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2823 return close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2824 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2825
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2826 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
2827 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2828 if (ID != this)
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
2829 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2830
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2831 emit editor_state_changed (m_copy_available, m_is_octave_file);
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2834 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
2835 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2836 if (decision == QMessageBox::Yes)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2837 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2838 // reload: file is readded to the file watcher in set_file_name ()
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2839 load_file (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2840 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2841 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2842 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
2843 // do not reload: readd to the file watcher
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2844 m_file_system_watcher.addPath (m_file_name);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2845 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2846 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2847
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2848 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
2849 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2850 // 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
2851 if (decision == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2852 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2853 save_file (m_file_name); // readds file to watcher in set_file_name ()
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2854 m_edit_area->setReadOnly (false); // delete read only flag
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2855 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2856 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2857 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2858 // Definitely close the file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2859 // Set modified to false to prevent the dialog box when the close event
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
2860 // is posted. If the user cancels the close in this dialog the tab is
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2861 // left open with a non-existing file.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2862 m_edit_area->setModified (false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2863 close ();
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2866
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2867 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
2868 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2869 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2870 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2871
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2872 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
2873
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2874 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2875 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2876 marker *dp;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2877
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2878 if (m_edit_area->isModified ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2879 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
2880 // The best that can be done if the editor contents have been
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2881 // 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
2882 // 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
2883 // 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
2884 // 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
2885 // number match.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2886 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2887 marker *dummy;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2888 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
2889 if (editor_linenr != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2890 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2891 // Match with an existing breakpoint.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2892 dp = new marker (m_edit_area, line,
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2893 marker::debugger_position, editor_linenr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2894 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2895 else
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 int original_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2898 editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2899 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
2900 if (original_linenr >= 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2901 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2902 // 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
2903 int linenr_guess = editor_linenr + line - original_linenr;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2904 dp = new marker (m_edit_area, line,
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2905 marker::unsure_debugger_position,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2906 linenr_guess);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2907 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2908 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2909 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2910 // 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
2911 // line number.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2912 dp = new marker (m_edit_area, line,
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2913 marker::unsure_debugger_position);
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2916 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2917 else
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2918 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2919 dp = new marker (m_edit_area, line, marker::debugger_position);
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2920
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2921 // In case of a not modified file we might have to remove
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2922 // a breakpoint here if we have stepped into the file
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2923 if (line == m_breakpoint_info.remove_line)
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2924 {
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2925 m_breakpoint_info.remove_line = -1;
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2926 if (line != m_breakpoint_info.do_not_remove_line)
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2927 handle_request_remove_breakpoint (line);
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2928 }
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2929 }
24716
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 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
2932 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
2933 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
2934 dp, SLOT (handle_remove (void)));
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 center_current_line (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2937 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2938 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2939
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2940 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
2941 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2942 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2943 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2944
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2945 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2946 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
2947 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2948
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2949 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
2950 const QWidget *ID, int line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2951 const QString& cond)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2952 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2953 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2954 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2955
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2956 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2957 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2958 if (insert)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2959 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2960 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2961 marker *bp = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2962
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2963 // 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
2964 // reuse it if possible
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2965 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
2966 if (bp != nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2967 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2968 if ((cond == "") != (bp->get_cond () == ""))
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2969 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2970 // 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
2971 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
2972 bp = nullptr;
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 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2975 bp->set_cond (cond);
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2978 if (bp == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2979 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2980 bp = new marker (m_edit_area, line,
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2981 cond == "" ? marker::breakpoint
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2982 : marker::cond_break, cond);
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 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
2985 (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2986 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
2987 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
2988 (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2989 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
2990 (int)));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2991 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
2992 bp, SLOT (handle_remove (void)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2993 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
2994 marker*&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2995 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
2996 marker*&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2997 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
2998 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
2999 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
3000 QStringList&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3001 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
3002 QStringList&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3003 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
3004 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
3005 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3006 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3007 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3008 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
3009 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3010 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3011
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3012 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
3013 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3014 long int visible_lines
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3015 = m_edit_area->SendScintilla (QsciScintillaBase::SCI_LINESONSCREEN);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3016
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3017 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
3018 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3019 int line, index;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3020 m_edit_area->getCursorPosition (&line, &index);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3021 // compensate for "folding":
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3022 // step 1: expand the current line, if it was folded
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3023 m_edit_area->SendScintilla (2232, line); // SCI_ENSUREVISIBLE
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3024
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3025 // step 2: map file line num to "visible" one // SCI_VISIBLEFROMDOCLINE
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3026 int vis_line = m_edit_area->SendScintilla (2220, line);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3027
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3028 int first_line = m_edit_area->firstVisibleLine ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3029
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3030 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
3031 || 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
3032 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3033 first_line += (vis_line - first_line - (visible_lines - 1) / 2);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3034 m_edit_area->SendScintilla (2613, first_line); // SCI_SETFIRSTVISIBLELINE
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3035 }
23237
904c8a356e76 provide the possibility for breaking lines only in comments (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23236
diff changeset
3036 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3037 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3038
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3039 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
3040 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3041 // the related signal is emitted before cursor-move-signal!
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3042 m_lines_changed = true;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3043 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3044
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3045 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
3046 {
28382
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3047 // Cursor has moved, first check wether an autocompletion list
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3048 // is active or if it was closed. Scintilla provides signals for
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3049 // completed or cancelled lists, but not for list that where hidden
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3050 // due to a new character not matching anymore with the list entries
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3051 if (m_edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCACTIVE))
28382
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3052 m_autoc_active = true;
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3053 else if (m_autoc_active)
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3054 {
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3055 m_autoc_active = false;
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3056 emit autoc_closed (); // Tell editor about closed list
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3057 }
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3058
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3059 // Lines changed? Take care of indentation
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3060 if (m_lines_changed) // cursor moved and lines have changed
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3061 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3062 m_lines_changed = false;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3063 if (m_is_octave_file && line == m_line+1 && col < m_col)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3064 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3065 // Obviously, we have a newline here
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3066 if (m_smart_indent || m_auto_endif)
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3067 m_edit_area->smart_indent (m_smart_indent, m_auto_endif,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3068 m_line, m_ind_char_width);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3069 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3070 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3071
28382
2b52e473b6ef fix focus issues in editor due to qt bug with focus proxy chains (bug #57635)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28297
diff changeset
3072 // Update line and column indicator in the status bar
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3073 m_line = line;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3074 m_col = col;
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3075 m_row_indicator->setNum (line+1);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3076 m_col_indicator->setNum (col+1);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3077 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3078
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3079 // 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
3080 // 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
3081 // The related signal is emitted after the signal for a moved cursor
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3082 // such that m_col and m_line can not be used for current position.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3083 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
3084 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3085 if (m_line_break)
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3086 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3087 // 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
3088 // 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
3089 int line, col, pos;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3090 m_edit_area->get_current_position (&pos, &line, &col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3091
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3092 // immediately return if line has not reached the max. line length
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3093 if (col <= m_line_break)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3094 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3095
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3096 // 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
3097 // 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
3098 int style_comment = octave_qscintilla::ST_NONE;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3099 if (m_line_break_comments)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3100 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3101 // line breaking only in comments, check for comment style
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3102 style_comment = m_edit_area->is_style_comment ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3103 if (! style_comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3104 return; // no comment, return
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3105 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3106
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3107 // 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
3108 // For determining the position of a specific column, we have to get
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
3109 // the column from the QScintilla function without taking tab lengths
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
3110 // into account, since the calculation from line/col to position
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
3111 // ignores this, too.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3112 m_edit_area->getCursorPosition (&line, &col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3113 int c = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3114 int col_space = col;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3115 int indentation = m_edit_area->indentation (line);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3116
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27455
diff changeset
3117 // Search the first occurrence of space or tab backwards starting from
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3118 // the current column (col_space).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3119 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
3120 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3121 pos = m_edit_area->positionFromLineIndex (line, col_space--);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3122 c = m_edit_area->SendScintilla (QsciScintillaBase::SCI_GETCHARAT, pos);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3123 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3124
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3125 // 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
3126 // otherwise break at cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3127 int col_newline = col - 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3128 if (c == ' ' || c == '\t')
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3129 col_newline = col_space + 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3130
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3131 // 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
3132 // by a line comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3133 QString newline = QString ("\n");
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3134 style_comment = m_edit_area->is_style_comment ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3135 if (style_comment == octave_qscintilla::ST_LINE_COMMENT)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3136 newline = newline + m_edit_area->comment_string ().at (0);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3137 m_edit_area->insertAt (newline, line, col_newline);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3138
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3139 // 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
3140 // and set the cursor position to the end of the indentation.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3141 m_edit_area->setIndentation (line + 1, indentation);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3142 m_edit_area->SendScintilla (QsciScintillaBase::SCI_LINEEND);
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3143 }
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3144 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3145
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3146 // 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
3147 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
3148 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3149 if (! modifier)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3150 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3151 // double clicks without modifier
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3152 // clear any existing indicators of this type
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3153 m_edit_area->clear_selection_markers ();
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3154
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3155 if (m_highlight_all_occurrences)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3156 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3157 // Clear any previous selection.
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3158 m_edit_area->set_word_selection ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3159
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3160 // 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
3161
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3162 // get the resulting cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3163 // (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
3164 int line, col;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3165 m_edit_area->getCursorPosition (&line, &col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3166
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3167 // get the word at the cursor (if any)
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3168 QString word = m_edit_area->wordAtLineIndex (line, col);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3169 word = word.trimmed ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3170
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3171 if (! word.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3172 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3173 // 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
3174
28297
1127bcb30e61 Restore editor x-offset after highlight-all-occurrences double-click (bug #58372)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 28118
diff changeset
3175 // remember first visible line and x-offset for restoring the view afterwards
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3176 int first_line = m_edit_area->firstVisibleLine ();
28301
b8a38ed00bf4 maint: merge stable to default.
Rik <rik@octave.org>
parents: 28142 28297
diff changeset
3177 int x_offset = m_edit_area->SendScintilla (QsciScintillaBase::SCI_GETXOFFSET);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3178
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3179 // 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
3180 bool find_result_available
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3181 = m_edit_area->findFirst (word,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3182 false, // no regexp
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3183 true, // case sensitive
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3184 true, // whole words only
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3185 false, // do not wrap
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3186 true, // forward
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3187 0,0, // from the beginning
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3188 false
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
3189 #if defined (HAVE_QSCI_VERSION_2_6_0)
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3190 , true
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
3191 #endif
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3192 );
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3193
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3194 // 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
3195 int oline, ocol;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3196 int wlen = word.length ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3197
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3198 while (find_result_available)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3199 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3200 // get cursor position after having found an occurrence
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3201 m_edit_area->getCursorPosition (&oline, &ocol);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3202 // mark the selection
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3203 m_edit_area->show_selection_markers (oline, ocol-wlen, oline, ocol);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3204
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3205 // find next occurrence
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3206 find_result_available = m_edit_area->findNext ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3207 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3208
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3209 // 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
3210 // and the selection
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3211 m_edit_area->setFirstVisibleLine (first_line);
28301
b8a38ed00bf4 maint: merge stable to default.
Rik <rik@octave.org>
parents: 28142 28297
diff changeset
3212 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETXOFFSET, x_offset);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3213 m_edit_area->setCursorPosition (line, col);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3214 m_edit_area->setSelection (line, col - wlen, line, col);
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3215 m_edit_area->set_word_selection (word);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3216 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3217 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3218 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3219 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3220
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3221 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
3222 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3223 QRegExp rxfun1 ("^[\t ]*function[^=]+=([^\\(]+)\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3224 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
3225 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
3226 QRegExp rxfun4 ("^[\t ]*function[\t ]+([^\\s]+)[\t ]*$");
26624
7994f91cbdb8 Provide correct guess at filename when saving classdef file from GUI (bug #55497).
Rik <rik@octave.org>
parents: 26561
diff changeset
3227 QRegExp rxfun5 ("^[\t ]*classdef[\t ]+([^\\s]+)[\t ]*$");
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3228
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3229 QStringList lines = m_edit_area->text ().split ("\n");
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3230
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3231 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
3232 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3233 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
3234 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
3235 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
3236 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
3237 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
3238 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
3239 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
3240 return rxfun4.cap (1).remove (QRegExp ("[ \t]*"));
26624
7994f91cbdb8 Provide correct guess at filename when saving classdef file from GUI (bug #55497).
Rik <rik@octave.org>
parents: 26561
diff changeset
3241 else if (rxfun5.indexIn (lines.at (i)) != -1)
7994f91cbdb8 Provide correct guess at filename when saving classdef file from GUI (bug #55497).
Rik <rik@octave.org>
parents: 26561
diff changeset
3242 return rxfun5.cap (1).remove (QRegExp ("[ \t]*"));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3243 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3244
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3245 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3246 }
18834
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3247 }
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3248
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15860
diff changeset
3249 #endif