annotate libgui/src/m-editor/file-editor-tab.cc @ 31047:c55c6b91447f

fix error on saving an editor file * file-editor-tab.cc (do_save_file): The use of QSaveFile in the default branch only allows to open a file in write only mode which was overwritten by previous merge from stable branch
author Torsten Lilge <ttl-octave@mailbox.org>
date Tue, 31 May 2022 21:41:51 +0200
parents a0c8c28c38cb
children f0343b3685df
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 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30398
diff changeset
3 // Copyright (C) 2011-2022 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>
30553
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
48 #include <QSaveFile>
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
49 #include <QStyle>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
50 #include <QTextBlock>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
51 #include <QTextCodec>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
52 #include <QTextStream>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
53 #include <QVBoxLayout>
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
54 #if defined (HAVE_QSCI_QSCILEXEROCTAVE_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
55 # 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
56 # 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
57 #elif defined (HAVE_QSCI_QSCILEXERMATLAB_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
58 # 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
59 # 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
60 #endif
27412
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/qscilexerbash.h>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27405
diff changeset
62 #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
63 #include <Qsci/qscilexercpp.h>
29165
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
64 #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
65 #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
66 #include <Qsci/qscilexerperl.h>
16440
aaf024ac8015 Add editor print menu/toolbutton implementation
John Donoghue <john.donoghue@ieee.org>
parents: 16437
diff changeset
67 #include <Qsci/qsciprinter.h>
25443
2fa7cd178c4a new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents: 25440
diff changeset
68
15402
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-tab.h"
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
70 #include "file-editor.h"
27664
bd7decacf32e avoid unnecessary includes of gui-preference header files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27651
diff changeset
71 #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
72 #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
73 #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
74 #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
75 #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
76 #include "octave-qobject.h"
29560
5b7e721844df provide QOverload template if it is not in <QtGlobal> (bug #60416)
John W. Eaton <jwe@octave.org>
parents: 29542
diff changeset
77 #include "octave-qtutils.h"
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
78 #include "octave-txt-lexer.h"
16547
3cd80afc3509 improve debugging with the GUI
John W. Eaton <jwe@octave.org>
parents: 16520
diff changeset
79
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
80 #include "cmd-edit.h"
21310
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
81 #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
82 #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
83 #include "uniconv-wrappers.h"
21310
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
84
23137
334119c390b3 move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents: 23084
diff changeset
85 #include "bp-table.h"
27405
646efbb5f407 avoid including builtin-defun-decls.h unless needed
John W. Eaton <jwe@octave.org>
parents: 27403
diff changeset
86 #include "builtin-defun-decls.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
87 #include "interpreter-private.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
88 #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
89 #include "load-path.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
90 #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
91 #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
92 #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
93 #include "symtab.h"
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
94 #include "unwind-prot.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
95 #include "utils.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
96 #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
97
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
98 namespace octave
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
99 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
100 //! 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
101 //! 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
102 //! 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
103 //! sections of text.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
104
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
105 // 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
106 // 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
107 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
108 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
109 : 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
110 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
111 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
112 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
113 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
114 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
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_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
117
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
118 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
119 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
120
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
121 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
122 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
123 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
124
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
125 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
126 m_bp_conditions.clear ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
127 m_bp_restore_count = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
128
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
129 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
130 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
131
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
132 // Initialize last modification date to now
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
133 m_last_modified = QDateTime::currentDateTimeUtc();
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
134
29707
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
135 connect (m_edit_area, SIGNAL (cursorPositionChanged (int, int)),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
136 this, SLOT (handle_cursor_moved (int,int)));
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
137
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
138 connect (m_edit_area, SIGNAL (SCN_CHARADDED (int)),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
139 this, SLOT (handle_char_added (int)));
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
140
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
141 connect (m_edit_area, SIGNAL (SCN_DOUBLECLICK (int, int, int)),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
142 this, SLOT (handle_double_click (int, int, int)));
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
143
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
144 connect (m_edit_area, SIGNAL (linesChanged ()),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
145 this, SLOT (handle_lines_changed ()));
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
146
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
147 connect (m_edit_area, &octave_qscintilla::context_menu_edit_signal,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
148 this, &file_editor_tab::handle_context_menu_edit);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
149
29716
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
150 connect (m_edit_area, &octave_qscintilla::update_rowcol_indicator_signal,
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
151 this, &file_editor_tab::update_rowcol_indicator);
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
152
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
153 // 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
154 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
155
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
156 // 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
157 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
158 QFontMetrics fm = m_row_indicator->fontMetrics ();
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
159 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
160 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
161 m_col_indicator = new QLabel ("", this);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
162 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
163 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
164 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
165 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
166 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
167 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
168
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
169 // status bar: encoding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
170 QLabel *enc_label = new QLabel (tr ("encoding:"), this);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
171 m_enc_indicator = new QLabel ("", this);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
172 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
173 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
174 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
175
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
176 // status bar: eol mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
177 QLabel *eol_label = new QLabel (tr ("eol:"), this);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
178 m_eol_indicator = new QLabel ("", this);
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_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
180 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
181 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
182
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
183 // symbols
27378
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->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
185 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
186 m_edit_area->markerDefine (QsciScintilla::RightTriangle, marker::bookmark);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
187 m_edit_area->setMarkerBackgroundColor (QColor (0, 0, 232), 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
188 m_edit_area->markerDefine (QsciScintilla::Circle, marker::breakpoint);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
189 m_edit_area->setMarkerBackgroundColor (QColor (192, 0, 0), marker::breakpoint);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
190 m_edit_area->markerDefine (QsciScintilla::Circle, marker::cond_break);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
191 m_edit_area->setMarkerBackgroundColor (QColor (255, 127, 0), marker::cond_break);
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
192 m_edit_area->markerDefine (QsciScintilla::RightArrow,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
193 marker::debugger_position);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
194 m_edit_area->setMarkerBackgroundColor (QColor (255, 255, 0),
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
195 marker::debugger_position);
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
196 m_edit_area->markerDefine (QsciScintilla::RightArrow,
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
197 marker::unsure_debugger_position);
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
198 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
199 marker::unsure_debugger_position);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
200
29707
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
201 connect (m_edit_area, SIGNAL (marginClicked (int, int,
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
202 Qt::KeyboardModifiers)),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
203 this, SLOT (handle_margin_clicked (int, int,
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
204 Qt::KeyboardModifiers)));
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
205
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
206 connect (m_edit_area, &octave_qscintilla::context_menu_break_condition_signal,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
207 this, &file_editor_tab::handle_context_menu_break_condition);
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 // 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
210 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
211 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
212 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
213
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
214 // 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
215 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
216 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
217 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
218 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
219
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
220 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
221
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
222 // 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
223 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
224
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
225 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
226 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
227 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
228 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
229 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
230 setLayout (edit_area_layout);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
231
27556
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
232 // 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
233 // 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
234
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
235 connect (m_edit_area, QOverload<const fcn_callback&>::of (&octave_qscintilla::interpreter_event),
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
236 this, QOverload<const fcn_callback&>::of (&file_editor_tab::interpreter_event));
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
237
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
238 connect (m_edit_area, QOverload<const meth_callback&>::of (&octave_qscintilla::interpreter_event),
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
239 this, QOverload<const meth_callback&>::of (&file_editor_tab::interpreter_event));
27556
410622ac120f improve run selection from editor (bug #42705)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27474
diff changeset
240
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
241 // connect modified signal
29707
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
242 connect (m_edit_area, SIGNAL (modificationChanged (bool)),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
243 this, SLOT (update_window_title (bool)));
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
244
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
245 connect (m_edit_area, SIGNAL (copyAvailable (bool)),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
246 this, SLOT (handle_copy_available (bool)));
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
247
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
248 connect (&m_file_system_watcher, &QFileSystemWatcher::fileChanged,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
249 this, [=] (const QString& path) { file_has_changed (path); });
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
250
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
251 connect (this, &file_editor_tab::maybe_remove_next,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
252 this, &file_editor_tab::handle_remove_next);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
253
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
254 connect (this, &file_editor_tab::dbstop_if,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
255 this, &file_editor_tab::handle_dbstop_if);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
256
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
257 connect (this, &file_editor_tab::request_add_breakpoint,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
258 this, &file_editor_tab::handle_request_add_breakpoint);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
259
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
260 connect (this, &file_editor_tab::api_entries_added,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
261 this, &file_editor_tab::handle_api_entries_added);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
262
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
263 connect (this, &file_editor_tab::confirm_dbquit_and_save_signal,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
264 this, &file_editor_tab::confirm_dbquit_and_save);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
265
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
266 connect (this, &file_editor_tab::do_save_file_signal,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
267 this, &file_editor_tab::do_save_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
268
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
269 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
270 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
271 if (settings)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
272 notice_settings (settings, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
273
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
274 // 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
275 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
276 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
277 // 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
278 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
279 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
280
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
281 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
282 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
283 // Tell all connected markers to self-destruct.
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
284 emit remove_all_breakpoints_signal ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
285 emit remove_all_positions ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
286
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
287 // 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
288 // 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
289 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
290 if (lexer)
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 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
293 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
294 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
295 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
296
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
297 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
298 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
299 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
300 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
301
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
302 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
303 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
304 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
305 set_modified (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
306 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
307
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
308 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
309 {
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
310 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
311 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
312 (save_dialog == QMessageBox::Save))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
313 {
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
314 // 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
315 // 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
316 // successful saving.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
317 e->ignore ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
318 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
319 else
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 e->accept ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
322 emit tab_remove_request ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
323 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
324 }
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 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
327 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
328 m_ced = dir;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
329 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
330
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
331 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
332 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
333 // 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
334 // 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
335 // search path.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
336 QRegExp rxfun1 ("^[\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 ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
338 QRegExp rxfun2 ("^[\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 ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
340 QRegExp rxfun3 ("^[\t ]*function[\t ]+"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
341 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
342 QRegExp rxfun4 ("^[\t ]*function[^=]+=[\t ]*"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
343 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
344
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
345 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
346 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
347
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
348 int line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
349 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
350 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
351 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
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 = 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
354 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
355 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
356 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
357 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
358 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
359 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
360
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
361 if (pos_fct > -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
362 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
363 // 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
364 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
365 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
366 // 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
367 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
368 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
369 return;
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
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
372 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
373 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
374
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
375 // 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
376 // 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
377 // 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
378 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
379 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
380 // 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
381 // 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
382 if (! unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
383 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
384
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
385 QString cond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
386
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
387 // 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
388 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
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 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
391 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
392 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
393 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
394 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
395 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
396 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
397 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
398 m_bp_conditions.clear ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
399 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
400
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
401 // 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
402 // 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
403 // 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
404 // 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
405 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
406 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
407 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
408 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
409 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
410 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
411 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
412
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
413 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
414 }
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
415
27971
ec769a7ab9fb fix more spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27957
diff changeset
416 // 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
417 // 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
418 // 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
419 // 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
420 // new dialog.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
421
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
422 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
423 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
424 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
425 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
426 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
427 = 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
428 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
429
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
430 // 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
431
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
432 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
433 {
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
434 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
435 ([=] (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
436 {
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
437 // INTERPRETER THREAD
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
438
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
439 error_system& es = interp.get_error_system ();
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
440
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
441 unwind_protect frame;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
442
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
443 // Prevent an error in the evaluation here from sending us
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
444 // into the debugger.
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
445
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
446 es.interpreter_try (frame);
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
447
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
448 bool eval_error = false;
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
449 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
450
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
451 try
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
452 {
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
453 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
454 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
455
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
456 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
457
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
458 // 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
459 // breakpoint.
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
460
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
461 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
462 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 29162
diff changeset
463 catch (const execution_exception& ee)
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
464 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
465 interp.recover_from_exception ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
466
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 29162
diff changeset
467 msg = ee.message ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
468 eval_error = true;
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 catch (const interrupt_exception&)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
471 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
472 interp.recover_from_exception ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
473
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
474 msg = "evaluation interrupted";
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
475 eval_error = true;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
476 }
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
477
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
478 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
479 {
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
480 // 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
481 // 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
482
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
483 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
484 + 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
485 + "\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
486
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
487 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
488 }
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
489 });
24716
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
492
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
493 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
494 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
495 // 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
496 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
497 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
498 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
499 if (! fileName.isEmpty () && QFile::exists (fileName))
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
500 {
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
501 m_file_system_watcher.addPath (fileName);
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
502 m_last_modified = QFileInfo (fileName).lastModified ().toUTC ();
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
503 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
504
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
505 // 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
506 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
507 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
508 m_file_name = fileName;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
509 update_lexer ();
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
30745
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
512 // set the window title to actual filename (not modified)
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
513 update_window_title (m_edit_area->isModified ());
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
514
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
515 // update the file editor with current editing directory
29698
bbf5d4ea616c fix enabled state of editor save action depending on modification state
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29657
diff changeset
516 emit editor_state_changed (m_copy_available, m_is_octave_file,
bbf5d4ea616c fix enabled state of editor save action depending on modification state
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29657
diff changeset
517 m_edit_area->isModified ());
24716
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 // 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
520 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
521 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
522
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
523 // 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
524 // 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
525 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
526 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
527 if (file.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
528 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
529 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
530 return false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
531 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
532 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
533 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
534
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
535 return true;
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
30745
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
538 void file_editor_tab::enable_file_watcher (bool do_enable)
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
539 {
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
540 if (do_enable)
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
541 m_file_system_watcher.addPath (m_file_name);
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
542 else
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
543 m_file_system_watcher.removePath (m_file_name);
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
544 }
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
545
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
546 // 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
547 // 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
548 // 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
549 // 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
550 // 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
551 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
552 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
553 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
554 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
555 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
556 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
557 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
558 "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
559 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
560
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
561 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
562 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
563 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
564 retval = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
565 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
566
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
567 return retval;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
568 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
569
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
570 // 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
571 // 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
572 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
573 Qt::KeyboardModifiers state)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
574 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
575 if (margin == 1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
576 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
577 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
578
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
579 if (state & Qt::ControlModifier)
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 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
582 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
583 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
584 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
585 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
586 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
587 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
588 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
589 | (1 << marker::cond_break)))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
590 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
591 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
592 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
593 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
594 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
595 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
596 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
597 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
598 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
599
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
600
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
601 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
602 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
603 // Create a new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
604 QsciLexer *lexer = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
605
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
606 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
607
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
608 // 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
609 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
610 || 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
611 {
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
612 #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
613 lexer = new QsciLexerOctave ();
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
614 #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
615 lexer = new QsciLexerMatlab ();
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
616 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
617 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
618 #endif
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
619 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
620 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
621
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
622 if (! lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
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 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
625 || 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
626 || 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
627 || 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
628 || 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
629 || 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
630 || 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
631 || 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
632 || 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
633 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
634 lexer = new QsciLexerCPP ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
635 }
29165
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
636 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
637 {
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
638 lexer = new QsciLexerJava ();
617d3aa713a4 add java file support in gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29163
diff changeset
639 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
640 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
641 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
642 lexer = new QsciLexerPerl ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
643 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
644 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
645 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
646 lexer = new QsciLexerBatch ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
647 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
648 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
649 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
650 lexer = new QsciLexerDiff ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
651 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
652 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
653 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
654 lexer = new QsciLexerBash ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
655 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
656 else if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
657 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
658 // 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
659 #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
660 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
661 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
662 #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
663 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
664 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
665 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
666 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
667 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
668 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
669 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
670 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
671 // other or no extension
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
672 lexer = new octave_txt_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
673 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
674 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
675
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
676 // 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
677 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
678
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
679 // 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
680 // 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
681 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
682 || 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
683 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
684 // Delete and set new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
685 if (old_lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
686 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
687 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
688
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
689 // 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
690 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
691
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
692 connect (this, &file_editor_tab::request_add_octave_apis,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
693 this, &file_editor_tab::handle_add_octave_apis);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
694
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
695 // 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
696 update_lexer_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
697 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
698 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
699 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
700 // 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
701 // use the old, existing one.
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26346
diff changeset
702 delete lexer;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
703 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
704 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
705
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 // 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
708 // when
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
709 // 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
710 // 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
711 // 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
712 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
713 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
714 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
715
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
716 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
717 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
718
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
719 if (m_lexer_apis)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
720 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
721 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
722
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
723 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
724
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
725 // 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
726 // 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
727 // 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
728 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
729 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
730
24827
1e0718c1867c eliminate most Qt version checks
John W. Eaton <jwe@octave.org>
parents: 24738
diff changeset
731 #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
732 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
733 = QStandardPaths::writableLocation (QStandardPaths::CacheLocation);
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
734 #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
735 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
736 = QDesktopServices::storageLocation (QDesktopServices::CacheLocation);
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
737 #endif
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
738
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
739 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
740
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
741 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
742 = 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
743
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
744 // 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
745 bool octave_builtins
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
746 = 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
747 bool octave_functions
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
748 = 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
749
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
750 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
751
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
752 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
753 {
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27455
diff changeset
754 // 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
755 // 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
756 // 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
757 // 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
758
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
759 // 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
760 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
761
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27455
diff changeset
762 // 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
763 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
764 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
765
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
766 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
767 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
768
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
769 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
770
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
771 // 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
772 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
773
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
774 // 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
775 update_apis = ! apis_file.exists ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
776
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
777 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
778 {
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
779 // 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
780 // 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
781 // 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
782 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
783 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
784 || 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
785 update_apis = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
786 }
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
787
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
788 }
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
789 else
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
790 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
791 // 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
792 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
793 }
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
794
26841
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
795 // 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
796 // 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
797 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
798
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
799 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
800 if (! apis_usable)
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
801 {
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
802 QDir ().mkpath (QFileInfo (f).absolutePath ());
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
803 apis_usable = f.open (QIODevice::WriteOnly);
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
804 }
26522
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
805 if (apis_usable)
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
806 f.close ();
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
807
27277
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 27276
diff changeset
808 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
809 && (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
810 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
811 // 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
812 // 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
813
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
814 // create raw apis info
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
815
28788
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
816 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
817
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
818 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
819 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
820 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
821 ([=] (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
822 {
27405
646efbb5f407 avoid including builtin-defun-decls.h unless needed
John W. Eaton <jwe@octave.org>
parents: 27403
diff changeset
823 // INTERPRETER THREAD
646efbb5f407 avoid including builtin-defun-decls.h unless needed
John W. Eaton <jwe@octave.org>
parents: 27403
diff changeset
824
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
825 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
826
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
827 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
828 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
829 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
830 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
831 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
832 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
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
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
835 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
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 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
838
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
839 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
840
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
841 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
842 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
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
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
845
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
846 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
847 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
848 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
849
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
850 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
851 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
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 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
854 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
855
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
856 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
857 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
858 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
859
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
860 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
861 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
862 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
863 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
864 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
865 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
866 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
867 // 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
868
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
869 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
870
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
871 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
872 = 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
873
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
874 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
875 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
876 }
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
877
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
878 emit api_entries_added ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
879 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
880 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
881 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
882
28788
aba2c4eadb83 add functions of loaded packages to auto-completion list (bug #56207)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28499
diff changeset
883 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
884 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
885
29498
5384bb4efc51 rearrange default lexer settings and add second color mode to gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29468
diff changeset
886 int mode = settings->value (ed_color_mode).toInt ();
5384bb4efc51 rearrange default lexer settings and add second color mode to gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29468
diff changeset
887 rmgr.read_lexer_settings (lexer, settings, mode);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
888
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
889 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
890 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
891
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
892 // 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
893 QColor bg = lexer->paper (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
894 QColor fg = lexer->color (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
895
29498
5384bb4efc51 rearrange default lexer settings and add second color mode to gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29468
diff changeset
896 // margin and current line marker colors
29220
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
897 QColor bgm, fgm;
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
898
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
899 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
900 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
901
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
902 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
903 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
904
ab8aa1bb3c2f add gui utilities with first function for color interpolation
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29205
diff changeset
905 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
906 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
907 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
908 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
909
29498
5384bb4efc51 rearrange default lexer settings and add second color mode to gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29468
diff changeset
910 bgm = interpolate_color (bg, fg, 0.5, 0.1);
5384bb4efc51 rearrange default lexer settings and add second color mode to gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29468
diff changeset
911 m_edit_area->setCaretLineBackgroundColor (bgm);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
912
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
913 // 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
914 // 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
915 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
916 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
917
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
918 // 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
919 // 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
920 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
921 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
922 // Line numbers width
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
923 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
924
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
925 // Line numbers font
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
926 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
927 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
928 font_size = font_size
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
929 + 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
930 if (font_size < 4)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
931 font_size = 4;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
932 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
933
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
934 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
935 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
936 else
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
937 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
938 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
939
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
940 // 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
941 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
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 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
944 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
945
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
946 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
947 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
948
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
949 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
950 {
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
951 // disconnect slot for saving prepared info if already connected
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
952 disconnect (m_lexer_apis, &QsciAPIs::apiPreparationFinished,
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
953 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
954
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
955 // 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
956 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
957 {
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
958 // path exists, apis info can be saved there
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
959 connect (m_lexer_apis, &QsciAPIs::apiPreparationFinished,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
960 this, &file_editor_tab::save_apis_info);
27401
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
961 }
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
962
1f595192b5a5 attempt to avoid threading issues when updating lexer in file editor tab
John W. Eaton <jwe@octave.org>
parents: 27399
diff changeset
963 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
964 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
965
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
966 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
967 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
968 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
969 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
970
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
971 // 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
972 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
973 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
974 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
975 return;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
976 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
977 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
978 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
979
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
980 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
981 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
982 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
983 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
984
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
985 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
986 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
987
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
988 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
989 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
990 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
991 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
992
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
993 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
994 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
995
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
996 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
997 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
998 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
999 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1000
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1001 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
1002 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1003
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1004 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
1005 bool remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1006 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1007 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1008 return;
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 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
1011 }
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 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
1014 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1015 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1016 return;
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 save_file_as ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1019 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1020
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1021 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
1022 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1023 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1024 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1025
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1026 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
1027
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1028 QPrintDialog printDlg (printer, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1029
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1030 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
1031 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
1032
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1033 delete printer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1034 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1035
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
1036 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
1037 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1038 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1039 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1040
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1041 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
1042 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1043 save_file (m_file_name); // save file dialog
29437
c24e190ae34f do not run files that are not saved as octave files (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29436
diff changeset
1044
c24e190ae34f do not run files that are not saved as octave files (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29436
diff changeset
1045 // Running a file is disabled for non-octave files. But when saving
c24e190ae34f do not run files that are not saved as octave files (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29436
diff changeset
1046 // a new file, an octave file is assumed but might actually saved
c24e190ae34f do not run files that are not saved as octave files (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29436
diff changeset
1047 // as another file or with an invalid file name.
c24e190ae34f do not run files that are not saved as octave files (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29436
diff changeset
1048 if (! (m_is_octave_file && valid_file_name ()))
c24e190ae34f do not run files that are not saved as octave files (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29436
diff changeset
1049 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1050 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1051
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
1052 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
1053 {
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1054 // 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
1055 // 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
1056 // afterwards.
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1057 int first_bp_line
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
1058 = 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
1059
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1060 // 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
1061 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
1062 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
1063
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
1064 // 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
1065 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
1066 }
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
1067
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1068 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
1069 emit run_file_signal (info);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1070 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1071
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1072 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
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
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1077 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
1078 }
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 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
1081 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1082 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1083 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1084
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1085 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
1086 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
1087
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1088 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
1089 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
1090 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1091 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
1092 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1093
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1094 // Move the text cursor to the closest bookmark
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1095 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1096 void file_editor_tab::next_bookmark (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1097 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1098 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1099 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1100
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1101 int line, cur;
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1102 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
1103
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1104 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
1105
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1106 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
1107
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1108 // Wrap.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1109 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
1110 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
1111
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1112 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
1113 }
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 // 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
1116 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1117 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
1118 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1119 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1120 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1121
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1122 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
1123 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
1124
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1125 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
1126
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1127 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
1128
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1129 // 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
1130 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
1131 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
1132 (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1133
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1134 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
1135 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1136
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1137 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
1138 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1139 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
1140 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1141
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1142 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
1143 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1144
29458
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1145 void
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1146 file_editor_tab::handle_request_add_breakpoint (int line,
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1147 const QString& condition)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1148 {
29439
fe06fafb4cac fix en-/disabling some editor actions depending on file type (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29359
diff changeset
1149 if (! m_is_octave_file)
fe06fafb4cac fix en-/disabling some editor actions depending on file type (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29359
diff changeset
1150 return;
fe06fafb4cac fix en-/disabling some editor actions depending on file type (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29359
diff changeset
1151
29458
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1152 add_breakpoint_event (line, condition);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1153 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1154
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1155 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
1156 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1157 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
1158 ([=] (interpreter& interp)
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1159 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1160 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1161
29458
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1162 tree_evaluator& tw = interp.get_evaluator ();
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1163 bp_table& bptab = tw.get_bp_table ();
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1164
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1165 bptab.remove_breakpoint_from_file (m_file_name.toStdString (), line);
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1166 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1167 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1168
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1169 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
1170 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1171 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1172 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1173
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1174 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
1175 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
1176
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1177 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
1178 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
1179 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1180 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1181 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1182 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
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1186 // 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
1187 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1188 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
1189 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1190 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1191 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1192
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1193 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
1194 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
1195
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1196 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
1197
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1198 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
1199 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
1200
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1201 // 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
1202 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
1203 nextline = nextcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1204
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1205 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
1206 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1207
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1208 // 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
1209 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1210 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
1211 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1212 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1213 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1214
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1215 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
1216 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
1217
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1218 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
1219
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1220 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
1221 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
1222
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1223 // 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
1224 if (prevcond != -1 && prevcond > prevline)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1225 prevline = prevcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1226
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1227 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
1228 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1229
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1230 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
1231 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1232 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1233 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1234
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1235 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
1236 ([=] (interpreter& interp)
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1237 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1238 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1239
29458
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1240 tree_evaluator& tw = interp.get_evaluator ();
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1241 bp_table& bptab = tw.get_bp_table ();
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1242
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1243 bptab.remove_all_breakpoints_from_file (m_file_name.toStdString (),
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1244 true);
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1245 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1246 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1247
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1248 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
1249 unsigned int sci_msg)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1250 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1251 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1252 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1253
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1254 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
1255 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1256
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
1257 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
1258 bool input_str)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1259 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1260 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1261 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1262
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1263 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
1264 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1265
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1266 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
1267 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1268 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1269 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1270
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1271 do_comment_selected_text (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1272 }
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 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
1275 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1276 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1277 return;
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 do_indent_selected_text (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1280 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1281
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1282 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
1283 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1284 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1285 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1286
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1287 do_indent_selected_text (false);
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1290 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
1291 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1292 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1293 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1294
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1295 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
1296 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1297
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1298 void file_editor_tab::convert_eol (const QWidget *ID,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1299 QsciScintilla::EolMode eol_mode)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1300 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1301 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1302 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1303
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1304 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
1305 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
1306 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1307 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1308
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1309 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
1310 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1311 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1312 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1313
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1314 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
1315 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1316 }
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 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
1319 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1320 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1321 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1322
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1323 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
1324 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1325 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1326
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1327 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
1328 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1329 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1330 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1331
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1332 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
1333 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1334 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1335
29458
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1336 void file_editor_tab::add_breakpoint_event (int line, const QString& cond)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1337 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1338 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
1339 ([=] (interpreter& interp)
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1340 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1341 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27378
diff changeset
1342
27398
db22b63b9c59 attempt to fix threading issues when setting conditional breakpoints in GUI
John W. Eaton <jwe@octave.org>
parents: 27397
diff changeset
1343 // 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
1344 // 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
1345
29458
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1346 tree_evaluator& tw = interp.get_evaluator ();
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1347 bp_table& bptab = tw.get_bp_table ();
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1348
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1349 int lineno = bptab.add_breakpoint_in_file (m_file_name.toStdString (),
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1350 line, cond.toStdString ());
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1351
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1352 if (lineno)
c0f86150aa6c begin allowing breakpoints to be set using file name
John W. Eaton <jwe@octave.org>
parents: 29457
diff changeset
1353 emit maybe_remove_next (lineno);
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1354 });
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1355 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1356
27397
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1357 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
1358 {
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1359 // 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
1360 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
1361 {
27397
8132797b4a6a use signal/slot connection in file-editor-tab for thread safety
John W. Eaton <jwe@octave.org>
parents: 27396
diff changeset
1362 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
1363 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
1364 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1365 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1366
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1367 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
1368 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1369 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1370 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1371
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1372 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
1373 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1374 // 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
1375 // 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
1376 m_bp_restore_count--;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1377 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1378 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1379
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1380 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
1381 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1382 bool ok = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1383 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
1384 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
1385 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
1386 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
1387 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
1388 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
1389 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
1390 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1391 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
1392 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
1393
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1394 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
1395 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1396
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1397 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
1398 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1399 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1400 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1401
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1402 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
1403 m_edit_area->selectToMatchingBrace ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1404 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1405 m_edit_area->moveToMatchingBrace ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1406 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1407
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1408 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
1409 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1410 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1411 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1412
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
1413 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
1414
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1415 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
1416 switch (s)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1417 {
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1418 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
1419 m_edit_area->autoCompleteFromAll ();
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1420 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1421
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1422 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
1423 m_edit_area->autoCompleteFromAPIs ();
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1424 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1425
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1426 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
1427 m_edit_area->autoCompleteFromDocument ();
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1428 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1429
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1430 case QsciScintilla::AcsNone:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1431 break;
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 }
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 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
1436 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1437 // FIXME:
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1438 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
1439
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1440 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
1441 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1442 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
1443 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
1444
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1445 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
1446 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1447
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1448 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
1449 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1450 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
1451 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
1452 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1453 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
1454 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1455 //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
1456 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
1457 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
1458 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1459 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1460 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1461 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
1462 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
1463 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
1464 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
1465 else
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->unindent (cpline);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1467 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1468
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1469 m_edit_area->endUndoAction ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1470 }
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 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
1473 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1474 m_edit_area->beginUndoAction ();
24716
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 int lineFrom, lineTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1477
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1478 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
1479 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1480 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
1481 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
1482
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1483 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
1484 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1485 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1486 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1487 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1488 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
1489 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
1490
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1491 lineTo = lineFrom;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1492 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1493
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1494 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
1495
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1496 m_edit_area->endUndoAction ();
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1499 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
1500 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1501 QRegExp rxc;
27914
a044e50c8dcb Streamline QRegExp instances in libgu.
Rik <rik@octave.org>
parents: 27893
diff changeset
1502 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
1503 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
1504 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
1505
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1506 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1507 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1508 if (input_str)
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 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
1511 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
1512 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
1513
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1514 used_comment_str
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1515 = 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
1516 tr ("Comment string to use:\n"),
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1517 QLineEdit::Normal,
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 27272
diff changeset
1518 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
1519 &ok);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1520
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1521 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
1522 return; // No input, do nothing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1523 else
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
1524 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
1525 }
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 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1528 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1529 // Uncommenting (several strings possible)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1530
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1531 // Sort strings according their length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1532 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
1533 bool inserted;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1534
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1535 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
1536 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1537 inserted = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1538 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
1539 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1540 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
1541 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1542 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
1543 inserted = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1544 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1545 }
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 (! inserted)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1548 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
1549 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1550
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1551 // Create regular expression
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1552 QString regexp;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1553 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
1554 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1555 if (i > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1556 regexp = regexp + QString ("|");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1557 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
1558 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1559 rxc = QRegExp (ws + "(" + regexp + ")");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1560 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1561
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1562 // Do the commenting/uncommenting
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1563 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
1564 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
1565
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1566 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
1567 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1568 int lineFrom, lineTo, colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1569 int change_col_from = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1570 int change_col_to = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1571 bool removed;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1572
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1573 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
1574
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1575 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
1576 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1577
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1578 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
1579 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1580 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1581 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1582 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
1583 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1584 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1585 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1586 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
1587 if ((removed = line.contains (rxc)))
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 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1590 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
1591 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
1592 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
1593 m_edit_area->removeSelectedText ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1594 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1595
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1596 // 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
1597 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
1598 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
1599 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
1600 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
1601 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1602 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1603
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1604 // update the selection area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1605 if (comment)
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 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
1608 if (colTo > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1609 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
1610 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1611 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
1612 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1613 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1614 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1615 if (colTo == 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1616 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
1617 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
1618 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
1619 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1620
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1621 // 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
1622 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
1623 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1624 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1625 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1626 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
1627 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
1628 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
1629 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
1630 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1631 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1632 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
1633 if (line.contains (rxc))
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 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1636 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
1637 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
1638 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
1639 m_edit_area->removeSelectedText ();
24716
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 }
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1643 m_edit_area->endUndoAction ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1644 }
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 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
1647 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1648 QString title ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1649 QString tooltip ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1650
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1651 if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1652 title = tr ("<unnamed>");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1653 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1654 {
29468
46def32e6806 do not allow full path in editor tabs
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29458
diff changeset
1655 QFileInfo file (m_file_name);
46def32e6806 do not allow full path in editor tabs
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29458
diff changeset
1656 title = file.fileName ();
46def32e6806 do not allow full path in editor tabs
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29458
diff changeset
1657 tooltip = m_file_name;
24716
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
27053
1bdfd2b523c9 use tab icon for indicating a modified editor file (bug #56158)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27037
diff changeset
1660 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
1661 }
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 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
1664 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1665 m_copy_available = enableCopy;
29698
bbf5d4ea616c fix enabled state of editor save action depending on modification state
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29657
diff changeset
1666 emit editor_state_changed (m_copy_available, m_is_octave_file,
bbf5d4ea616c fix enabled state of editor save action depending on modification state
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29657
diff changeset
1667 m_edit_area->isModified ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1668 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1669
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1670 // 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
1671 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
1672 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1673 dlg->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1674 if (modal)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1675 dlg->exec ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1676 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1677 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1678 dlg->setWindowModality (Qt::NonModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1679 dlg->show ();
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1682
27605
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1683 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
1684 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1685 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
1686 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
1687 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1688 // 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
1689 // 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
1690 // 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
1691 QMessageBox::StandardButtons buttons = QMessageBox::Save |
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1692 QMessageBox::Discard |
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1693 QMessageBox::Cancel;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1694
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1695 // 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
1696 // 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
1697 // 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
1698 QString available_actions =
19714
21015ca26566 Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19697
diff changeset
1699 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
1700
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1701 QString file;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1702 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
1703 file = m_file_name;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1704 else
17973
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1705 file = tr ("<unnamed>");
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1706
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1707 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1708 = 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
1709 tr ("The file\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1710 " %1\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1711 "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
1712 "%2").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1713 arg (file). arg (available_actions),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1714 buttons, qobject_cast<QWidget *> (parent ()));
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 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
1717 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
1718
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1719 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
1720
60cecb3fed04 fix saving modified files when closing editor tabs or octave
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27583
diff changeset
1721 if (decision == QMessageBox::Cancel)
27633
fd009322dd9f eliminate static variable in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27629
diff changeset
1722 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
1723 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
1724 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
1725 else
27651
c9ebcb9050b4 fix broken storing of editor session data at shutdown
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27639
diff changeset
1726 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
1727 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1728 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1729 {
27651
c9ebcb9050b4 fix broken storing of editor session data at shutdown
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27639
diff changeset
1730 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
1731 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1732
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1733 return decision;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1734 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1735
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1736 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
1737 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1738 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
1739 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1740
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1741 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
1742 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1743 // 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
1744 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
1745
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
1746 // 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
1747 // 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
1748 // 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
1749 // canceled this closing late on.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1750 check_restore_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1751 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1752
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1753 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
1754 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1755 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
1756 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1757 // 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
1758 // 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
1759 remove_all_breakpoints (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1760
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1761 // 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
1762 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
1763 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
1764 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
1765 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
1766
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1767 // 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
1768 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
1769 m_bp_conditions.clear ();
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1772
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1773 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
1774 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1775 // get the absolute path
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1776 QFileInfo file_info = QFileInfo (fileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1777 QString file_to_load;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1778 if (file_info.exists ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1779 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
1780 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1781 file_to_load = fileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1782 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
1783 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
1784 return file.errorString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1785
26131
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1786 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
1787 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
1788 {
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1789 // 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
1790 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
1791 col = m_col;
26131
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1792 }
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1793
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1794 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
1795
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1796 // 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
1797 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
1798
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1799 // 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
1800 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
1801 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
1802
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1803 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
1804 {
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
1805 const QByteArray eol_lf = QByteArray (1, 0x0a);
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
1806 const QByteArray eol_cr = QByteArray (1, 0x0d);
28134
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1807
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1808 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
1809 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
1810
480490faf659 change behavior for handling newline at end of file (bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28132
diff changeset
1811 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
1812 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
1813 }
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1814
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1815 // decode
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1816 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
1817 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
1818 if (codec == nullptr)
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1819 codec = QTextCodec::codecForLocale ();
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1820
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1821 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
1822 text_data.size(), &st);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1823
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1824 // Decoding with invalid characters?
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1825 if (st.invalidChars > 0)
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1826 {
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1827 // 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
1828 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
1829
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1830 // 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
1831 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
1832 "%1\n"
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1833 "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
1834 "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
1835 "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
1836 .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
1837 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
1838 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
1839 msg_box->setText (msg);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1840 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
1841 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
1842 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
1843 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
1844
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
1845 connect (msg_box, &QMessageBox::buttonClicked,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
1846 this, &file_editor_tab::handle_decode_warning_answer);
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1847
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1848 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
1849 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
1850 msg_box->show ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1851 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1852
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1853 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
1854 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
1855
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1856 QApplication::restoreOverrideCursor ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1857
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1858 m_copy_available = false; // no selection yet available
30745
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
1859 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
1860 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
1861
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1862 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1863
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1864 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
1865
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1866 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1867 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1868
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1869 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
1870 {
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1871 QString txt = btn->text ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1872
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1873 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
1874 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1875 // 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
1876 close ();
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1877 return;
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1878 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1879
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1880 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
1881 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1882 // 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
1883 QDialog dlg;
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1884 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
1885
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1886 QLabel *text
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1887 = 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
1888 "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
1889 "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
1890
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1891 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
1892 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
1893 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
1894 m_new_encoding = enc_combo->currentText ();
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
1895 connect (enc_combo, &QComboBox::currentTextChanged,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
1896 this, &file_editor_tab::handle_current_enc_changed);
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1897
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1898 QDialogButtonBox *buttons
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1899 = 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
1900 Qt::Horizontal);
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
1901 connect (buttons, &QDialogButtonBox::accepted, &dlg, &QDialog::accept);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
1902 connect (buttons, &QDialogButtonBox::rejected, &dlg, &QDialog::reject);
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1903
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1904 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
1905 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
1906 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
1907 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
1908 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
1909 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
1910
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1911 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
1912
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1913 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
1914 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1915 // 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
1916 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
1917 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
1918 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
1919 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1920 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1921
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1922 // 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
1923 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
1924 }
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 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
1927 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1928 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
1929 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1930
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1931 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
1932 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1933 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
1934
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
1935 QByteArray eol_lf = QByteArray (1, 0x0a);
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
1936 QByteArray eol_cr = QByteArray (1, 0x0d);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1937 QByteArray eol_crlf = eol_cr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1938 eol_crlf.append (eol_lf);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1939
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1940 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
1941 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
1942 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
1943
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
1944 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
1945 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
1946 QsciScintilla::EolMode eol_mode
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
1947 = 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
1948
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1949 int count_max = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1950
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1951 if (count_crlf > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1952 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1953 eol_mode = QsciScintilla::EolWindows;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1954 count_max = count_crlf;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1955 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1956 if (count_lf > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1957 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1958 eol_mode = QsciScintilla::EolUnix;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1959 count_max = count_lf;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1960 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1961 if (count_cr > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1962 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1963 eol_mode = QsciScintilla::EolMac;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1964 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1965
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1966 return eol_mode;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1967 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1968
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1969 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
1970 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1971 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
1972 {
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
1973 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
1974 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
1975 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
1976 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
1977 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
1978 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
1979 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
1980 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
1981 break;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1982 }
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
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
1985 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
1986 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
1987 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
1988 return;
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
1989
27255
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
1990 // Create and queue the command object.
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
1991
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1992 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
1993 ([=] (interpreter& interp)
27255
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
1994 {
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
1995 // INTERPRETER THREAD
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
1996
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
1997 octave_value_list argout = Fdbstatus (interp, ovl (), 1);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
1998
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
1999 connect (this, &file_editor_tab::update_breakpoints_signal,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2000 this, &file_editor_tab::update_breakpoints_handler,
27255
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2001 Qt::QueuedConnection);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2002
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2003 emit update_breakpoints_signal (argout);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2004 });
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2005 }
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2006
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2007 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
2008 {
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2009 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
2010 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
2011
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2012 Cell file = dbg.contents ("file");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2013 Cell line = dbg.contents ("line");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2014 Cell cond = dbg.contents ("cond");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2015
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2016 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
2017 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2018 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
2019 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
2020 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
2021 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2022 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2023
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2024 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
2025 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2026 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
2027
27629
8b6e928e0705 in GUI objects, store reference to base_qobject instead of resource_manager
John W. Eaton <jwe@octave.org>
parents: 27620
diff changeset
2028 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
2029 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
2030
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2031 // 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
2032 // missing in the settings
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2033 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
2034
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2035 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2036
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2037 update_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2038
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2039 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
2040 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
2041 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2042
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
2043 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
2044 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
2045 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
2046 bool restore_breakpoints)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2047 {
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
2048 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
2049 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
2050 "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
2051 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
2052
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
2053 if (ans == QMessageBox::Save)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2054 {
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
2055 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
2056 ([=] (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
2057 {
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
2058 // 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
2059
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
2060 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
2061
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
2062 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
2063
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
2064 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
2065
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
2066 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
2067
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
2068 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
2069
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
2070 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
2071
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
2072 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
2073 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
2074 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2075 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2076 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2077
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2078 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
2079 bool remove_on_success,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2080 bool restore_breakpoints)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2081 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2082 // 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
2083 // should be performed.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2084 if (! valid_file_name (saveFileName))
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 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
2087 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2088 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2089
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2090 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
2091
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2092 // 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
2093 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
2094 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
2095 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
2096
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
2097 // 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
2098 // 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
2099
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2100 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
2101
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2102 // 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
2103 QFileInfo file_info = QFileInfo (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2104 QString file_to_save;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2105 if (file_info.exists ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2106 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2107 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
2108 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
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 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28788
diff changeset
2111 ([=] (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
2112 {
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 // 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
2114
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 // 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
2116 // 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
2117 // 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
2118
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
2119 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
2120
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
2121 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
2122
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
2123 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
2124
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
2125 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
2126 {
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
2127 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
2128 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
2129 {
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
2130 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
2131 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 29162
diff changeset
2132 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
2133 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
2134 interp.recover_from_exception ();
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27461
diff changeset
2135
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
2136 // 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
2137 // 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
2138 }
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
2139
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
2140 // 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
2141 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
2142 {
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 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
2144 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
2145 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
2146 }
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
2147
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
2148 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
2149
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
2150 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
2151
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 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
2153 != 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
2154 {
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
2155 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
2156 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
2157 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
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
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 // 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
2161 // 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
2162 // 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
2163
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 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
2165
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 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
2167
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 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
2169
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 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
2171 {
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 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
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 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
2175 (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
2176 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
2177 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
2178 }
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
2179 }
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 }
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
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 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
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 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
2185 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
2186 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2187 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2188 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
2189 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
2190 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
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
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 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
2194 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
2195 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
2196 {
30553
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2197 QSaveFile file (file_to_save);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2198
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2199 // 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
2200 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
2201 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
2202 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
2203
31004
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2204 // Remove trailing white spaces if desired
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2205 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2206 gui_settings *settings = rmgr.get_settings ();
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2207
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2208 if (settings->value (ed_rm_trailing_spaces).toBool ())
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2209 {
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2210 // Replace trailing spaces, make sure edit area is writable,
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2211 // which is not the case when saving at exit or when closing
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2212 // the modified file.
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2213 bool ro = m_edit_area->isReadOnly ();
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2214 m_edit_area->setReadOnly (false); // allow writing for replace_all
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2215 m_edit_area->replace_all ("[ \\t]+$", "", true, false, false);
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2216 m_edit_area->setReadOnly (ro); // recover read only state
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2217 }
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2218
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2219 // open the file for writing (use QIODevice::ReadWrite for avoiding
2b4f7287aa3a fix removing trailing spaces on closing a modified file (bug #62271)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30564
diff changeset
2220 // truncating the previous file contents)
31047
c55c6b91447f fix error on saving an editor file
Torsten Lilge <ttl-octave@mailbox.org>
parents: 31009
diff changeset
2221 if (! file.open (QIODevice::WriteOnly))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2222 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2223 // 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
2224 // watched previously.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2225 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
2226 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
2227
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2228 // 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
2229 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2230 = new QMessageBox (QMessageBox::Critical,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2231 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2232 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
2233 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
2234 QMessageBox::Ok, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2235 show_dialog (msgBox, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2236
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2237 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2238 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2239
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2240 // 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
2241
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2242 // write the file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2243 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
2244
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
2245 // 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
2246 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
2247 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
2248 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
2249
28132
4cfe24f56336 add editor prefs for forcing coding standards (bug #57860, bug #57861)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28118
diff changeset
2250 // Save the file
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2251 out.setCodec (codec);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2252
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2253 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
2254
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2255 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
2256 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
2257 && 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
2258 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
2259
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2260 out.flush ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2261 QApplication::restoreOverrideCursor ();
30553
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2262
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2263 // Finish writing by committing the changes to disk,
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2264 // where nothing is done when an error occurred while writing above
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2265 bool writing_ok = file.commit ();
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2266
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2267 if (writing_ok)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2268 {
30553
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2269 // Writing was successful: file exists now
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2270 QFileInfo file_info = QFileInfo (file.fileName ());
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2271 QString full_file_to_save = file_info.canonicalFilePath ();
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2272
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2273 // file is save -> not modified, update encoding in statusbar
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2274 m_edit_area->setModified (false);
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2275 m_enc_indicator->setText (m_encoding);
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2276
30745
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
2277 // save filename after closing file as set_file_name starts watching again
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
2278 set_file_name (full_file_to_save); // make absolute
2f6904439d3c fix updating the name of renamed editor files
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30565
diff changeset
2279
30553
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2280 emit tab_ready_to_close ();
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2281
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2282 if (remove_on_success)
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2283 {
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2284 emit tab_remove_request ();
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2285 return; // Don't touch member variables after removal
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2286 }
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2287
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2288 // Attempt to restore the breakpoints if that is desired.
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2289 // This is only allowed if the tab is not closing since changing
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2290 // breakpoints would reopen the tab in this case.
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2291 if (restore_breakpoints)
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2292 check_restore_breakpoints ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2293 }
30553
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2294 else
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2295 {
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2296 QMessageBox::critical (nullptr,
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2297 tr ("Octave Editor"),
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2298 tr ("The changes could not be saved to the file\n"
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2299 "%1")
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2300 .arg (file.fileName ())
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2301 );
2dc31151ca27 make saving editor files more robust against failures while writing
Torsten Lilge <ttl-octave@mailbox.org>
parents: 30398
diff changeset
2302 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2305 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
2306 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2307 // 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
2308 // 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
2309
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2310 // 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
2311 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
2312
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2313 // 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
2314 // can't be a parent.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2315 QFileDialog *fileDialog;
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 // 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
2319 // 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
2320 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
2321 fileDialog = new QFileDialog ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2322 }
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
2323 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2324 fileDialog = new QFileDialog (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2325
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2326 // 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
2327 QStringList filters;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2328 filters << tr ("Octave Files (*.m)")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2329 << tr ("All Files (*)");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2330 fileDialog->setNameFilters (filters);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2331 fileDialog->setDefaultSuffix ("m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2332
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2333 if (valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2334 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2335 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
2336 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
2337 if (file_info.suffix () != "m")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2338 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2339 // 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
2340 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
2341 fileDialog->setDefaultSuffix (""); // no default suffix
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2342 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2343 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2344 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2345 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2346 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
2347 fileDialog->setDirectory (m_ced);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2348
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2349 // propose a name corresponding to the function name
29436
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2350 // if the new file contains a function
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2351 QString fname = get_function_name ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2352 if (! fname.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2353 fileDialog->selectFile (fname + ".m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2354 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2355
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2356 fileDialog->setAcceptMode (QFileDialog::AcceptSave);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2357 fileDialog->setViewMode (QFileDialog::Detail);
29438
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2358 fileDialog->setOption (QFileDialog::HideNameFilterDetails, false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2359
26096
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2360 // 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
2361 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
2362 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
2363 if (! settings->value (global_use_native_dialogs).toBool ())
29438
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2364 {
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2365 // Qt file dialogs
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2366 fileDialog->setOption(QFileDialog::DontUseNativeDialog);
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2367 }
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2368 else
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2369 {
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2370 // Native file dialogs: Test for already existing files is done manually
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2371 // since native file dialogs might not consider the automatically
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2372 // appended default extension when checking if the file already exists
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2373 fileDialog->setOption(QFileDialog::DontConfirmOverwrite);
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2374 }
26096
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2375
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2376 connect (fileDialog, &QFileDialog::filterSelected,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2377 this, &file_editor_tab::handle_save_as_filter_selected);
24716
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 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2380 {
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2381 connect (fileDialog, &QFileDialog::fileSelected,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2382 this, &file_editor_tab::handle_save_file_as_answer_close);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2383
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2384 connect (fileDialog, &QFileDialog::rejected,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2385 this, &file_editor_tab::handle_save_file_as_answer_cancel);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2386 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2387 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2388 {
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2389 connect (fileDialog, &QFileDialog::fileSelected,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2390 this, &file_editor_tab::handle_save_file_as_answer);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2391 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2392
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2393 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
2394 }
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 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
2397 {
29436
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2398 // On some systems, the filterSelected signal is emitted without user
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2399 // action and with an empty filter string when the file dialog is shown.
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2400 // Just return in this case and do not remove the current default suffix.
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2401 if (filter.isEmpty ())
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2402 return;
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2403
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2404 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
2405
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2406 QRegExp rx ("\\*\\.([^ ^\\)]*)[ \\)]"); // regexp for suffix in filter
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
2407 int index = rx.indexIn (filter, 0); // get first suffix in filter
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2408
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2409 if (index > -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2410 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
2411 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2412 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
2413 }
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 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
2416 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2417 QFileInfo file = QFileInfo (file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2418 QString base_name = file.baseName ();
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 if ((file.suffix () == "m")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2421 && (! valid_identifier (base_name.toStdString ())))
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 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
2424 tr ("\"%1\"\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2425 "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
2426 "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
2427 "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
2428 "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
2429 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
2430
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2431 if (ans == QMessageBox::Yes)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2432 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2433 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2434
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2435 return false;
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
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2438 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
2439 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2440 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
2441
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
2442 // "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
2443 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
2444 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
2445
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2446 if (! codec)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2447 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2448 QMessageBox::critical (nullptr,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2449 tr ("Octave Editor"),
25062
32a7222d637a [mq]: tr
Rik <rik@octave.org>
parents: 25054
diff changeset
2450 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
2451 "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
2452 "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
2453
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2454 return nullptr;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2455 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2456
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2457 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
2458 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
2459
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2460 // 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
2461 // 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
2462 // implementations.
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2463 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
2464 {
26346
fd890481c408 file-editor-tab.cc: Use function available since Qt4.2.
Markus Mützel <markus.muetzel@gmx.de>
parents: 26331
diff changeset
2465 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
2466 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
2467 (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
2468
29654
d13d090cb03a use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents: 29649
diff changeset
2469 std::size_t length;
29608
dc171e0452cf libgui: Avoid dangling reference with QString::toStdString.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29572
diff changeset
2470 const std::string encoding = m_encoding.toStdString ();
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2471 char *res_str =
29608
dc171e0452cf libgui: Avoid dangling reference with QString::toStdString.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29572
diff changeset
2472 octave_u32_conv_to_encoding_strict (encoding.c_str (), src,
dc171e0452cf libgui: Avoid dangling reference with QString::toStdString.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29572
diff changeset
2473 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
2474 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
2475 {
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2476 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
2477 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
2478 }
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2479 else
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2480 ::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
2481 }
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2482
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2483 if (! can_encode)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2484 {
26394
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2485 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
2486 = 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
2487 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
2488 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
2489 "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
2490 "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
2491 "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
2492 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
2493 QMessageBox::Cancel);
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2494
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2495 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
2496 return codec;
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2497 else
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2498 return nullptr;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2499 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2500
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2501 return codec;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2502 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2503
29436
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2504 void file_editor_tab::handle_save_file_as_answer (const QString& save_file_name)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2505 {
29436
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2506 QString saveFileName = save_file_name;
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2507 QFileInfo file (saveFileName);
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2508 QFileDialog *file_dialog = qobject_cast<QFileDialog *> (sender ());
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2509
29438
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2510 // Test if the file dialog should have added a default file
29436
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2511 // suffix, but the selected file still has no suffix (see Qt bug
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2512 // https://bugreports.qt.io/browse/QTBUG-59401)
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2513 if ((! file_dialog->defaultSuffix ().isEmpty ()) && file.suffix ().isEmpty ())
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2514 {
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2515 saveFileName = saveFileName + "." + file_dialog->defaultSuffix ();
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2516 }
2c60e63ff1db fix missing file suffix m when saving a new script (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29358
diff changeset
2517
29438
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2518 file.setFile (saveFileName);
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2519
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2520 // If overwrite confirmation was not done by the file dialog (in case
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2521 // of native file dialogs, see above), do it here
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
2522 if (file_dialog->testOption (QFileDialog::DontConfirmOverwrite) && file.exists ())
29438
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2523 {
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2524 int ans = QMessageBox::question (file_dialog,
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2525 tr ("Octave Editor"),
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2526 tr ("%1\n already exists\n"
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2527 "Do you want to overwrite it?").arg (saveFileName),
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2528 QMessageBox::Yes | QMessageBox::No);
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2529 if (ans != QMessageBox::Yes)
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2530 {
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2531 // Try again, if edit area is read only, remove on success
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2532 save_file_as (m_edit_area->isReadOnly ());
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2533 return;
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2534 }
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2535 }
23424aa7a11a fix confirm overwrite for native editor file save as dialogs (bug #60214)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29437
diff changeset
2536
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2537 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
2538 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2539 save_file (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2540 }
16702
553cfdd5d660 make white space visibility in the editor configurable
Torsten <ttl@justmail.de>
parents: 16701
diff changeset
2541 else
24716
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 // 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
2544 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2545 save_file_as (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2546 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2547 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
2548 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2549 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2550
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2551 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
2552 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2553 // 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
2554 // 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
2555
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2556 // 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
2557 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2558 save_file_as (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2559 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2560 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
2561 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2562
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2563 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
2564 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2565 // 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
2566 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
2567 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2568
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2569 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
2570 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2571 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
2572
25741
a3f2b06c599a fix broken file closing when deleted/renamed in file browser
Torsten <mttl@mailbox.org>
parents: 25646
diff changeset
2573 if (file_exists && ! do_close)
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2574 {
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2575 // 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
2576 // 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
2577 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
2578
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2579 if (modified <= m_last_modified)
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2580 return;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2581
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2582 m_last_modified = modified;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2583 }
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2584
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2585 // 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
2586 // 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
2587 // 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
2588 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
2589 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
2590 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
2591
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2592 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
2593 {
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2594
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2595 // 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
2596 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
2597 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
2598
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2599 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2600 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2601 // 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
2602 // 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
2603 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
2604 m_edit_area->setFocus ();
24716
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 // 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
2607 // 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
2608 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2609 = new QMessageBox (QMessageBox::Warning,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2610 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2611 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
2612 arg (m_file_name),
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2613 QMessageBox::Yes | QMessageBox::No, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2614
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2615 connect (msgBox, &QMessageBox::finished,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2616 this, &file_editor_tab::handle_file_reload_answer);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2617
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2618 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2619 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2620 msgBox->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2621 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2622 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2623 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2624 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2625 // 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
2626 // 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
2627 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
2628 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2629 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
2630 return;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2633 // 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
2634 // 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
2635 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
2636 m_edit_area->setFocus ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2637
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2638 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
2639 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
2640 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
2641
27929
265b386f8b20 maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents: 27923
diff changeset
2642 // 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
2643 // 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
2644 // 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
2645 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2646 = 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
2647 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
2648 "%1\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2649 "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
2650 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
2651 QMessageBox::Save | QMessageBox::Close, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2652
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2653 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
2654
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2655 connect (msgBox, &QMessageBox::finished,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2656 this, &file_editor_tab::handle_file_resave_answer);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2657
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2658 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2659 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2660 msgBox->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2661 }
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
27611
0495b64288f7 use new gui_settings class instead of using QSettings directly
John W. Eaton <jwe@octave.org>
parents: 27605
diff changeset
2664 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
2665 {
27611
0495b64288f7 use new gui_settings class instead of using QSettings directly
John W. Eaton <jwe@octave.org>
parents: 27605
diff changeset
2666 if (! settings)
0495b64288f7 use new gui_settings class instead of using QSettings directly
John W. Eaton <jwe@octave.org>
parents: 27605
diff changeset
2667 return;
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 if (! init)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2670 update_lexer_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2671
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2672 // code folding
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2673 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
2674 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2675 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
2676 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
2677 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2678 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2679 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2680 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
2681 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2682
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2683 // status bar
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2684 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
2685 m_status_bar->show ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2686 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2687 m_status_bar->hide ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2688
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2689 //highlight current line color
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->setCaretLineVisible
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2691 (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
2692
29498
5384bb4efc51 rearrange default lexer settings and add second color mode to gui editor
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29468
diff changeset
2693 // auto completion
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2694 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
2695 (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
2696 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
2697 (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
2698
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2699 QsciScintilla::AutoCompletionSource source = QsciScintilla::AcsNone;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2700 if (match_keywords)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2701 if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2702 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
2703 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2704 source = QsciScintilla::AcsAPIs;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2705 else if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2706 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
2707 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
2708
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2709 m_edit_area->setAutoCompletionReplaceWord
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2710 (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
2711 m_edit_area->setAutoCompletionCaseSensitivity
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2712 (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
2713
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2714 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
2715 m_edit_area->setAutoCompletionThreshold
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2716 (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
2717 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2718 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
2719
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2720 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
2721 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
2722 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
2723 else
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->setWhitespaceVisibility (QsciScintilla::WsVisible);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2725 else
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->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
2727
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2728 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
2729
29649
1583728a5819 fix eol mode when saving files under new names (bug #60585)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29438
diff changeset
2730 m_save_as_desired_eol = static_cast<QsciScintilla::EolMode>
1583728a5819 fix eol mode when saving files under new names (bug #60585)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29438
diff changeset
2731 (settings->value (ed_default_eol_mode).toInt ());
1583728a5819 fix eol mode when saving files under new names (bug #60585)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29438
diff changeset
2732
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2733 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
2734 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2735 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
2736 auto_margin_width ();
29707
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
2737 connect (m_edit_area, SIGNAL (linesChanged ()),
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
2738 this, SLOT (auto_margin_width ()));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2739 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2740 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2741 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2742 m_edit_area->setMarginLineNumbers (2, false);
29707
81be7e4ddb0f revert connection of qscintilla signals back to old syntax (bug #60469)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29698
diff changeset
2743 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
2744 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
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_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
2747 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
2748 m_edit_area->setTabIndents
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2749 (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
2750 m_edit_area->setBackspaceUnindents
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2751 (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
2752 m_edit_area->setIndentationGuides
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2753 (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
2754 m_edit_area->setIndentationsUseTabs
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2755 (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
2756 m_edit_area->setIndentationWidth
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2757 (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
2758
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2759 m_edit_area->setTabWidth
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2760 (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
2761
27198
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
2762 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
2763 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
2764 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
2765
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->SendScintilla (QsciScintillaBase::SCI_SETHSCROLLBAR,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
2767 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
2768 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
2769 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
2770
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2771 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
2772
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2773 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
2774
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2775 // long line marker
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2776 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
2777 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
2778
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2779 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
2780 {
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2781 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
2782 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
2783 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2784 {
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2785 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
2786 .toBool ())
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2787 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
2788 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2789 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
2790 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2791 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2792 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2793 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
2794
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2795 // 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
2796 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
2797 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
2798
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2799 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
2800 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
2801 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2802 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
2803
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2804 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
2805 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
2806 else
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2807 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
2808
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2809 m_line_break_comments =
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2810 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
2811
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2812 // 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
2813 m_highlight_all_occurrences =
27861
3fada47cc58a replacing literals for editor prefs by symbolic constants
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27805
diff changeset
2814 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
2815
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2816 // 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
2817 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
2818 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
2819
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2820 // 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
2821 // 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
2822 // handling is required
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2823 bool cursor_blinking;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2824
27583
315c35e6037c use symbolic constants for command widget preferences
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27562
diff changeset
2825 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
2826 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
2827 else
27672
a36443e94f8a simplify gui_settings->value (PREF.key, PREF.def) calls
John W. Eaton <jwe@octave.org>
parents: 27671
diff changeset
2828 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
2829
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2830 if (cursor_blinking)
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
2831 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
2832 else
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
2833 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
2834
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2835 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2836
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2837
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2838 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
2839 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2840 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
2841 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2842
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2843 // 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
2844 // 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
2845 // 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
2846 // 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
2847 // goes back to the sender
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2848 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
2849 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2850 return close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2851 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2852
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2853 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
2854 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2855 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
2856 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2857
29698
bbf5d4ea616c fix enabled state of editor save action depending on modification state
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29657
diff changeset
2858 emit editor_state_changed (m_copy_available, m_is_octave_file,
bbf5d4ea616c fix enabled state of editor save action depending on modification state
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29657
diff changeset
2859 m_edit_area->isModified ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2860 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2861
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2862 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
2863 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2864 if (decision == QMessageBox::Yes)
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 // 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
2867 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
2868 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2869 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2870 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
2871 // 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
2872 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
2873 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2874 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2875
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2876 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
2877 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2878 // 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
2879 if (decision == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2880 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2881 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
2882 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
2883 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2884 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2885 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2886 // Definitely close the file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2887 // 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
2888 // 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
2889 // 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
2890 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
2891 close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2892 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2893 }
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 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
2896 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2897 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2898 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2899
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2900 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
2901
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2902 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2903 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2904 marker *dp;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2905
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2906 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
2907 {
27893
465ac679e976 Fix typos and grammar errors in comments in libgui (patch #9790)
Andrew Janke <andrew@apjanke.net>
parents: 27861
diff changeset
2908 // 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
2909 // 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
2910 // 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
2911 // 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
2912 // 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
2913 // number match.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2914 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2915 marker *dummy;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2916 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
2917 if (editor_linenr != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2918 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2919 // 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
2920 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
2921 marker::debugger_position, editor_linenr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2922 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2923 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2924 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2925 int original_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2926 editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2927 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
2928 if (original_linenr >= 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2929 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2930 // 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
2931 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
2932 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
2933 marker::unsure_debugger_position,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2934 linenr_guess);
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 else
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 // 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
2939 // 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
2940 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
2941 marker::unsure_debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2942 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2943 }
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 else
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2946 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
2947 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
2948
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2949 // 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
2950 // 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
2951 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
2952 {
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2953 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
2954 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
2955 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
2956 }
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2957 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2958
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2959 connect (this, &file_editor_tab::remove_position_via_debugger_linenr,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2960 dp, &marker::handle_remove_via_original_linenr);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2961
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2962 connect (this, &file_editor_tab::remove_all_positions,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
2963 dp, &marker::handle_remove);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2964
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2965 center_current_line (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2966 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2969 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
2970 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2971 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2972 return;
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 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2975 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
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 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
2979 const QWidget *ID, int line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2980 const QString& cond)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2981 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2982 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2983 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2984
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2985 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2986 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2987 if (insert)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2988 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2989 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2990 marker *bp = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2991
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2992 // 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
2993 // reuse it if possible
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2994 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
2995 if (bp != nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2996 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2997 if ((cond == "") != (bp->get_cond () == ""))
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2998 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2999 // 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
3000 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
3001 bp = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3002 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3003 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3004 bp->set_cond (cond);
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 if (bp == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3008 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3009 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
3010 cond == "" ? marker::breakpoint
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3011 : marker::cond_break, cond);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3012
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3013 connect (this, &file_editor_tab::remove_breakpoint_via_debugger_linenr,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3014 bp, &marker::handle_remove_via_original_linenr);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3015 connect (this, &file_editor_tab::request_remove_breakpoint_via_editor_linenr,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3016 bp, &marker::handle_request_remove_via_editor_linenr);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3017 connect (this, &file_editor_tab::remove_all_breakpoints_signal,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3018 bp, &marker::handle_remove);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3019 connect (this, &file_editor_tab::find_translated_line_number,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3020 bp, &marker::handle_find_translation);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3021 connect (this, &file_editor_tab::find_linenr_just_before,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3022 bp, &marker::handle_find_just_before);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3023 connect (this, &file_editor_tab::report_marker_linenr,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3024 bp, &marker::handle_report_editor_linenr);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3025 connect (bp, &marker::request_remove,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29498
diff changeset
3026 this, &file_editor_tab::handle_request_remove_breakpoint);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3027 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3028 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3029 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3030 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
3031 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3034 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
3035 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3036 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
3037 = 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
3038
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3039 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
3040 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3041 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
3042 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
3043 // compensate for "folding":
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3044 // 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
3045 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
3046
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3047 // 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
3048 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
3049
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3050 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
3051
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3052 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
3053 || 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
3054 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3055 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
3056 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
3057 }
23237
904c8a356e76 provide the possibility for breaking lines only in comments (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23236
diff changeset
3058 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3059 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3060
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3061 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
3062 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3063 // 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
3064 m_lines_changed = true;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3065 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3066
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3067 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
3068 {
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
3069 // 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
3070 // 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
3071 // 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
3072 // 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
3073 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
3074 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
3075 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
3076 {
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
3077 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
3078 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
3079 }
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
3080
29716
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3081 // Lines changed? Take care of indentation!
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3082 bool do_smart_indent = m_lines_changed && m_is_octave_file
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3083 && (line == m_line+1) && (col < m_col)
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3084 && (m_smart_indent || m_auto_endif);
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3085 m_lines_changed = false;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3086
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
3087 // Update line and column indicator in the status bar
29716
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3088 int o_line = m_line;
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3089 update_rowcol_indicator (line, col);
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3090
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3091 // Do smart indent after update of line indicator for having
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3092 // consistent indicator data
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3093 if (do_smart_indent)
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3094 m_edit_area->smart_indent (m_smart_indent, m_auto_endif,
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3095 o_line, m_ind_char_width);
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3096 }
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3097
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3098 void file_editor_tab::update_rowcol_indicator (int line, int col)
da9c55b3e9fa fix wring row/col indicator in GUI editor when auto intending (bug #60690)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 29707
diff changeset
3099 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3100 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
3101 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
3102 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
3103 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
3104 }
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 // 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
3107 // 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
3108 // 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
3109 // 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
3110 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
3111 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3112 if (m_line_break)
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3113 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3114 // 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
3115 // 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
3116 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
3117 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
3118
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3119 // 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
3120 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
3121 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3122
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3123 // 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
3124 // 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
3125 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
3126 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
3127 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3128 // 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
3129 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
3130 if (! style_comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3131 return; // no comment, return
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3132 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3133
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3134 // 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
3135 // 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
3136 // 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
3137 // 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
3138 // 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
3139 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
3140 int c = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3141 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
3142 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
3143
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27455
diff changeset
3144 // 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
3145 // the current column (col_space).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3146 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
3147 {
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3148 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
3149 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
3150 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3151
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3152 // 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
3153 // otherwise break at cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3154 int col_newline = col - 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3155 if (c == ' ' || c == '\t')
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3156 col_newline = col_space + 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3157
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3158 // 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
3159 // by a line comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3160 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
3161 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
3162 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
3163 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
3164 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
3165
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3166 // 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
3167 // 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
3168 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
3169 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
3170 }
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3171 }
24716
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 // 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
3174 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
3175 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3176 if (! modifier)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3177 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3178 // double clicks without modifier
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3179 // 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
3180 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
3181
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3182 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
3183 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3184 // 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
3185 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
3186
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3187 // 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
3188
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3189 // get the resulting cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3190 // (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
3191 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
3192 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
3193
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3194 // 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
3195 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
3196 word = word.trimmed ();
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 if (! word.isEmpty ())
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 // 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
3201
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
3202 // 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
3203 int first_line = m_edit_area->firstVisibleLine ();
28301
b8a38ed00bf4 maint: merge stable to default.
Rik <rik@octave.org>
parents: 28142 28297
diff changeset
3204 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
3205
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3206 // 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
3207 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
3208 = m_edit_area->findFirst (word,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3209 false, // no regexp
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3210 true, // case sensitive
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3211 true, // whole words only
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3212 false, // do not wrap
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3213 true, // forward
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29716
diff changeset
3214 0, 0, // from the beginning
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3215 false
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
3216 #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
3217 , true
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
3218 #endif
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27929
diff changeset
3219 );
24716
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 // 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
3222 int oline, ocol;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3223 int wlen = word.length ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3224
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3225 while (find_result_available)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3226 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3227 // 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
3228 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
3229 // 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
3230 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
3231
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3232 // 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
3233 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
3234 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3235
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3236 // 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
3237 // 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
3238 m_edit_area->setFirstVisibleLine (first_line);
28301
b8a38ed00bf4 maint: merge stable to default.
Rik <rik@octave.org>
parents: 28142 28297
diff changeset
3239 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
3240 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
3241 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
3242 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
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 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3246 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3247
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3248 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
3249 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3250 QRegExp rxfun1 ("^[\t ]*function[^=]+=([^\\(]+)\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3251 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
3252 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
3253 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
3254 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
3255
27378
6d0585c8ee11 use m_ prefix for data members in file_editor_tab class
John W. Eaton <jwe@octave.org>
parents: 27375
diff changeset
3256 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
3257
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3258 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
3259 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3260 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
3261 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
3262 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
3263 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
3264 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
3265 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
3266 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
3267 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
3268 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
3269 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
3270 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3271
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3272 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3273 }
18834
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3274 }
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3275
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15860
diff changeset
3276 #endif