annotate libgui/src/m-editor/file-editor-tab.cc @ 29162:bb6bb306b8a6

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