annotate libgui/src/m-editor/file-editor-tab.cc @ 27255:420611c61298

eliminate octave_cmd classes These classes provided an intermediate command queue that ultimately forwarded to the octave_link event queue using octave_link::post_event. Since octave_link also provides a thread-safe queue for passing signals from the GUI to the interpreter it seems unnecessary to queue commands twice. Also prefer to use lambda expressions for callbacks instead of separate functions. * octave-cmd.h, octave-cmd.cc: Delete. * libgui/src/module.mk: Update. * file-editor-tab.h, file-editor-tab.cc, main-window.cc Remove all uses of octave-cmd.h. Replace all uses of octave_cmd and derived classes with direct calls to octave_link::post_event with lambda expressions instead of explicit function calls. * main-window.h (main_window::queue_cmd, main_window::m_cmd_queue): Delete. * file-editor-tab.h (file_editor_tab::update_breakpoints_signal, file_editor_tab::debug_quit_signal): New signals. (file_editor_tab::request_queue_cmd): Delete signal. * file-editor.cc (file_editor::add_file_editor_tab): Don't connect request_queue_command signal to main_window::queue_cmd slot. Do connect debug_quit_signal to main_window::debug_quit slot. * octave-qobject.cc: Include ovl.h. * octave-dock-widget.h (octave_dock_widget::request_queue_cmd): Delete signal. * octave-dock-widget.cc (octave_dock_widget::octave_dock_widget): Don't connect request_queue_cmd signal to parent widget queue_cmd slot.
author John W. Eaton <jwe@octave.org>
date Tue, 16 Jul 2019 11:57:28 -0400
parents 9e5a825bb966
children 5ac60319575b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
1 /*
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
2
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 26361
diff changeset
3 Copyright (C) 2011-2019 Jacob Dawid
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
4
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
5 This file is part of Octave.
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
6
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24495
diff changeset
7 Octave is free software: you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
8 under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24495
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
10 (at your option) any later version.
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
11
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
12 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22743
diff changeset
15 GNU General Public License for more details.
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
16
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
17 You should have received a copy of the GNU General Public License
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
18 along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24495
diff changeset
19 <https://www.gnu.org/licenses/>.
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
20
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
21 */
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
22
24164
44f0ad0e3af5 doc: libgui/src/m-editor/file-editor-tab.cc: fix Doxygen comment.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 24123
diff changeset
23 //! @file file-editor-tab.cc A single GUI file tab.
24109
1d6c940a1b37 doc: Improve Doxygen documentation for some files in libgui.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23996
diff changeset
24 //!
1d6c940a1b37 doc: Improve Doxygen documentation for some files in libgui.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23996
diff changeset
25 //! This interfaces QsciScintilla with the rest of Octave.
21058
759fcdf3666d Test GUI marker flags correctly, and omit unnecessary test finding next marker
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21054
diff changeset
26
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21651
diff changeset
27 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21213
diff changeset
28 # include "config.h"
15286
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
29 #endif
ae9079bbc627 Add '#include <config.h>' to C++ files in libgui/src
Rik <rik@octave.org>
parents: 15257
diff changeset
30
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21651
diff changeset
31 #if defined (HAVE_QSCINTILLA)
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15860
diff changeset
32
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
33 #if defined (HAVE_QSCI_QSCILEXEROCTAVE_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
34 # define HAVE_LEXER_OCTAVE 1
21203
710e700cdd7f maint: Clean up naming and indentation of #ifdef blocks in libgui
Rik <rik@octave.org>
parents: 21158
diff changeset
35 # include <Qsci/qscilexeroctave.h>
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
36 #elif defined (HAVE_QSCI_QSCILEXERMATLAB_H)
21213
f7d1050b9b53 maint: Clean up various usages of #ifdef.
Rik <rik@octave.org>
parents: 21203
diff changeset
37 # define HAVE_LEXER_MATLAB 1
21203
710e700cdd7f maint: Clean up naming and indentation of #ifdef blocks in libgui
Rik <rik@octave.org>
parents: 21158
diff changeset
38 # include <Qsci/qscilexermatlab.h>
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
39 #endif
14873
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
40 #include <Qsci/qscilexercpp.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
41 #include <Qsci/qscilexerbash.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
42 #include <Qsci/qscilexerperl.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
43 #include <Qsci/qscilexerbatch.h>
355d6c165df0 Added syntax highlighting support for .sh/.bat/.pl and .diff-files.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 14869
diff changeset
44 #include <Qsci/qscilexerdiff.h>
16440
aaf024ac8015 Add editor print menu/toolbutton implementation
John Donoghue <john.donoghue@ieee.org>
parents: 16437
diff changeset
45 #include <Qsci/qsciprinter.h>
15257
7ee62f559a73 Fix compilation under Windows with GUI and LLVM enabled.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15204
diff changeset
46 #include <QApplication>
7ee62f559a73 Fix compilation under Windows with GUI and LLVM enabled.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15204
diff changeset
47 #include <QFileDialog>
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
48 #include <QMessageBox>
15257
7ee62f559a73 Fix compilation under Windows with GUI and LLVM enabled.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15204
diff changeset
49 #include <QTextStream>
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
50 #include <QVBoxLayout>
16375
f482302d81c9 editor goto line menu item (bug #38590)
John Donoghue <john.donoghue@ieee.org>
parents: 16018
diff changeset
51 #include <QInputDialog>
16440
aaf024ac8015 Add editor print menu/toolbutton implementation
John Donoghue <john.donoghue@ieee.org>
parents: 16437
diff changeset
52 #include <QPrintDialog>
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
53 #include <QDateTime>
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 22181
diff changeset
54 #include <QDesktopServices>
20731
83611b387bc5 provide a user preference for the encoding used by the editor (bug #45597)
Torsten <ttl@justmail.de>
parents: 20713
diff changeset
55 #include <QTextCodec>
21007
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
56 #include <QStyle>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
57 #include <QTextBlock>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
58 #include <QLabel>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
59 #include <QCheckBox>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
60 #include <QDialogButtonBox>
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
61 #include <QPushButton>
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
62
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
63 #include "gui-preferences.h"
21007
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
64 #include "resource-manager.h"
25443
2fa7cd178c4a new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents: 25440
diff changeset
65
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
66 #include "file-editor-tab.h"
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
67 #include "file-editor.h"
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
68 #include "octave-txt-lexer.h"
21007
0a09c3cae800 New marker class for modified file breakpoint and position maintenance.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 20995
diff changeset
69 #include "marker.h"
16547
3cd80afc3509 improve debugging with the GUI
John W. Eaton <jwe@octave.org>
parents: 16520
diff changeset
70
21310
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
71 #include "file-ops.h"
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
72 #include "uniconv-wrappers.h"
21310
fc6a9bd59094 backout changeset e8c3590da9ff
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21301
diff changeset
73
23137
334119c390b3 move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents: 23084
diff changeset
74 #include "bp-table.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
75 #include "interpreter-private.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
76 #include "interpreter.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
77 #include "oct-map.h"
16635
25e418d23a4b fix running files from file browser's context menu
Torsten <ttl@justmail.de>
parents: 16591
diff changeset
78 #include "octave-qt-link.h"
22181
acdd8983d308 Force reload of a function after it is saved in the editor (bug #46632)
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22180
diff changeset
79 #include "ov-usr-fcn.h"
acdd8983d308 Force reload of a function after it is saved in the editor (bug #46632)
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22180
diff changeset
80 #include "symtab.h"
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
81 #include "unwind-prot.h"
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
82 #include "utils.h"
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23490
diff changeset
83 #include "version.h"
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15389
diff changeset
84
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
85 namespace octave
14676
35512b788af2 Editor can now handle multiple files in tabs.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
86 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
87 bool file_editor_tab::_cancelled = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
88
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
89 //! A file_editor_tab object consists of a text area and three left margins.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
90 //! The first holds breakpoints, bookmarks, and the debug program counter.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
91 //! The second holds line numbers. The third holds "fold" marks, to hide
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
92 //! sections of text.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
93
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
94 // Make parent null for the file editor tab so that warning WindowModal
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
95 // messages don't affect grandparents.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
96 file_editor_tab::file_editor_tab (const QString& directory_arg)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
97 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
98 _lexer_apis = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
99 _is_octave_file = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
100 _lines_changed = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
101
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
102 _ced = directory_arg;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
103
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
104 _file_name = "";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
105 _file_system_watcher.setObjectName ("_qt_autotest_force_engine_poller");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
106
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
107 _edit_area = new octave_qscintilla (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
108 _line = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
109 _col = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
110
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
111 _bp_lines.clear (); // start with empty lists of breakpoints
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
112 _bp_conditions.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
113 m_bp_restore_count = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
114
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
115 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
116 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
117
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
118 // Initialize last modification date to now
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
119 m_last_modified = QDateTime::currentDateTimeUtc();
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
120
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
121 connect (_edit_area, SIGNAL (cursorPositionChanged (int, int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
122 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
123
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
124 connect (_edit_area, SIGNAL (SCN_CHARADDED (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
125 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
126
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
127 connect (_edit_area, SIGNAL (SCN_DOUBLECLICK (int, int, int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
128 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
129
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
130 connect (_edit_area, SIGNAL (linesChanged ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
131 this, SLOT (handle_lines_changed ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
132
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
133 connect (_edit_area, SIGNAL (context_menu_edit_signal (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
134 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
135
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
136 // create statusbar for row/col indicator and eol mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
137 _status_bar = new QStatusBar (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
138
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
139 // row- and col-indicator
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
140 _row_indicator = new QLabel ("", this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
141 QFontMetrics fm = _row_indicator->fontMetrics ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
142 _row_indicator->setMinimumSize (4.5*fm.averageCharWidth (),0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
143 QLabel *row_label = new QLabel (tr ("line:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
144 _col_indicator = new QLabel ("", this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
145 _col_indicator->setMinimumSize (4*fm.averageCharWidth (),0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
146 QLabel *col_label = new QLabel (tr ("col:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
147 _status_bar->addWidget (row_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
148 _status_bar->addWidget (_row_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
149 _status_bar->addWidget (col_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
150 _status_bar->addWidget (_col_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
151
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
152 // status bar: encoding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
153 QLabel *enc_label = new QLabel (tr ("encoding:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
154 _enc_indicator = new QLabel ("",this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
155 _status_bar->addWidget (enc_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
156 _status_bar->addWidget (_enc_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
157 _status_bar->addWidget (new QLabel (" ", this), 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
158
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
159 // status bar: eol mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
160 QLabel *eol_label = new QLabel (tr ("eol:"), this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
161 _eol_indicator = new QLabel ("",this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
162 _status_bar->addWidget (eol_label, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
163 _status_bar->addWidget (_eol_indicator, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
164 _status_bar->addWidget (new QLabel (" ", this), 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
165
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
166 // Leave the find dialog box out of memory until requested.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
167 _find_dialog = nullptr;
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 // symbols
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
170 _edit_area->setMarginType (1, QsciScintilla::SymbolMargin);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
171 _edit_area->setMarginSensitivity (1, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
172 _edit_area->markerDefine (QsciScintilla::RightTriangle, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
173 _edit_area->setMarkerBackgroundColor (QColor (0,0,232), marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
174 _edit_area->markerDefine (QsciScintilla::Circle, marker::breakpoint);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
175 _edit_area->setMarkerBackgroundColor (QColor (192,0,0), marker::breakpoint);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
176 _edit_area->markerDefine (QsciScintilla::Circle, marker::cond_break);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
177 _edit_area->setMarkerBackgroundColor (QColor (255,127,0), marker::cond_break);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
178 _edit_area->markerDefine (QsciScintilla::RightArrow, marker::debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
179 _edit_area->setMarkerBackgroundColor (QColor (255,255,0),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
180 marker::debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
181 _edit_area->markerDefine (QsciScintilla::RightArrow,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
182 marker::unsure_debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
183 _edit_area->setMarkerBackgroundColor (QColor (192,192,192),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
184 marker::unsure_debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
185
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
186 connect (_edit_area, SIGNAL (marginClicked (int, int,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
187 Qt::KeyboardModifiers)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
188 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
189 Qt::KeyboardModifiers)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
190
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
191 connect (_edit_area, SIGNAL (context_menu_break_condition_signal (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
192 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
193
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
194 // line numbers
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
195 _edit_area->setMarginsForegroundColor (QColor (96, 96, 96));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
196 _edit_area->setMarginsBackgroundColor (QColor (232, 232, 220));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
197 _edit_area->setMarginType (2, QsciScintilla::TextMargin);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
198
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
199 // other features
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
200 _edit_area->setBraceMatching (QsciScintilla::StrictBraceMatch);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
201 _edit_area->setAutoIndent (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
202 _edit_area->setIndentationWidth (2);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
203 _edit_area->setIndentationsUseTabs (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
204
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
205 _edit_area->setUtf8 (true);
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 // auto completion
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
208 _edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCSETCANCELATSTART, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
209
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
210 QVBoxLayout *edit_area_layout = new QVBoxLayout ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
211 edit_area_layout->addWidget (_edit_area);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
212 edit_area_layout->addWidget (_status_bar);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
213 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
214 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
215 setLayout (edit_area_layout);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
216
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
217 // connect modified signal
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
218 connect (_edit_area, SIGNAL (modificationChanged (bool)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
219 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
220
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
221 connect (_edit_area, SIGNAL (copyAvailable (bool)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
222 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
223
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
224 connect (&_file_system_watcher, SIGNAL (fileChanged (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
225 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
226
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
227 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
228 if (settings)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
229 notice_settings (settings, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
230
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
231 setFocusProxy (_edit_area);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
232
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
233 // encoding, not updated with the settings
20774
5c5e085a1ae6 allow selecting an encoding when saving a file (bug #45688)
Torsten <ttl@justmail.de>
parents: 20753
diff changeset
234 #if defined (Q_OS_WIN32)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
235 _encoding = settings->value ("editor/default_encoding", "SYSTEM")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
236 .toString ();
20774
5c5e085a1ae6 allow selecting an encoding when saving a file (bug #45688)
Torsten <ttl@justmail.de>
parents: 20753
diff changeset
237 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
238 _encoding = settings->value ("editor/default_encoding", "UTF-8")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
239 .toString ();
20774
5c5e085a1ae6 allow selecting an encoding when saving a file (bug #45688)
Torsten <ttl@justmail.de>
parents: 20753
diff changeset
240 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
241 _enc_indicator->setText (_encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
242 // no changes in encoding yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
243 _new_encoding = _encoding;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
244 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
245
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
246 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
247 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
248 // 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
249 emit remove_all_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
250 emit remove_all_positions ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
251
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
252 // Destroy items attached to _edit_area.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
253 QsciLexer *lexer = _edit_area->lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
254 if (lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
255 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
256 delete lexer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
257 _edit_area->setLexer (nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
258 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
259 if (_find_dialog)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
260 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
261 delete _find_dialog;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
262 _find_dialog = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
263 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
264
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
265 // Destroy _edit_area.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
266 delete _edit_area;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
269 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
270 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
271 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
272 return;
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 _encoding = new_encoding;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
275 _enc_indicator->setText (_encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
276 if (! _edit_area->text ().isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
277 set_modified (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
278 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
279
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
280 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
281 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
282 _cancelled = false; // prevent unwanted interaction of previous
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
283 // exits of octave which were canceled by the user
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
284
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
285 if (check_file_modified () == QMessageBox::Cancel)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
286 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
287 // ignore close event if file is not saved and user cancels
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
288 // closing this window
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
289 e->ignore ();
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 else
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 e->accept ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
294 emit tab_remove_request ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
295 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
296 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
297
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
298 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
299 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
300 _ced = dir;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
303 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
304 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
305 // search for a subfunction in actual file (this is done at first because
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
306 // octave finds this function before other with same name in the search path
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
307 QRegExp rxfun1 ("^[\t ]*function[^=]+=[\t ]*"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
308 + word_at_cursor + "[\t ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
309 QRegExp rxfun2 ("^[\t ]*function[\t ]+"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
310 + word_at_cursor + "[\t ]*\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
311 QRegExp rxfun3 ("^[\t ]*function[\t ]+"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
312 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
313 QRegExp rxfun4 ("^[\t ]*function[^=]+=[\t ]*"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
314 + word_at_cursor + "[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
315
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
316 int pos_fct = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
317 QStringList lines = _edit_area->text ().split ("\n");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
318
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
319 int line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
320 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
321 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
322 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
323 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
324 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
325 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
326 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
327 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
328 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
329 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
330 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
331
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
332 if (pos_fct > -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
333 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
334 // reg expr. found: it is an internal function
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
335 _edit_area->setCursorPosition (line, pos_fct);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
336 _edit_area->SendScintilla (2232, line); // SCI_ENSUREVISIBLE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
337 // SCI_VISIBLEFROMDOCLINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
338 int vis_line = _edit_area->SendScintilla (2220, line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
339 _edit_area->SendScintilla (2613, vis_line); // SCI_SETFIRSTVISIBLELINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
340 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
341 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
342
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
343 emit edit_mfile_request (word_at_cursor, _file_name, _ced, -1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
344 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
345
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
346 // 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
347 // breakpoint. The default condition is (a) the existing condition if there
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
348 // is already a breakpoint (b) any selected text, or (c) empty
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
349 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
350 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
351 // 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
352 // 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
353 if (! unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
354 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
355
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
356 QString cond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
357 bp_info info (_file_name, linenr+1); // Get function name & dir from filename.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
358
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
359 // Search for previous condition. FIXME: is there a more direct way?
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
360 if (_edit_area->markersAtLine (linenr) & (1 << marker::cond_break))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
361 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
362 emit report_marker_linenr (_bp_lines, _bp_conditions);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
363 for (int i = 0; i < _bp_lines.length (); i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
364 if (_bp_lines.value (i) == linenr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
365 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
366 cond = _bp_conditions.value (i);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
367 break;
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 _bp_lines.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
370 _bp_conditions.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
371 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
372
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
373 // 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
374 // 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
375 // 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
376 // the selection (in edit area) selected (in the dialog).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
377 if (_edit_area->hasSelectedText ())
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 if (cond == "")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
380 cond = _edit_area->selectedText ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
381 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
382 cond = '(' + cond + ") || (" + _edit_area->selectedText () + ')';
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
383 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
384
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
385 bool valid = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
386 std::string prompt = "dbstop if";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
387 bool ok;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
388 while (! valid)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
389 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
390 QString new_condition
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
391 = QInputDialog::getText (this, tr ("Breakpoint condition"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
392 tr (prompt.c_str ()), QLineEdit::Normal, cond,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
393 &ok);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
394 if (ok) // If cancel, don't change breakpoint condition.
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
395 {
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
396 interpreter& interp
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
397 = __get_interpreter__ ("handle_context_menu_break_condition");
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
398
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
399 error_system& es = interp.get_error_system ();
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
400
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
401 try
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
402 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
403 // Suppress error messages on the console.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
404 unwind_protect frame;
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
405
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
406 int bem = es.buffer_error_messages ();
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
407 frame.add_method (es, &error_system::set_buffer_error_messages, bem);
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
408
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
409 es.buffer_error_messages (bem + 1);
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
410
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
411 tree_evaluator& tw = interp.get_evaluator ();
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
412 bp_table& bptab = tw.get_bp_table ();
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
413
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24716
diff changeset
414 bptab.condition_valid (new_condition.toStdString ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
415 valid = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
416 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
417 catch (const index_exception& e) { }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
418 catch (const execution_exception& e) { }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
419 catch (const interrupt_exception&)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
420 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
421 ok = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
422 valid = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
423 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
424
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
425 // In case we repeat, set new prompt.
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27133
diff changeset
426 prompt = "ERROR: " + es.last_error_message () + "\n\ndbstop if";
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
427 cond = new_condition;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
428 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
429 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
430 valid = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
431 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
432
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
433 if (ok) // If the user didn't cancel, actually set the breakpoint.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
434 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
435 info.condition = cond.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
436
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
437 add_breakpoint_event (info);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
438 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
439 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
440
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
441 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
442 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
443 // update tracked file if we really have a file on disk
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
444 QStringList trackedFiles = _file_system_watcher.files ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
445 if (! trackedFiles.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
446 _file_system_watcher.removePath (_file_name);
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
447 if (! fileName.isEmpty () && QFile::exists (fileName))
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
448 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
449 _file_system_watcher.addPath (fileName);
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
450 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
451 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
452
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
453 // update lexer and file name variable if file name changes
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
454 if (_file_name != fileName)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
455 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
456 _file_name = fileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
457 update_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
458 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
459
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
460 // update the file editor with current editing directory
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
461 emit editor_state_changed (_copy_available, _is_octave_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
462
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
463 // add the new file to the most-recently-used list
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
464 emit mru_add_file (_file_name, _encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
465 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
466
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
467 // valid_file_name (file): checks whether "file" names a file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
468 // By default, "file" is empty; then _file_name is checked
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
469 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
470 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
471 if (file.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
472 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
473 if (_file_name.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
474 return false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
475 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
476 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
477 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
478
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
479 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
480 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
481
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
482 // 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
483 // 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
484 // 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
485 // 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
486 // 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
487 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
488 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
489 bool retval = true;
25566
eee01a6e197f allow setting a breakpoint in an unnamed editor file (bug #54231)
Torsten <mttl@mailbox.org>
parents: 25558
diff changeset
490 if (_edit_area->isModified () || ! valid_file_name ())
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
491 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
492 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
493 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
494 "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
495 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
496
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
497 if (ans == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
498 save_file (_file_name, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
499 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
500 retval = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
501 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
502
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
503 return retval;
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 // 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
507 // 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
508 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
509 Qt::KeyboardModifiers state)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
510 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
511 if (margin == 1)
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 unsigned int markers_mask = _edit_area->markersAtLine (editor_linenr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
514
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
515 if (state & Qt::ControlModifier)
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 (markers_mask & (1 << marker::bookmark))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
518 _edit_area->markerDelete (editor_linenr, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
519 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
520 _edit_area->markerAdd (editor_linenr, marker::bookmark);
21158
65827e9cccb8 Gui support for enhancement of dbstop.
Lachlan Andrew <lachlanbis@gmail.com>
parents: 21148
diff changeset
521 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
522 else
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 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
525 | (1 << marker::cond_break)))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
526 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
527 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
528 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
529 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
530 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
531 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
532 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
533 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
534 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
535
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
536
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
537 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
538 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
539 // Create a new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
540 QsciLexer *lexer = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
541
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
542 _is_octave_file = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
543
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
544 // Find the required lexer from file extensions
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
545 if (_file_name.endsWith (".m")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
546 || _file_name.endsWith ("octaverc"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
547 {
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
548 #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
549 lexer = new QsciLexerOctave ();
16662
72665c4ae25b allow build to continue without QScintilla lexer for Octave
John W. Eaton <jwe@octave.org>
parents: 16646
diff changeset
550 #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
551 lexer = new QsciLexerMatlab ();
19348
c364b9a44580 provide an editor lexer for text or unknown files (bug #43572)
Torsten <ttl@justmail.de>
parents: 19328
diff changeset
552 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
553 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
554 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
555 _is_octave_file = true;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
558 if (! lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
559 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
560 if (_file_name.endsWith (".c")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
561 || _file_name.endsWith (".cc")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
562 || _file_name.endsWith (".cpp")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
563 || _file_name.endsWith (".cxx")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
564 || _file_name.endsWith (".c++")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
565 || _file_name.endsWith (".h")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
566 || _file_name.endsWith (".hh")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
567 || _file_name.endsWith (".hpp")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
568 || _file_name.endsWith (".h++"))
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 lexer = new QsciLexerCPP ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
571 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
572 else if (_file_name.endsWith (".pl"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
573 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
574 lexer = new QsciLexerPerl ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
575 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
576 else if (_file_name.endsWith (".bat"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
577 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
578 lexer = new QsciLexerBatch ();
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 else if (_file_name.endsWith (".diff"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
581 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
582 lexer = new QsciLexerDiff ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
583 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
584 else if (_file_name.endsWith (".sh"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
585 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
586 lexer = new QsciLexerBash ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
587 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
588 else if (! valid_file_name ())
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 // new, no yet named file: let us assume it is octave
16716
23b5dde25367 make octave lexer the default and dynamically set margin width for line numbers
Torsten <ttl@justmail.de>
parents: 16715
diff changeset
591 #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
592 lexer = new QsciLexerOctave ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
593 _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
594 #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
595 lexer = new QsciLexerMatlab ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
596 _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
597 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
598 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
599 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
600 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
601 else
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 // other or no extension
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
604 lexer = new octave_txt_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
605 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
606 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
607
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
608 // Get any existing lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
609 QsciLexer *old_lexer = _edit_area->lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
610
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
611 // 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
612 // 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
613 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
614 || 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
615 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
616 // Delete and set new lexer
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
617 if (old_lexer)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
618 delete old_lexer;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
619 _edit_area->setLexer (lexer);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
620
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
621 // build information for auto completion (APIs)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
622 _lexer_apis = new QsciAPIs (lexer);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
623
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
624 // 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
625 update_lexer_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
626 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
627 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
628 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
629 // 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
630 // use the old, existing one.
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26346
diff changeset
631 delete lexer;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
632 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
633 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
634
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
635
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
636 // Update settings, which are lexer related and have to be updated
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
637 // when a) the lexer changes or b) the settings have changed.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
638 void file_editor_tab::update_lexer_settings (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
639 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
640 QsciLexer *lexer = _edit_area->lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
641
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
642 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
643
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
644 if (_lexer_apis)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
645 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
646 _lexer_apis->cancelPreparation (); // stop preparing if apis exists
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
647
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
648 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
649
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
650 // Get path to prepared api info (cache). Temporarily set the
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
651 // 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
652 // 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
653 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
654 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
655
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
656 #if defined (HAVE_QSTANDARDPATHS)
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
657 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
658 = QStandardPaths::writableLocation (QStandardPaths::CacheLocation);
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
659 #else
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
660 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
661 = QDesktopServices::storageLocation (QDesktopServices::CacheLocation);
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
662 #endif
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
663
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
664 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
665
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
666 QString prep_apis_path = local_data_path + "/"
26855
156bd21bf6bd editor follows XDG_CONFIG_HOME for autocompletion files (bug ##55822)
Torsten <mttl@mailbox.org>
parents: 26848
diff changeset
667 + 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
668
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
669 // get settings which infos are used for octave
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
670 bool octave_builtins = settings->value (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
671 "editor/codeCompletion_octave_builtins", true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
672 bool octave_functions = settings->value (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
673 "editor/codeCompletion_octave_functions", true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
674
26927
df9fe0026f73 use user cache location for keyword lists for auto completion (bug #55855)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26873
diff changeset
675 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
676
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
677 if (_is_octave_file)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
678 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
679 // Keywords and Builtins do not change, these informations can be
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
680 // 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
681 // 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
682 // 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
683
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
684 // Keywords are always used
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
685 _prep_apis_file = prep_apis_path + lexer->lexer () + "_k";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
686
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
687 // Buitlins are only used if the user settings say so
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
688 if (octave_builtins)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
689 _prep_apis_file += 'b';
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
690
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
691 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
692 _prep_apis_file += 'f';
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
693
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
694 _prep_apis_file += ".pap"; // final name of apis file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
695
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
696 // check whether the APIs info needs to be prepared and saved
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
697 QFileInfo apis_file = QFileInfo (_prep_apis_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
698 // 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
699 update_apis = ! apis_file.exists ();
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 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
702 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
703 // Functions may change frequently. Update the apis data
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
704 // 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
705 // 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
706 QDateTime apis_time = apis_file.lastModified ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
707 if (QDateTime::currentDateTime () > apis_time.addSecs (180))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
708 update_apis = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
709 }
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
710
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
711 }
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
712 else // no octave file, just add extension
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
713 {
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
714
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
715 _prep_apis_file = prep_apis_path + lexer->lexer () + ".pap";
23489
1b017f9ee3f1 more frequent preparation of data for autocompletion
Torsten <mttl@mailbox.org>
parents: 23457
diff changeset
716
18833
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
717 }
6504a1932637 auto completion offers builtins and file functions for octave (bug #41371)
Torsten <ttl@justmail.de>
parents: 18767
diff changeset
718
26841
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
719 // 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
720 // e.g., in case of max. number of opened files
26522
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
721 QFile f (_prep_apis_file);
26841
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
722
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
723 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
724 if (! apis_usable)
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
725 {
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
726 QDir ().mkpath (QFileInfo (f).absolutePath ());
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
727 apis_usable = f.open (QIODevice::WriteOnly);
b6dfe7d192bc fix creating keyword files for editor autocompletion (bug #55835)
Torsten <mttl@mailbox.org>
parents: 26554
diff changeset
728 }
26522
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
729 if (apis_usable)
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
730 f.close ();
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
731
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
732 if (apis_usable &&
d6a4237a26b4 fix crash of gui when too many files are opened (bug #49736)
Torsten <mttl@mailbox.org>
parents: 26518
diff changeset
733 (update_apis || ! _lexer_apis->loadPrepared (_prep_apis_file)))
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
734 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
735 // 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
736 // 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
737
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
738 // create raw apis info
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
739 QString keyword;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
740 QStringList keyword_list;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
741 int i,j;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
742
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
743 if (_is_octave_file)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
744 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
745 // octave: get keywords from internal informations depending on
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
746 // user preferences
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
747
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
748 // keywords are always used
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
749 add_octave_apis (Fiskeyword ()); // add new entries
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
750
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
751 interpreter& interp
25336
389757b7b6af eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
752 = __get_interpreter__ ("file_editor_tab::update_lexer_settings");
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
753
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
754 if (octave_builtins)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
755 add_octave_apis (F__builtins__ (interp)); // add new entries
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
756
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
757 if (octave_functions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
758 add_octave_apis (F__list_functions__ (interp)); // add new entries
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
759
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
760 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
761 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
762 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
763
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
764 _prep_apis_file = prep_apis_path + lexer->lexer () + ".pap";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
765
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
766 for (i=1; i<=3; i++) // test the first 5 keyword sets
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
767 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
768 keyword = QString (lexer->keywords (i)); // get list
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
769 keyword_list = keyword.split (QRegExp (R"(\s+)")); // split
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
770 for (j = 0; j < keyword_list.size (); j++) // add to API
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
771 _lexer_apis->add (keyword_list.at (j));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
772 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
773 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
774
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
775 // disconnect slot for saving prepared info if already connected
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
776 disconnect (_lexer_apis, SIGNAL (apiPreparationFinished ()), nullptr, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
777 // check whether path for prepared info exists or can be created
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
778 if (QDir ("/").mkpath (prep_apis_path))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
779 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
780 // path exists, apis info can be saved there
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
781 connect (_lexer_apis, SIGNAL (apiPreparationFinished ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
782 this, SLOT (save_apis_info ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
783 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
784
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
785 _lexer_apis->prepare (); // prepare apis info
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
786
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
787 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
788 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
789
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
790 lexer->readSettings (*settings);
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 _edit_area->setCaretForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
793 _edit_area->setIndentationGuidesForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
794
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
795 // 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
796 QColor bg = lexer->paper (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
797 QColor fg = lexer->color (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
798
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
799 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
800 bg.getHsv (&bh,&bs,&bv);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
801 fg.getHsv (&fh,&fs,&fv);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
802
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
803 // margin colors
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
804 h = bh;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
805 s = bs/2;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
806 v = bv + (fv - bv)/5;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
807
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
808 bg.setHsv (h,s,v);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
809 _edit_area->setEdgeColor (bg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
810
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
811 v = bv + (fv - bv)/8;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
812 bg.setHsv (h,s,v);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
813 v = bv + (fv - bv)/4;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
814 fg.setHsv (h,s,v);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
815
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
816 _edit_area->setMarkerForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
817 _edit_area->setMarginsForegroundColor (lexer->color (0));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
818 _edit_area->setMarginsBackgroundColor (bg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
819 _edit_area->setFoldMarginColors (bg,fg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
820
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
821 // 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
822 // 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
823 QColor hg = QApplication::palette ().color (QPalette::Highlight);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
824 _edit_area->set_selection_marker_color (hg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
825
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
826 // fix line number width with respect to the font size of the lexer and
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
827 // set the line numbers font depending on the lexers font
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
828 if (settings->value ("editor/showLineNumbers", true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
829 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
830 // Line numbers width
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
831 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
832
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
833 // Line numbers font
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
834 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
835 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
836 font_size = font_size
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
837 + settings->value ("editor/line_numbers_size", 0).toInt ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
838 if (font_size < 4)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
839 font_size = 4;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
840 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
841
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
842 _edit_area->setMarginsFont (line_numbers_font);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
843 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
844 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
845 _edit_area->setMarginWidth (2,0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
846 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
847
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
848
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
849 // function for adding entries to the octave lexer's APIs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
850 void file_editor_tab::add_octave_apis (octave_value_list key_ovl)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
851 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
852 octave_value keys = key_ovl(0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
853 Cell key_list = keys.cell_value ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
854
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
855 for (int idx = 0; idx < key_list.numel (); idx++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
856 _lexer_apis->add (QString (key_list.elem (idx).string_value ().data ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
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 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
860 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
861 _lexer_apis->savePrepared (_prep_apis_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
862 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
863
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
864 // Slot for editors signal is its toplevel state has changed
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
865 void file_editor_tab::handle_toplevel_changed (bool)
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
866 {
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
867 // The find dialog has to be re-created since making the editor
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
868 // floating or docked obviously changes the parent/child relation
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
869 // of the find dialog
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
870 if (_find_dialog == nullptr)
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
871 return;
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
872 else
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
873 {
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
874 if (_find_dialog->isVisible ())
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
875 {
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
876 _find_dialog->save_data (&m_find_dlg_data); // Save current data
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
877 delete _find_dialog;
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
878 _find_dialog = nullptr;
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
879
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
880 find_create (); // Create new dialog
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
881
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
882 _find_dialog->restore_data (&m_find_dlg_data); // Restore data
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
883
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
884 _edit_area->setFocus ();
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
885 }
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
886 }
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
887 }
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
888
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
889 // 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
890 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
891 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
892 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
893 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
894 _edit_area->setFocus ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
895 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
896
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
897 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
898 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
899 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
900 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
901
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
902 _edit_area->context_help_doc (doc);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
903 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
904
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
905 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
906 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
907 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
908 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
909
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
910 _edit_area->context_edit ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
911 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
912
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
913 void file_editor_tab::check_modified_file (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
914 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
915 if (_cancelled)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
916 return;
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 if (check_file_modified () == QMessageBox::Cancel)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
919 _cancelled = true;
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 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
923 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
924 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
925 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
926
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
927 save_file (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
928 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
929
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
930 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
931 bool remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
932 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
933 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
934 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
935
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
936 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
937 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
938
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
939 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
940 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
941 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
942 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
943
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
944 save_file_as ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
945 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
946
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
947 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
948 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
949 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
950 return;
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 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
953
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
954 QPrintDialog printDlg (printer, this);
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 (printDlg.exec () == QDialog::Accepted)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
957 printer->printRange (_edit_area);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
958
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
959 delete printer;
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
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
962 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
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
967 if (_edit_area->isModified () | ! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
968 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
969 save_file (_file_name); // save file dialog
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
970 if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
971 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
972 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
973
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
974 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
975 {
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
976 // Get current first breakpoint and set breakpoint waiting for
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
977 // the returned line number. Store whether to remove this breakpoint
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
978 // afterwards.
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
979 int 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
980 = _edit_area->markerFindNext (0, (1 << marker::breakpoint)) + 1;
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
981
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
982 // 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
983 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
984 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
985
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
986 // 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
987 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
988 }
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
989
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
990 QFileInfo info (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
991 emit run_file_signal (info);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
992 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
993
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
994 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
995 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
996 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
997 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
998
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
999 _edit_area->context_run ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1000 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1001
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1002 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
1003 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1004 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1005 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1006
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1007 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1008 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1009
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1010 if (_edit_area->markersAtLine (line) & (1 << marker::bookmark))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1011 _edit_area->markerDelete (line, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1012 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1013 _edit_area->markerAdd (line, marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1014 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1015
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1016 // 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
1017 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1018 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
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1023 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1024 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1025
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1026 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
1027
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1028 int nextline = _edit_area->markerFindNext (line, (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1029
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1030 // Wrap.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1031 if (nextline == -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1032 nextline = _edit_area->markerFindNext (1, (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1033
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1034 _edit_area->setCursorPosition (nextline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1035 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1036
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1037 // 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
1038 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1039 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
1040 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1041 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1042 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1043
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1044 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1045 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1046
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1047 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
1048
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1049 int prevline = _edit_area->markerFindPrevious (line, (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1050
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1051 // 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
1052 if (prevline == -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1053 prevline = _edit_area->markerFindPrevious (_edit_area->lines (),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1054 (1 << marker::bookmark));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1055
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1056 _edit_area->setCursorPosition (prevline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1057 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1058
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1059 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
1060 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1061 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
1062 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1063
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1064 _edit_area->markerDeleteAll (marker::bookmark);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1065 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1066
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1067 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
1068 const QString& cond)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1069 : 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
1070 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1071 QFileInfo file_info (fname);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1072
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1073 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
1074 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
1075
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1076 // 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
1077 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
1078
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1079 dir = q_dir.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1080 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
1081
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1082 // 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
1083 // 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
1084
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1085 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
1086
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1087 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
1088 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1089 if (dir[pos+1] == '@')
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1090 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1091 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
1092
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1093 dir = dir.substr (0, pos);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1094 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1095 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1098 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
1099 const QString& condition)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1100 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1101 bp_info info (_file_name, line, condition);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1102
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1103 add_breakpoint_event (info);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1104 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1105
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1106 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
1107 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1108 bp_info info (_file_name, line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1109
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1110 octave_link::post_event
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1111 ([info] (void)
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1112 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1113 bp_table::intmap line_info;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1114 line_info[0] = info.line;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1115
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1116 if (octave_qt_link::file_in_path (info.file, info.dir))
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1117 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1118 bp_table& bptab = __get_bp_table__ ("file_editor_tab::handle_request_remove_breakpoint");
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1119
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1120 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
1121 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1122 });
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1123 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1124
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1125 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
1126 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1127 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1128 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1129
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1130 int editor_linenr, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1131 _edit_area->getCursorPosition (&editor_linenr, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1132
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1133 if (_edit_area->markersAtLine (editor_linenr) & (1 << marker::breakpoint))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1134 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
1135 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1136 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1137 if (unchanged_or_saved ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1138 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
1139 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1142 // 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
1143 // after the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1144 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
1145 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1146 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1147 return;
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 int line, cur;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1150 _edit_area->getCursorPosition (&line, &cur);
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 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
1153
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1154 int nextline = _edit_area->markerFindNext (line, (1 << marker::breakpoint));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1155 int nextcond = _edit_area->markerFindNext (line, (1 << marker::cond_break));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1156
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1157 // 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
1158 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
1159 nextline = nextcond;
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 _edit_area->setCursorPosition (nextline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1162 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1163
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1164 // 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
1165 // before the current line.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1166 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
1167 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1168 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1169 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1170
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1171 int line, cur, prevline, prevcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1172 _edit_area->getCursorPosition (&line, &cur);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1173
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1174 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
1175
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1176 prevline = _edit_area->markerFindPrevious (line, (1 << marker::breakpoint));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1177 prevcond = _edit_area->markerFindPrevious (line, (1 << marker::cond_break));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1178
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1179 // 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
1180 if (prevcond != -1 && prevcond > prevline)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1181 prevline = prevcond;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1182
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1183 _edit_area->setCursorPosition (prevline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1184 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1185
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1186 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
1187 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1188 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1189 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1190
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1191 bp_info info (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1192
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1193 octave_link::post_event
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1194 ([info] (void)
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1195 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1196 if (octave_qt_link::file_in_path (info.file, info.dir))
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1197 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1198 bp_table& bptab = __get_bp_table__ ("file_editor_tab::remove_all_breakpoints");
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1199
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1200 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
1201 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1202 });
24716
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1205 void file_editor_tab::scintilla_command (const QWidget *ID, unsigned int sci_msg)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1206 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1207 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1208 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1209
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1210 _edit_area->SendScintilla (sci_msg);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1211 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1212
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1213 void file_editor_tab::comment_selected_text (const QWidget *ID, bool input_str)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1214 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1215 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1216 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1217
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1218 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
1219 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1220
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1221 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
1222 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1223 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1224 return;
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 do_comment_selected_text (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1227 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1228
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1229 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
1230 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1231 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1232 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1233
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1234 do_indent_selected_text (true);
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1237 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
1238 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1239 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1240 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1241
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1242 do_indent_selected_text (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1243 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1244
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1245 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
1246 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1247 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1248 return;
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 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
1251 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1252
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1253 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
1254 QsciScintilla::EolMode eol_mode)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1255 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1256 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1257 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1258
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1259 _edit_area->convertEols (eol_mode);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1260 _edit_area->setEolMode (eol_mode);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1261 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1262 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1263
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1264 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
1265 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1266 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1267 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1268
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1269 _edit_area->zoomIn (1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1270 auto_margin_width ();
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1273 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
1274 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1275 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1276 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1277
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1278 _edit_area->zoomOut (1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1279 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1280 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1281
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1282 void file_editor_tab::zoom_normal (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1283 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1284 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1285 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1286
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1287 _edit_area->zoomTo (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1288 auto_margin_width ();
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::handle_find_dialog_finished (int)
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 // Find dialog is going to hide. Save location of window for
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1294 // when it is reshown.
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1295 m_find_dlg_data.geometry = _find_dialog->geometry ();
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1296 m_find_dlg_data.is_visible = false;
24716
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
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1299 // Slot for initially creating and showing the find dialog
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1300 void file_editor_tab::find (const QWidget *ID, QList<QAction *> fetab_actions)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1301 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1302 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1303 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1304
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1305 m_find_dlg_data.actions = fetab_actions.mid (0,2);
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1306
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1307 // Create the dialog
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1308 find_create ();
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1309
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1310 // Since find_create shows the dialog without activating the widget
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1311 // (which is reuqired in other cases) do this manually here
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1312 _find_dialog->activateWindow ();
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1313
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1314 // Initiate search text from possible selection and save the initial
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1315 // data from the dialog on the defined structure
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1316 _find_dialog->init_search_text ();
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1317 _find_dialog->save_data (&m_find_dlg_data);
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1318 }
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1319
27247
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1320 void file_editor_tab::add_breakpoint_event (const bp_info& info)
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1321 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1322 octave_link::post_event
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1323 ([this, info] (void)
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1324 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1325 bp_table::intmap line_info;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1326 line_info[0] = info.line;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1327
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1328 if (octave_qt_link::file_in_path (info.file, info.dir))
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1329 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1330 bp_table& bptab = __get_bp_table__ ("file_editor_tab::add_breakpoint_event");
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1331
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1332 bp_table::intmap bpmap
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1333 = bptab.add_breakpoint (info.function_name, "", line_info, info.condition);
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1334
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1335 // Store some info breakpoint
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1336 if (m_breakpoint_info.remove_next && (bpmap.size() > 0))
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1337 {
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1338 bp_table::intmap::iterator bp_it = bpmap.begin();
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1339 m_breakpoint_info.remove_line = bp_it->second;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1340 m_breakpoint_info.remove_next = false;
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1341 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1342 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1343 });
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1344 }
9e5a825bb966 replace more explicit callback functions with lambda expressions
John W. Eaton <jwe@octave.org>
parents: 27209
diff changeset
1345
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1346 // This methos creates the find dialog in way that is at first suitable
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1347 // for re-creating it after the toplevel of the editor has changed.
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1348 // The find dialog is initially creatied, activated and shown with find ()
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1349 void file_editor_tab::find_create ()
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1350 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1351 // The find_dialog feature doesn't need a slot for return info.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1352 // Rather than Qt::DeleteOnClose, let the find feature hang about
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1353 // in case it contains useful information like previous searches
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1354 // and so on. Perhaps one find dialog for the whole editor is
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1355 // better, but individual find dialogs has the nice feature of
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1356 // retaining position per file editor tabs, which can be undocked.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1357
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1358 if (! _find_dialog)
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 _find_dialog = new find_dialog (_edit_area,
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1361 m_find_dlg_data.actions,
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1362 this);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1363 connect (_find_dialog, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1364 this, SLOT (handle_find_dialog_finished (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1365
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1366 connect (this, SIGNAL (request_find_next ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1367 _find_dialog, SLOT (find_next ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1368
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1369 connect (this, SIGNAL (request_find_previous ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1370 _find_dialog, SLOT (find_prev ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1371
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1372 _find_dialog->setWindowModality (Qt::NonModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1373 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1374 else if (! _find_dialog->isVisible ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1375 {
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1376 _find_dialog->setGeometry (m_find_dlg_data.geometry);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1377 QPoint p = _find_dialog->pos ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1378 _find_dialog->move (p.x ()+10, p.y ()+10);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1379 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1380
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
1381 _find_dialog->setAttribute(Qt::WA_ShowWithoutActivating);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1382 _find_dialog->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1383 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1384
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1385 void file_editor_tab::find_next (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1386 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1387 if (ID == this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1388 emit request_find_next ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1389 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1390
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1391 void file_editor_tab::find_previous (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1392 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1393 if (ID == this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1394 emit request_find_previous ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1395 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1396
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1397 void file_editor_tab::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
1398 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1399 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1400 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1401
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1402 if (m_bp_restore_count > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1403 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1404 // 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
1405 // 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
1406 m_bp_restore_count--;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1407 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1408 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1409
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1410 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
1411 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1412 bool ok = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1413 int index;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1414 _edit_area->getCursorPosition (&line, &index);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1415 line = QInputDialog::getInt (_edit_area, tr ("Goto line"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1416 tr ("Line number"), line+1, 1,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1417 _edit_area->lines (), 1, &ok);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1418 if (ok)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1419 _edit_area->setCursorPosition (line-1, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1420 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1421 else // go to given line without dialog
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1422 _edit_area->setCursorPosition (line-1, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1423
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1424 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
1425 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1426
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1427 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
1428 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1429 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1430 return;
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 if (select)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1433 _edit_area->selectToMatchingBrace ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1434 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1435 _edit_area->moveToMatchingBrace ();
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::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
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 QsciScintilla::AutoCompletionSource s = _edit_area->autoCompletionSource ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1444 switch (s)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1445 {
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1446 case QsciScintilla::AcsAll:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1447 _edit_area->autoCompleteFromAll ();
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1448 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1449
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1450 case QsciScintilla::AcsAPIs:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1451 _edit_area->autoCompleteFromAPIs ();
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1452 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1453
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1454 case QsciScintilla::AcsDocument:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1455 _edit_area->autoCompleteFromDocument ();
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1456 break;
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1457
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1458 case QsciScintilla::AcsNone:
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
1459 break;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1460 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1461 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1462
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1463 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
1464 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1465 // FIXME:
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1466 _edit_area->beginUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1467
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1468 if (_edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1469 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1470 int lineFrom, lineTo, colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1471 _edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1472
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1473 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
1474 lineTo--; // stop at line above
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 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
1477 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1478 if (indent)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1479 _edit_area->indent (i);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1480 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1481 _edit_area->unindent (i);
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 //set selection on (un)indented section
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1484 _edit_area->setSelection (lineFrom, 0, lineTo,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1485 _edit_area->text (lineTo).length ()-1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1486 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1487 else
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 int cpline, col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1490 _edit_area->getCursorPosition (&cpline, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1491 if (indent)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1492 _edit_area->indent (cpline);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1493 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1494 _edit_area->unindent (cpline);
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1497 _edit_area->endUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1498 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1499
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1500 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
1501 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1502 _edit_area->beginUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1503
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1504 int lineFrom, lineTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1505
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1506 if (_edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1507 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1508 int colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1509 _edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1510
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1511 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
1512 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1513 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1514 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1515 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1516 int col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1517 _edit_area->getCursorPosition (&lineFrom, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1518
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1519 lineTo = lineFrom;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1522 _edit_area->smart_indent_line_or_selected_text (lineFrom, lineTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1523
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1524 _edit_area->endUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1525 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1526
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1527 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
1528 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1529 QRegExp rxc;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1530 QString ws = "^([ \\t]*)";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1531 QStringList comment_str = _edit_area->comment_string (comment);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1532 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
1533
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1534 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1535 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1536 if (input_str)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1537 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1538 bool ok;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1539 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1540
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1541 used_comment_str = QInputDialog::getText (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1542 this, tr ("Comment selected text"),
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1543 tr ("Comment string to use:\n"), QLineEdit::Normal,
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
1544 settings->value (ed_last_comment_str, comment_str.at (0)).toString (),
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1545 &ok);
24716
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 ((! ok) || used_comment_str.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1548 return; // No input, do nothing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1549 else
25617
44d638d5eea5 reorganize constants for preferences keys and default values
Torsten <mttl@mailbox.org>
parents: 25566
diff changeset
1550 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
1551 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1552 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1553 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1554 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1555 // Uncommenting (several strings possible)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1556
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1557 // Sort strings according their length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1558 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
1559 bool inserted;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1560
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1561 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
1562 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1563 inserted = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1564 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
1565 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1566 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
1567 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1568 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
1569 inserted = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1570 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1571 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1572 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1573 if (! inserted)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1574 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
1575 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1576
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1577 // Create regular expression
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1578 QString regexp;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1579 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
1580 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1581 if (i > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1582 regexp = regexp + QString ("|");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1583 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
1584 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1585 rxc = QRegExp (ws + "(" + regexp + ")");
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 // Do the commenting/uncommenting
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1589 int len = 0, lenc = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1590 _edit_area->beginUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1591
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1592 if (_edit_area->hasSelectedText ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1593 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1594 int lineFrom, lineTo, colFrom, colTo;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1595 int change_col_from = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1596 int change_col_to = 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1597 bool removed;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1598
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1599 _edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1600
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1601 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
1602 lineTo--; // stop at line above
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1603
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1604 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
1605 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1606 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1607 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1608 _edit_area->insertAt (used_comment_str, i, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1609 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1610 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1611 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1612 QString line (_edit_area->text (i));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1613 if ((removed = line.contains (rxc)))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1614 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1615 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1616 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
1617 lenc = matched_text.remove (QRegExp (ws)).length (); // only comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1618 _edit_area->setSelection (i, len-lenc, i, len);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1619 _edit_area->removeSelectedText ();
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1622 // 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
1623 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
1624 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
1625 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
1626 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
1627 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1628 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1629
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1630 // update the selection area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1631 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1632 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1633 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
1634 if (colTo > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1635 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
1636 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1637 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
1638 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1639 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1640 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1641 if (colTo == 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1642 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
1643 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
1644 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
1645 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1646
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1647 // set updated selection area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1648 _edit_area->setSelection (lineFrom, colFrom, lineTo, colTo);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1649 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1650 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1651 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1652 int cpline, col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1653 _edit_area->getCursorPosition (&cpline, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1654 if (comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1655 _edit_area->insertAt (used_comment_str, cpline, 0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1656 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1657 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1658 QString line (_edit_area->text (cpline));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1659 if (line.contains (rxc))
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 len = rxc.matchedLength (); // complete length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1662 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
1663 lenc = matched_text.remove (QRegExp (ws)).length (); // only comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1664 _edit_area->setSelection (cpline, len-lenc, cpline, len);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1665 _edit_area->removeSelectedText ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1666 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1667 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1668 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1669 _edit_area->endUndoAction ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1670 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1671
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1672 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
1673 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1674 QString title ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1675 QString tooltip ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1676
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1677 if (! valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1678 title = tr ("<unnamed>");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1679 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1680 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1681 if (_long_title)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1682 title = _file_name;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1683 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1684 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1685 QFileInfo file (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1686 title = file.fileName ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1687 tooltip = _file_name;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1688 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1689 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1690
27053
1bdfd2b523c9 use tab icon for indicating a modified editor file (bug #56158)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27037
diff changeset
1691 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
1692 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1693
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1694 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
1695 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1696 _copy_available = enableCopy;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1697 emit editor_state_changed (_copy_available, _is_octave_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1698 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1699
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1700 // 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
1701 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
1702 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1703 dlg->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1704 if (modal)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1705 dlg->exec ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1706 else
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 dlg->setWindowModality (Qt::NonModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1709 dlg->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1710 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1711 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1712
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1713 int file_editor_tab::check_file_modified (void)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1714 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1715 int decision = QMessageBox::Yes;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1716 if (_edit_area->isModified ())
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 // 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
1719 // editor tab can't be made parent because it may be deleted depending
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1720 // upon the response. Instead, change the _edit_area to read only.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1721 QMessageBox::StandardButtons buttons = QMessageBox::Save |
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1722 QMessageBox::Discard |
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
1723 QMessageBox::Cancel;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1724
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1725 // 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
1726 // 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
1727 // 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
1728 QString available_actions =
19714
21015ca26566 Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19697
diff changeset
1729 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
1730
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1731 QString file;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1732 if (valid_file_name ())
17973
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1733 file = _file_name;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1734 else
17973
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1735 file = tr ("<unnamed>");
6925dca34807 fix saving unnamed editor files when closing octave (bug #40637)
Torsten <ttl@justmail.de>
parents: 17962
diff changeset
1736
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1737 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1738 = 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
1739 tr ("The file\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1740 " %1\n\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1741 "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
1742 "%2").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1743 arg (file). arg (available_actions),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1744 buttons, qobject_cast<QWidget *> (parent ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1745
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1746 msgBox->setDefaultButton (QMessageBox::Save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1747 _edit_area->setReadOnly (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1748 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1749 this, SLOT (handle_file_modified_answer (int)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1750
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1751 show_dialog (msgBox, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1752
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1753 if (_cancelled)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1754 return QMessageBox::Cancel;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1755 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1756 return decision;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1757 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1758 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1759 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1760 // Nothing was modified. Leave tab present in case user
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1761 // decides to cancel some point further along.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1762 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1763
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1764 return decision;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1765 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1766
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1767 void file_editor_tab::handle_file_modified_answer (int decision)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1768 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1769 if (decision == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1770 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1771 // Save file, but do not remove from editor.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1772 save_file (_file_name, false, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1773 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1774 else if (decision == QMessageBox::Discard)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1775 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1776 // User doesn't want to save, leave tab and remove subsequently.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1777 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1778 else
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 // User canceled, allow editing again.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1781 _edit_area->setReadOnly (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1782 _cancelled = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1783 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1784 }
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::set_modified (bool modified)
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 _edit_area->setModified (modified);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1789 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1790
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1791 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
1792 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1793 // reset the possibly still existing read only state
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1794 _edit_area->setReadOnly (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1795
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1796 // if we are in this slot and the list of breakpoint is not empty,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1797 // 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
1798 // 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
1799 // canceled this closing late on.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1800 check_restore_breakpoints ();
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1803 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
1804 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1805 if (! _bp_lines.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1806 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1807 // 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
1808 // 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
1809 remove_all_breakpoints (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1810
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1811 // and set breakpoints at the new linenumbers
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1812 m_bp_restore_count = _bp_lines.length ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1813 for (int i = 0; i < _bp_lines.length (); i++)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1814 handle_request_add_breakpoint (_bp_lines.value (i) + 1,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1815 _bp_conditions.value (i));
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 // Keep the list of breakpoints empty, except after explicit requests.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1818 _bp_lines.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1819 _bp_conditions.clear ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1820 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1821 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1822
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1823 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
1824 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1825 // get the absolute path
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1826 QFileInfo file_info = QFileInfo (fileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1827 QString file_to_load;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1828 if (file_info.exists ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1829 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
1830 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1831 file_to_load = fileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1832 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
1833 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
1834 return file.errorString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1835
26131
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1836 int col = 0, line = 0;
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1837 if (fileName == _file_name)
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1838 {
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1839 // We have to reload the current file, thus get current cursor position
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1840 line = _line;
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1841 col = _col;
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1842 }
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1843
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1844 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
1845
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1846 // read the file binary, decoding later
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1847 const QByteArray text_data = file.readAll ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1848
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1849 // decode
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1850 QTextCodec::ConverterState st;
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1851 QTextCodec *codec = QTextCodec::codecForName (_encoding.toLatin1 ());
26172
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1852 if (codec == nullptr)
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1853 codec = QTextCodec::codecForLocale ();
a7be718a9dd3 validate editor file codec derived from name (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26131
diff changeset
1854
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1855 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
1856 text_data.size(), &st);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1857
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1858 // Decoding with invalid characters?
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1859 if (st.invalidChars > 0)
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1860 {
25895
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1861 // Set read only
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1862 _edit_area->setReadOnly (true);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1863
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1864 // 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
1865 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
1866 "%1\n"
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1867 "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
1868 "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
1869 "cause data loss!")
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1870 .arg (file_to_load).arg (_encoding);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1871 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
1872 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
1873 msg_box->setText (msg);
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1874 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
1875 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
1876 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
1877 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
1878
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1879 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
1880 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
1881
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1882 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
1883 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
1884 msg_box->show ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1885 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1886
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1887 _edit_area->setText (text);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1888 _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
1889
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1890 QApplication::restoreOverrideCursor ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1891
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1892 _copy_available = false; // no selection yet available
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1893 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
1894 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
1895 _edit_area->setModified (false); // loaded file is not modified yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1896
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1897 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1898
26131
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1899 _edit_area->setCursorPosition (line, col);
22edc076543e restore line/column when reloading externally changed editor files (bug #54961)
Torsten <mttl@mailbox.org>
parents: 26119
diff changeset
1900
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1901 // FIXME: (BREAKPOINTS) At this point it would be nice to put any set
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1902 // breakpoints on the margin. In order to do this, somehow the
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1903 // "dbstatus" command needs to be accessed. All it would require is a
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1904 // routine that does "res = feval ("dbstatus") and signals that result
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1905 // to some slot.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1906 //
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1907 // See patch #8016 for a general way to get Octave results from
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1908 // commands processed in the background.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1909
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1910 /*
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1911 connect (octave_link, SIGNAL (fileSelected (QObject *, const QString&, const octave_value_list&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1912 this, SLOT (handle_feval_result (QObject *, const QString&, const octave_value_list&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1913 connect (this, SIGNAL (evaluate_octave_command (const QString&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1914 octave_link, SLOT (queue_octave_command (const QString&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1915
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1916 emit evaluate_octave_command ("dbstatus");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1917 */
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1918
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1919 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1920 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1921
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1922 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
1923 {
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1924 QString txt = btn->text ();
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1925
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1926 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
1927 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1928 // 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
1929 close ();
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1930 return;
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
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1933 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
1934 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1935 // 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
1936 QDialog dlg;
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1937 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
1938
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1939 QLabel *text
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1940 = 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
1941 "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
1942 "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
1943
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1944 QComboBox *enc_combo = new QComboBox ();
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1945 resource_manager::combo_encoding (enc_combo);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1946 _new_encoding = enc_combo->currentText ();
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1947 connect (enc_combo, SIGNAL (currentTextChanged (const QString&)),
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1948 this , SLOT (handle_current_enc_changed (const QString&)));
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 QDialogButtonBox *buttons
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1951 = 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
1952 Qt::Horizontal);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1953 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
1954 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
1955
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1956 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
1957 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
1958 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
1959 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
1960 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
1961 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
1962
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1963 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
1964
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1965 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
1966 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1967 // Reload the file with new encoding but using the same tab
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1968 QString reload_file_name = _file_name; // store file name
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1969 _file_name = ""; // force reuse of this tab when opening a new file
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1970 emit request_open_file (reload_file_name, _new_encoding);
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 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1973
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1974 // Continue editing, set writable again
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1975 _edit_area->setReadOnly (false);
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1976 }
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1977
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1978 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
1979 {
bb0c58796275 allow to change the encoding when editor detects decoding errors (bug #54607)
Torsten <mttl@mailbox.org>
parents: 25883
diff changeset
1980 _new_encoding = enc;
25883
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1981 }
cfdc768b661c allow native dialogs for remaining file open/save dialogs (bug #5
Torsten <mttl@mailbox.org>
parents: 25811
diff changeset
1982
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1983 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
1984 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1985 QByteArray text = _edit_area->text ().toLatin1 ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1986
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1987 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
1988 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
1989 QByteArray eol_crlf = eol_cr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1990 eol_crlf.append (eol_lf);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1991
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1992 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
1993 int count_lf = text.count (eol_lf) - count_crlf; // isolated lf
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1994 int count_cr = text.count (eol_cr) - count_crlf; // isolated cr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1995
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1996 // get default from OS or from settings
19248
54943eb0ce37 reorder eol modes in the editor settings
Torsten <ttl@justmail.de>
parents: 19247
diff changeset
1997 #if defined (Q_OS_WIN32)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
1998 int os_eol_mode = QsciScintilla::EolWindows;
19248
54943eb0ce37 reorder eol modes in the editor settings
Torsten <ttl@justmail.de>
parents: 19247
diff changeset
1999 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2000 int os_eol_mode = QsciScintilla::EolUnix;
19248
54943eb0ce37 reorder eol modes in the editor settings
Torsten <ttl@justmail.de>
parents: 19247
diff changeset
2001 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2002 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2003 QsciScintilla::EolMode eol_mode = static_cast<QsciScintilla::EolMode> (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2004 settings->value ("editor/default_eol_mode",os_eol_mode).toInt ());
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2005
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2006 int count_max = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2007
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2008 if (count_crlf > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2009 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2010 eol_mode = QsciScintilla::EolWindows;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2011 count_max = count_crlf;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2012 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2013 if (count_lf > count_max)
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 eol_mode = QsciScintilla::EolUnix;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2016 count_max = count_lf;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2017 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2018 if (count_cr > count_max)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2019 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2020 eol_mode = QsciScintilla::EolMac;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2021 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2022
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2023 return eol_mode;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2024 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2025
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2026 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
2027 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2028 switch (_edit_area->eolMode ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2029 {
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
2030 case QsciScintilla::EolWindows:
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
2031 _eol_indicator->setText ("CRLF");
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
2032 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
2033 case QsciScintilla::EolMac:
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
2034 _eol_indicator->setText ("CR");
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
2035 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
2036 case QsciScintilla::EolUnix:
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
2037 _eol_indicator->setText ("LF");
c766a1f63c40 detect eol mode when opening a file in the editor of the gui (#bug 43334)
Torsten <ttl@justmail.de>
parents: 18237
diff changeset
2038 break;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2039 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2040 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2041
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2042 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
2043 {
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2044 if (_file_name.isEmpty ())
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2045 return;
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2046
27255
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2047 // Create and queue the command object.
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 octave_link::post_event
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2050 ([this] (void)
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2051 {
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2052 // INTERPRETER THREAD
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2053
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2054 interpreter& interp
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2055 = __get_interpreter__ ("file_editor_tab::update_breakpoints");
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2056
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2057 octave_value_list argout = Fdbstatus (interp, ovl (), 1);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2058
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2059 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
2060 this, SLOT (update_breakpoints_handler (const octave_value_list&)),
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2061 Qt::QueuedConnection);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2062
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2063 emit update_breakpoints_signal (argout);
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2064 });
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2065 }
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2066
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2067 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
2068 {
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2069 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
2070 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
2071
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2072 Cell file = dbg.contents ("file");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2073 Cell line = dbg.contents ("line");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2074 Cell cond = dbg.contents ("cond");
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2075
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2076 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
2077 {
25923
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2078 if (file (i).string_value () == _file_name.toStdString ())
a7511a1489b8 call octave functions with return value from GUI (bug #47585)
Torsten <mttl@mailbox.org>
parents: 25914
diff changeset
2079 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
2080 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
2081 }
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2084 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
2085 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2086 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
2087
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2088 QSettings *settings = resource_manager::get_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2089
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2090 // 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
2091 // missing in the settings
19245
f3c4b48f3c53 add a preference for the default eol mode of new files (bug #43334)
Torsten <ttl@justmail.de>
parents: 19244
diff changeset
2092 #if defined (Q_OS_WIN32)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2093 int eol_mode = QsciScintilla::EolWindows;
19245
f3c4b48f3c53 add a preference for the default eol mode of new files (bug #43334)
Torsten <ttl@justmail.de>
parents: 19244
diff changeset
2094 #else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2095 int eol_mode = QsciScintilla::EolUnix;
19245
f3c4b48f3c53 add a preference for the default eol mode of new files (bug #43334)
Torsten <ttl@justmail.de>
parents: 19244
diff changeset
2096 #endif
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2097 _edit_area->setEolMode (
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2098 static_cast<QsciScintilla::EolMode> (
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2099 settings->value ("editor/default_eol_mode",eol_mode).toInt ()));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2100
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2101 update_eol_indicator ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2102
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2103 update_lexer ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2104
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2105 _edit_area->setText (commands);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2106 _edit_area->setModified (false); // new file is not modified yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2107 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2108
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2109 // Force reloading of a file after it is saved.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2110 // This is needed to get the right line numbers for breakpoints (bug #46632).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2111 bool file_editor_tab::exit_debug_and_clear (const QString& full_name_q,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2112 const QString& base_name_q)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2113 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2114 symbol_table& symtab
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2115 = __get_symbol_table__ ("file_editor_tab::exit_debug_and_clear");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2116
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2117 std::string base_name = base_name_q.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2118 octave_value sym;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2119 try
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2120 {
26654
c54953342372 don't go through scope to find function in file editor
John W. Eaton <jwe@octave.org>
parents: 26624
diff changeset
2121 sym = symtab.find_user_function (base_name);
24716
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 catch (const execution_exception& e)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2124 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2125 // Ignore syntax error.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2126 // It was in the old file on disk; the user may have fixed it already.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2127 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2128
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2129 // Return early if this file is not loaded in the symbol table
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2130 if (! sym.is_defined () || ! sym.is_user_code ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2131 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2132
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2133 octave_user_code *fcn = sym.user_code_value ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2134
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2135 std::string full_name = full_name_q.toStdString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2136 if (sys::canonicalize_file_name (full_name.c_str ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2137 != sys::canonicalize_file_name (fcn->fcn_file_name ().c_str ()))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2138 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2139
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2140 // If this file is loaded, check that we aren't currently running it
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2141 bool retval = true;
27209
ac92aa74fa1a eliminate some direct access to call stack in gui and octave_base_value
John W. Eaton <jwe@octave.org>
parents: 27198
diff changeset
2142
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2143 octave_idx_type curr_frame = -1;
27209
ac92aa74fa1a eliminate some direct access to call stack in gui and octave_base_value
John W. Eaton <jwe@octave.org>
parents: 27198
diff changeset
2144 tree_evaluator& tw
ac92aa74fa1a eliminate some direct access to call stack in gui and octave_base_value
John W. Eaton <jwe@octave.org>
parents: 27198
diff changeset
2145 = __get_evaluator__ ("file_editor_tab::exit_debug_and_clear");
ac92aa74fa1a eliminate some direct access to call stack in gui and octave_base_value
John W. Eaton <jwe@octave.org>
parents: 27198
diff changeset
2146 octave_map stk = tw.backtrace (curr_frame, false);
ac92aa74fa1a eliminate some direct access to call stack in gui and octave_base_value
John W. Eaton <jwe@octave.org>
parents: 27198
diff changeset
2147
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2148 Cell names = stk.contents ("name");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2149 for (octave_idx_type i = names.numel () - 1; i >= 0; i--)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2150 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2151 if (names(i).string_value () == base_name)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2152 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2153 int ans = QMessageBox::question (nullptr, tr ("Debug or Save"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2154 tr ("This file is currently being executed.\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2155 "Quit debugging and save?"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2156 QMessageBox::Save | QMessageBox::Cancel);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2157
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2158 if (ans == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2159 {
27255
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2160 emit debug_quit_signal ();
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2161
420611c61298 eliminate octave_cmd classes
John W. Eaton <jwe@octave.org>
parents: 27247
diff changeset
2162 // Wait until dbquit has actually occurred.
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2163 while (names.numel () > i)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2164 {
27102
84ff9953faa1 where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 27090
diff changeset
2165 sleep (0.01);
27209
ac92aa74fa1a eliminate some direct access to call stack in gui and octave_base_value
John W. Eaton <jwe@octave.org>
parents: 27198
diff changeset
2166 stk = tw.backtrace (curr_frame, false);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2167 names = stk.contents ("name");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2168 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2169 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2170 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2171 retval = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2172 break;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2173 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2174 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2175
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2176 // If we aren't currently running it, or have quit above, force a reload.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2177 if (retval == true)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2178 symtab.clear_user_function (base_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2179
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2180 return retval;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2181 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2182
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2183 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
2184 bool remove_on_success,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2185 bool restore_breakpoints)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2186 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2187 // 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
2188 // should be performed.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2189 if (! valid_file_name (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2190 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2191 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
2192 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2193 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2194
26393
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2195 _encoding = _new_encoding; // consider a possible new encoding
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2196
1e3c42fbf4d3 Don't overwrite content of non-encodable .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26376
diff changeset
2197 // 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
2198 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
2199 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
2200 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
2201
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2202 // Get a list of breakpoint line numbers, before exit_debug_and_clear().
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2203 emit report_marker_linenr (_bp_lines, _bp_conditions);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2204
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2205 // 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
2206 QFileInfo file_info = QFileInfo (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2207 QString file_to_save;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2208 if (file_info.exists ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2209 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2210 file_to_save = file_info.canonicalFilePath ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2211 // Force reparse of this function next time it is used (bug #46632)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2212 if ((Fisdebugmode ())(0).is_true ()
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2213 && ! exit_debug_and_clear (file_to_save, file_info.baseName ()))
23892
ba46a8015b26 close editor tab when related file is deleted in file browser (bug #43922)
Torsten <mttl@mailbox.org>
parents: 23810
diff changeset
2214 return;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2215 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2216 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2217 file_to_save = saveFileName;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2218 QFile file (file_to_save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2219
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2220 // stop watching file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2221 QStringList trackedFiles = _file_system_watcher.files ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2222 if (trackedFiles.contains (file_to_save))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2223 _file_system_watcher.removePath (file_to_save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2224
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2225 // open the file for writing
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2226 if (! file.open (QIODevice::WriteOnly))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2227 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2228 // 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
2229 // watched previously.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2230 if (trackedFiles.contains (file_to_save))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2231 _file_system_watcher.addPath (file_to_save);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2232
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2233 // 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
2234 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2235 = new QMessageBox (QMessageBox::Critical,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2236 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2237 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
2238 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
2239 QMessageBox::Ok, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2240 show_dialog (msgBox, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2241
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2242 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2243 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2244
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2245 // 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
2246
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2247 // write the file
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2248 QTextStream out (&file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2249 out.setCodec (codec);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2250
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2251 QApplication::setOverrideCursor (Qt::WaitCursor);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2252 out << _edit_area->text ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2253 out.flush ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2254 QApplication::restoreOverrideCursor ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2255 file.flush ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2256 file.close ();
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 // file exists now
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2259 file_info = QFileInfo (file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2260 file_to_save = file_info.canonicalFilePath ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2261
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2262 // save filename after closing file as set_file_name starts watching again
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2263 set_file_name (file_to_save); // make absolute
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2264
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2265 // 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
2266 update_window_title (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2267
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2268 // files is save -> not modified, update encoding in statusbar
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2269 _edit_area->setModified (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2270 _enc_indicator->setText (_encoding);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2271
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2272 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2273 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2274 emit tab_remove_request ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2275 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
2276 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2277
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2278 // 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
2279 // 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
2280 // 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
2281 if (restore_breakpoints)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2282 check_restore_breakpoints ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2283 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2284
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2285 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
2286 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2287 // 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
2288 // 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
2289
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2290 // reset _new_encoding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2291 _new_encoding = _encoding;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2292
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2293 // 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
2294 // can't be a parent.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2295 QFileDialog *fileDialog;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2296 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2297 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2298 // 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
2299 // has no effect. Disable editing instead.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2300 _edit_area->setReadOnly (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2301 fileDialog = new QFileDialog ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2302 }
18482
3a509de8e791 automatic completion list as user preference (bug #41469)
Torsten <ttl@justmail.de>
parents: 18460
diff changeset
2303 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2304 fileDialog = new QFileDialog (this);
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 // 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
2307 QStringList filters;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2308 filters << tr ("Octave Files (*.m)")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2309 << tr ("All Files (*)");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2310 fileDialog->setNameFilters (filters);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2311 fileDialog->setDefaultSuffix ("m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2312
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2313 if (valid_file_name ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2314 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2315 fileDialog->selectFile (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2316 QFileInfo file_info (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2317 if (file_info.suffix () != "m")
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2318 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2319 // 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
2320 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
2321 fileDialog->setDefaultSuffix (""); // no default suffix
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 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2325 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2326 fileDialog->selectFile ("");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2327 fileDialog->setDirectory (_ced);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2328
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2329 // 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
2330 QString fname = get_function_name ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2331 if (! fname.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2332 fileDialog->selectFile (fname + ".m");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2333 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2334
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2335 fileDialog->setAcceptMode (QFileDialog::AcceptSave);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2336 fileDialog->setViewMode (QFileDialog::Detail);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2337
26096
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2338 // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2339 if (! resource_manager::get_settings ()->value ("use_native_file_dialogs",
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2340 true).toBool ())
1002b49ce7b3 Make use of native file dialogs configurable (bug #54607).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 26065
diff changeset
2341 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
2342
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2343 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
2344 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
2345
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2346 if (remove_on_success)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2347 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2348 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
2349 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
2350
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2351 connect (fileDialog, SIGNAL (rejected ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2352 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
2353 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2354 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2355 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2356 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
2357 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
2358 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2359
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2360 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
2361 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2362
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2363 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
2364 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2365 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
2366
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2367 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
2368 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
2369
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2370 if (index > -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2371 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
2372 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2373 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
2374 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2375
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2376 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
2377 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2378 QFileInfo file = QFileInfo (file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2379 QString base_name = file.baseName ();
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 if ((file.suffix () == "m")
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2382 && (! valid_identifier (base_name.toStdString ())))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2383 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2384 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
2385 tr ("\"%1\"\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2386 "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
2387 "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
2388 "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
2389 "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
2390 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
2391
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2392 if (ans == QMessageBox::Yes)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2393 return true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2394 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2395
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2396 return false;
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
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2399 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
2400 {
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2401 QTextCodec *codec = QTextCodec::codecForName (_encoding.toLatin1 ());
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2402
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2403 // "SYSTEM" is used as alias for locale on windows systems,
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2404 // which might not support "SYSTEM" codec
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2405 if ((! codec) && (_encoding == "SYSTEM"))
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2406 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
2407
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2408 if (! codec)
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 QMessageBox::critical (nullptr,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2411 tr ("Octave Editor"),
25062
32a7222d637a [mq]: tr
Rik <rik@octave.org>
parents: 25054
diff changeset
2412 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
2413 "can not be applied.\n\n"
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2414 "Please select another one!").arg (_encoding));
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2415
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2416 return nullptr;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2417 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2418
26331
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2419 QString editor_text = _edit_area->text ();
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2420 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
2421
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2422 // 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
2423 // 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
2424 // implementations.
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2425 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
2426 {
26346
fd890481c408 file-editor-tab.cc: Use function available since Qt4.2.
Markus Mützel <markus.muetzel@gmx.de>
parents: 26331
diff changeset
2427 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
2428 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
2429 (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
2430
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2431 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
2432 char *res_str =
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2433 octave_u32_conv_to_encoding_strict (_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
2434 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
2435 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
2436 {
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2437 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
2438 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
2439 }
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2440 else
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2441 ::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
2442 }
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2443
5f10217b562d Use gnulib to check if encoding is possible (bug #55306).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26291
diff changeset
2444 if (! can_encode)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2445 {
26394
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2446 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
2447 = 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
2448 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
2449 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
2450 "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
2451 "Using it would result in data loss!\n\n"
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2452 "Please select another one!").arg (_encoding),
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2453 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
2454 QMessageBox::Cancel);
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2455
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2456 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
2457 return codec;
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2458 else
6323979ee312 Optionally, ignore data loss when saving .m file (bug #55364).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26393
diff changeset
2459 return nullptr;
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2460 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2461
26291
f73bcf1d0b5a make SYSTEM alias for locale encoding if not suported on windows (bug #55139)
Torsten <mttl@mailbox.org>
parents: 26172
diff changeset
2462 return codec;
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2465 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
2466 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2467 if (_save_as_desired_eol != _edit_area->eolMode ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2468 convert_eol (this,_save_as_desired_eol);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2469
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2470 if (saveFileName == _file_name)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2471 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2472 save_file (saveFileName);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2473 }
16702
553cfdd5d660 make white space visibility in the editor configurable
Torsten <ttl@justmail.de>
parents: 16701
diff changeset
2474 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2475 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2476 // 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
2477 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2478 save_file_as (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2479 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2480 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
2481 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2482 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2483
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2484 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
2485 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2486 if (_save_as_desired_eol != _edit_area->eolMode ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2487 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2488 _edit_area->setReadOnly (false); // was set to read-only in save_file_as
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2489 convert_eol (this,_save_as_desired_eol);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2490 _edit_area->setReadOnly (true); // restore read-only mode
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2491 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2492
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2493 // saveFileName == _file_name can not happen, because we only can get here
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2494 // when we close a tab and _file_name is not a valid filename yet
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2495
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2496 // 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
2497 if (check_valid_identifier (saveFileName))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2498 save_file_as (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2499 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2500 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
2501 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2502
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2503 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
2504 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2505 // User canceled, allow editing again.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2506 _edit_area->setReadOnly (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2507 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2508
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2509 void file_editor_tab::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
2510 {
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2511 bool file_exists = QFile::exists (_file_name);
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2512
25741
a3f2b06c599a fix broken file closing when deleted/renamed in file browser
Torsten <mttl@mailbox.org>
parents: 25646
diff changeset
2513 if (file_exists && ! do_close)
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2514 {
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2515 // Test if file is really modified or if just the timezone has
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2516 // changed. In the latter, just return without doing anything
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2517 QDateTime modified = QFileInfo (_file_name).lastModified ().toUTC ();
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2518
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2519 if (modified <= m_last_modified)
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2520 return;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2521
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2522 m_last_modified = modified;
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2523 }
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2524
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2525 // 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
2526 // 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
2527 // file watcher.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2528 QStringList trackedFiles = _file_system_watcher.files ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2529 if (! trackedFiles.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2530 _file_system_watcher.removePath (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2531
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2532 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
2533 {
25369
c89fa0989e7b prevent notifications on externally changed editor files (bug 53539)
Torsten <mttl@mailbox.org>
parents: 25336
diff changeset
2534
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2535 // The file is modified
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2536 if (_always_reload_changed_files)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2537 load_file (_file_name);
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 else
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 // 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
2542 // 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
2543 emit set_focus_editor_signal (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2544 _edit_area->setFocus ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2545
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2546 // Create a WindowModal message that blocks the edit area
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2547 // by making _edit_area parent.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2548 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2549 = new QMessageBox (QMessageBox::Warning,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2550 tr ("Octave Editor"),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2551 tr ("It seems that \'%1\' has been modified by another application. Do you want to reload it?").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2552 arg (_file_name),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2553 QMessageBox::Yes | QMessageBox::No, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2554
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2555 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2556 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
2557
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2558 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2559 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2560 msgBox->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2561 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2562 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2563 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2564 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2565 // 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
2566 // close the file without any user interaction
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2567 if (do_close && ! _edit_area->isModified ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2568 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2569 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
2570 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2571 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2572
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2573 // 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
2574 // 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
2575 emit set_focus_editor_signal (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2576 _edit_area->setFocus ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2577
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2578 QString modified = "";
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2579 if (_edit_area->isModified ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2580 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
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. The file editor tab can't be made
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2583 // parent because it may be deleted depending upon the response.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2584 // Instead, change the _edit_area to read only.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2585 QMessageBox *msgBox
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2586 = 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
2587 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
2588 "%1\n"
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2589 "has been deleted or renamed. Do you want to save it now?%2").
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2590 arg (_file_name).arg (modified),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2591 QMessageBox::Save | QMessageBox::Close, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2592
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2593 _edit_area->setReadOnly (true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2594
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2595 connect (msgBox, SIGNAL (finished (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2596 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
2597
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2598 msgBox->setWindowModality (Qt::WindowModal);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2599 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2600 msgBox->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2601 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2602 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2603
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2604 void file_editor_tab::notice_settings (const QSettings *settings, bool init)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2605 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2606 // QSettings pointer is checked before emitting.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2607
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2608 if (! init)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2609 update_lexer_settings ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2610
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2611 // code folding
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2612 if (settings->value ("editor/code_folding",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2613 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2614 _edit_area->setMarginType (3, QsciScintilla::SymbolMargin);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2615 _edit_area->setFolding (QsciScintilla::BoxedTreeFoldStyle , 3);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2616 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2617 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2618 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2619 _edit_area->setFolding (QsciScintilla::NoFoldStyle, 3);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2620 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2621
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2622 // status bar
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2623 if (settings->value ("editor/show_edit_status_bar",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2624 _status_bar->show ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2625 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2626 _status_bar->hide ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2627
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2628 //highlight current line color
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2629 QVariant default_var = QColor (240, 240, 240);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2630 QColor setting_color = settings->value ("editor/highlight_current_line_color",
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2631 default_var).value<QColor> ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2632 _edit_area->setCaretLineBackgroundColor (setting_color);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2633 _edit_area->setCaretLineVisible
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2634 (settings->value ("editor/highlightCurrentLine", true).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2635
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2636 bool match_keywords = settings->value
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2637 ("editor/codeCompletion_keywords",true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2638 bool match_document = settings->value
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2639 ("editor/codeCompletion_document",true).toBool ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2640
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2641 QsciScintilla::AutoCompletionSource source = QsciScintilla::AcsNone;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2642 if (match_keywords)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2643 if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2644 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
2645 else
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2646 source = QsciScintilla::AcsAPIs;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2647 else if (match_document)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2648 source = QsciScintilla::AcsDocument;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2649 _edit_area->setAutoCompletionSource (source);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2650
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2651 _edit_area->setAutoCompletionReplaceWord
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2652 (settings->value ("editor/codeCompletion_replace",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2653 _edit_area->setAutoCompletionCaseSensitivity
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2654 (settings->value ("editor/codeCompletion_case",true).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2655
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2656 if (settings->value ("editor/codeCompletion", true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2657 _edit_area->setAutoCompletionThreshold
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2658 (settings->value ("editor/codeCompletion_threshold",2).toInt ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2659 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2660 _edit_area->setAutoCompletionThreshold (-1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2661
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2662 if (settings->value ("editor/show_white_space",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2663 if (settings->value ("editor/show_white_space_indent",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2664 _edit_area->setWhitespaceVisibility (QsciScintilla::WsVisibleAfterIndent);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2665 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2666 _edit_area->setWhitespaceVisibility (QsciScintilla::WsVisible);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2667 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2668 _edit_area->setWhitespaceVisibility (QsciScintilla::WsInvisible);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2669
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2670 _edit_area->setEolVisibility (
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2671 settings->value ("editor/show_eol_chars",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2672
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2673 if (settings->value ("editor/showLineNumbers", true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2674 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2675 _edit_area->setMarginLineNumbers (2, true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2676 auto_margin_width ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2677 connect (_edit_area, SIGNAL (linesChanged ()),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2678 this, SLOT (auto_margin_width ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2679 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2680 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2681 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2682 _edit_area->setMarginLineNumbers (2, false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2683 disconnect (_edit_area, SIGNAL (linesChanged ()), nullptr, nullptr);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2684 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2685
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2686 _smart_indent = settings->value ("editor/auto_indent",true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2687 _edit_area->setAutoIndent (_smart_indent);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2688 _edit_area->setTabIndents
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2689 (settings->value ("editor/tab_indents_line",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2690 _edit_area->setBackspaceUnindents
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2691 (settings->value ("editor/backspace_unindents_line",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2692 _edit_area->setIndentationGuides
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2693 (settings->value ("editor/show_indent_guides",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2694 _edit_area->setIndentationsUseTabs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2695 (settings->value ("editor/indent_uses_tabs",false).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2696 _edit_area->setIndentationWidth
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2697 (settings->value ("editor/indent_width",2).toInt ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2698
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2699 _edit_area->setTabWidth
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2700 (settings->value ("editor/tab_width",2).toInt ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2701
27198
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
2702 m_ind_char_width = 1;
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
2703 if (_edit_area->indentationsUseTabs ())
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
2704 m_ind_char_width = _edit_area->tabWidth ();
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
2705
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2706 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETHSCROLLBAR,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2707 settings->value ("editor/show_hscroll_bar",true).toBool ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2708 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTH,-1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2709 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTHTRACKING,true);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2710
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2711 _long_title = settings->value ("editor/longWindowTitle", false).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2712 update_window_title (_edit_area->isModified ());
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2713
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2714 _auto_endif = settings->value ("editor/auto_endif",1).toInt ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2715
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2716 // long line marker
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2717 int line_length = settings->value ("editor/long_line_column",80).toInt ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2718 _edit_area->setEdgeColumn (line_length);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2719
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2720 if (settings->value ("editor/long_line_marker",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2721 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2722 if (settings->value ("editor/long_line_marker_line",true).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2723 _edit_area->setEdgeMode (QsciScintilla::EdgeLine);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2724 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2725 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2726 if (settings->value ("editor/long_line_marker_background",false)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2727 .toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2728 _edit_area->setEdgeMode (QsciScintilla::EdgeBackground);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2729 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2730 _edit_area->setEdgeMode (QsciScintilla::EdgeLine);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2731 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2732 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2733 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2734 _edit_area->setEdgeMode (QsciScintilla::EdgeNone);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2735
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2736 // line wrapping and breaking
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2737 _edit_area->setWrapVisualFlags (QsciScintilla::WrapFlagByBorder);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2738 _edit_area->setWrapIndentMode (QsciScintilla::WrapIndentSame);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2739
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2740 if (settings->value ("editor/wrap_lines",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2741 _edit_area->setWrapMode (QsciScintilla::WrapWord);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2742 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2743 _edit_area->setWrapMode (QsciScintilla::WrapNone);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2744
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2745 if (settings->value ("editor/break_lines",false).toBool ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2746 _line_break = line_length;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2747 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2748 _line_break = 0;
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 _line_break_comments =
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2751 settings->value ("editor/break_lines_comments",false).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2752
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2753 // highlight all occurrences of a word selected by a double click
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2754 _highlight_all_occurrences =
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2755 settings->value ("editor/highlight_all_occurrences", true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2756
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2757 // reload changed files
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2758 _always_reload_changed_files =
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2759 settings->value ("editor/always_reload_changed_files",false).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2760
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2761 // 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
2762 // 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
2763 // handling is required
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2764 bool cursor_blinking;
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 if (settings->contains ("cursor_blinking"))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2767 cursor_blinking = settings->value ("cursor_blinking",true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2768 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2769 cursor_blinking = settings->value ("terminal/cursorBlinking",true).toBool ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2770
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2771 if (cursor_blinking)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2772 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD,500);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2773 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2774 _edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD,0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2775
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2776 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2777
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2778
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2779 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
2780 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2781 _edit_area->setMarginWidth (2, "1" + QString::number (_edit_area->lines ()));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2782 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2783
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2784 // 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
2785 // 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
2786 // 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
2787 // 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
2788 // goes back to the sender
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2789 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
2790 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2791 return close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2792 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2793
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2794 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
2795 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2796 if (ID != this)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2797 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2798 // Widget may be going out of focus. If so, record location.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2799 if (_find_dialog)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2800 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2801 if (_find_dialog->isVisible ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2802 {
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
2803 m_find_dlg_data.geometry = _find_dialog->geometry ();
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2804 _find_dialog->hide ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2805 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2806 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2807 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2808 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2809
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
2810 if (_find_dialog && m_find_dlg_data.is_visible)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2811 {
27089
9326c2258e60 fix visibility of find dialog when editor is docked/undocked (bug #5)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27053
diff changeset
2812 _find_dialog->setGeometry (m_find_dlg_data.geometry);
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2813 QPoint p = _find_dialog->pos ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2814 _find_dialog->move (p.x ()+10, p.y ()+10);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2815 _find_dialog->show ();
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 emit editor_state_changed (_copy_available, _is_octave_file);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2819 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2820
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2821 void file_editor_tab::file_name_query (const QWidget *ID)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2822 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2823 // A zero (null pointer) means that all file editor tabs
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2824 // should respond, otherwise just the desired file editor tab.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2825 if (ID != this && ID != nullptr)
15848
424edeca3c66 Redo portions of file editor to use more signals/slots rather than casting.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 15449
diff changeset
2826 return;
24716
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 // This list also includes windows with name ""
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2829 emit add_filename_to_list (_file_name, _encoding, this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2830 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2831
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2832 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
2833 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2834 if (decision == QMessageBox::Yes)
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 // reload: file is readded to the file watcher in set_file_name ()
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2837 load_file (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2838 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2839 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2840 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2841 // do not reload: readd to the file watche
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2842 _file_system_watcher.addPath (_file_name);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2843 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2844 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2845
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2846 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
2847 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2848 // 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
2849 if (decision == QMessageBox::Save)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2850 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2851 save_file (_file_name); // readds file to watcher in set_file_name ()
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2852 _edit_area->setReadOnly (false); // delete read only flag
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2853 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2854 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2855 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2856 // Definitely close the file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2857 // Set modified to false to prevent the dialog box when the close event
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2858 // is posted. If the user cancels the close in this dialog the tab is
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2859 // left open with a non-existing file.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2860 _edit_area->setModified (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2861 close ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2862 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2863 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2864
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2865 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
2866 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2867 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2868 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2869
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2870 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
2871
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2872 if (line > 0)
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 marker *dp;
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 (_edit_area->isModified ())
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 // The best that can be done if the editor contents has been
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2879 // 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
2880 // 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
2881 // 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
2882 // 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
2883 // number match.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2884 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2885 marker *dummy;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2886 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
2887 if (editor_linenr != -1)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2888 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2889 // Match with an existing breakpoint.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2890 dp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2891 marker::debugger_position, editor_linenr);
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 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2894 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2895 int original_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2896 editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2897 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
2898 if (original_linenr >= 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2899 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2900 // 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
2901 int linenr_guess = editor_linenr + line - original_linenr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2902 dp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2903 marker::unsure_debugger_position,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2904 linenr_guess);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2905 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2906 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2907 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2908 // 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
2909 // line number.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2910 dp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2911 marker::unsure_debugger_position);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2912 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2913 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2914 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2915 else
27008
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2916 {
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2917 dp = new marker (_edit_area, line, marker::debugger_position);
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2918
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2919 // 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
2920 // 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
2921 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
2922 {
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2923 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
2924 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
2925 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
2926 }
e93b8887fedf remove additionally added breakpoint when stepping into a file (bug #44728)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 26975
diff changeset
2927 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2928
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2929 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
2930 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
2931 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
2932 dp, SLOT (handle_remove (void)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2933
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2934 center_current_line (false);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2935 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2936 }
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 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
2939 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2940 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2941 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2942
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2943 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2944 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
2945 }
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 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
2948 const QWidget *ID, int line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2949 const QString& cond)
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 if (ID != this || ID == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2952 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2953
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2954 if (line > 0)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2955 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2956 if (insert)
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 int editor_linenr = -1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2959 marker *bp = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2960
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2961 // 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
2962 // reuse it if possible
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2963 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
2964 if (bp != nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2965 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2966 if ((cond == "") != (bp->get_cond () == ""))
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2967 {
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
2968 // 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
2969 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
2970 bp = nullptr;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2971 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2972 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2973 bp->set_cond (cond);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2974 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2975
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2976 if (bp == nullptr)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2977 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2978 bp = new marker (_edit_area, line,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2979 cond == "" ? marker::breakpoint
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2980 : marker::cond_break, cond);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2981
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2982 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
2983 (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2984 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
2985 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
2986 (int)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2987 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
2988 (int)));
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2989 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
2990 bp, SLOT (handle_remove (void)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2991 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
2992 marker*&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2993 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
2994 marker*&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2995 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
2996 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
2997 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
2998 QStringList&)),
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
2999 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
3000 QStringList&)));
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3001 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
3002 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
3003 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3004 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3005 else
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3006 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
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3010 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
3011 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3012 long int visible_lines
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3013 = _edit_area->SendScintilla (QsciScintillaBase::SCI_LINESONSCREEN);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3014
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3015 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
3016 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3017 int line, index;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3018 _edit_area->getCursorPosition (&line, &index);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3019 // compensate for "folding":
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3020 // step 1: expand the current line, if it was folded
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3021 _edit_area->SendScintilla (2232, line); // SCI_ENSUREVISIBLE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3022
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3023 // step 2: map file line num to "visible" one // SCI_VISIBLEFROMDOCLINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3024 int vis_line = _edit_area->SendScintilla (2220, line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3025
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3026 int first_line = _edit_area->firstVisibleLine ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3027
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3028 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
3029 || 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
3030 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3031 first_line += (vis_line - first_line - (visible_lines - 1) / 2);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3032 _edit_area->SendScintilla (2613, first_line); // SCI_SETFIRSTVISIBLELINE
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3033 }
23237
904c8a356e76 provide the possibility for breaking lines only in comments (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23236
diff changeset
3034 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3035 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3036
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3037 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
3038 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3039 // the related signal is emitted before cursor-move-signal!
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3040 _lines_changed = true;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3041 }
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 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
3044 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3045 if (_edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCACTIVE))
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3046 show_auto_completion (this);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3047
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3048 if (_lines_changed) // cursor moved and lines have changed
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3049 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3050 _lines_changed = false;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3051 if (_is_octave_file && line == _line+1 && col < _col)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3052 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3053 // Obviously, we have a newline here
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3054 if (_smart_indent || _auto_endif)
27198
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
3055 _edit_area->smart_indent (_smart_indent, _auto_endif,
dffdabfd0213 fix cursor position for editor smart indent after keyword (bug #56533)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27160
diff changeset
3056 _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
3057 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3058 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3059
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3060 _line = line;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3061 _col = col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3062
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3063 _row_indicator->setNum (line+1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3064 _col_indicator->setNum (col+1);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3065 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3066
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3067 // 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
3068 // 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
3069 // The related signal is emitted after the signal for a moved cursor
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3070 // such that _col and _line can not be used for current position.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3071 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
3072 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3073 if (_line_break)
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3074 {
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3075 // 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
3076 // 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
3077 int line, col, pos;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3078 _edit_area->get_current_position (&pos, &line, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3079
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3080 // immediately return if line has not reached the max. line length
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3081 if (col <= _line_break)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3082 return;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3083
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3084 // 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
3085 // 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
3086 int style_comment = octave_qscintilla::ST_NONE;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3087 if (_line_break_comments)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3088 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3089 // line breaking only in comments, check for comment style
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3090 style_comment = _edit_area->is_style_comment ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3091 if (! style_comment)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3092 return; // no comment, return
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
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3095 // 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
3096 // For determining the position of a specific column, we have to get
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3097 // the column from the QScintila function without taking tab lengths
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3098 // into account, since the calculation from line/col to position ignores
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3099 // this, too
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3100 _edit_area->getCursorPosition (&line, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3101 int c = 0;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3102 int col_space = col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3103 int indentation = _edit_area->indentation (line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3104
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3105 // Search the first occurence of space or tab backwards starting from
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3106 // the current column (col_space).
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3107 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
3108 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3109 pos = _edit_area->positionFromLineIndex (line, col_space--);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3110 c = _edit_area->SendScintilla (QsciScintillaBase::SCI_GETCHARAT, pos);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3111 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3112
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3113 // 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
3114 // otherwise break at cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3115 int col_newline = col - 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3116 if (c == ' ' || c == '\t')
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3117 col_newline = col_space + 1;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3118
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3119 // 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
3120 // by a line comment string
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3121 QString newline = QString ("\n");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3122 style_comment = _edit_area->is_style_comment ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3123 if (style_comment == octave_qscintilla::ST_LINE_COMMENT)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3124 newline = newline + _edit_area->comment_string ().at (0);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3125 _edit_area->insertAt (newline, line, col_newline);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3126
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3127 // 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
3128 // and set the cursor position to the end of the indentation.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3129 _edit_area->setIndentation (line + 1, indentation);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3130 _edit_area->SendScintilla (QsciScintillaBase::SCI_LINEEND);
23181
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3131 }
78f04a9dfeee allow line breaking in the editor (bug #41555)
Torsten <mttl@mailbox.org>
parents: 23179
diff changeset
3132 }
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3133
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3134 // 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
3135 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
3136 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3137 if (! modifier)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3138 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3139 // double clicks without modifier
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3140 // clear any existing indicators of this type
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3141 _edit_area->clear_selection_markers ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3142
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3143 if (_highlight_all_occurrences)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3144 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3145 // Clear any previous selection.
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3146 _edit_area->set_word_selection ();
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 // 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
3149
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3150 // get the resulting cursor position
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3151 // (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
3152 int line, col;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3153 _edit_area->getCursorPosition (&line, &col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3154
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3155 // get the word at the cursor (if any)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3156 QString word = _edit_area->wordAtLineIndex (line, col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3157 word = word.trimmed ();
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 if (! word.isEmpty ())
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3160 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3161 // 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
3162
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3163 // remember first visible line for restoring the view afterwards
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3164 int first_line = _edit_area->firstVisibleLine ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3165
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3166 // 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
3167 bool find_result_available
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3168 = _edit_area->findFirst (word,
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3169 false, // no regexp
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3170 true, // case sensitive
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3171 true, // whole words only
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3172 false, // do not wrap
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3173 true, // forward
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3174 0,0, // from the beginning
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3175 false
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
3176 #if defined (HAVE_QSCI_VERSION_2_6_0)
24716
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3177 , true
23190
4a2c42792d6c highlight all occurrences of a selected word in the editor (bug #41470)
Torsten <mttl@mailbox.org>
parents: 23186
diff changeset
3178 #endif
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25070
diff changeset
3179 );
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 // 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
3182 int oline, ocol;
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3183 int wlen = word.length ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3184
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3185 while (find_result_available)
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3186 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3187 // get cursor position after having found an occurrence
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3188 _edit_area->getCursorPosition (&oline, &ocol);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3189 // mark the selection
27133
fbe46901ae62 fix editors search and replace in selection (bug #56405)
Torsten Lilge <ttl-octave@mailbox.org>
parents: 27102
diff changeset
3190 _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
3191
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3192 // find next occurrence
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3193 find_result_available = _edit_area->findNext ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3194 }
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 // 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
3197 // and the selection
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3198 _edit_area->setFirstVisibleLine (first_line);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3199 _edit_area->setCursorPosition (line, col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3200 _edit_area->setSelection (line, col - wlen, line, col);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3201 _edit_area->set_word_selection (word);
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3202 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3203 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3204 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3205 }
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 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
3208 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3209 QRegExp rxfun1 ("^[\t ]*function[^=]+=([^\\(]+)\\([^\\)]*\\)[\t ]*$");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3210 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
3211 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
3212 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
3213 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
3214
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3215 QStringList lines = _edit_area->text ().split ("\n");
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3216
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3217 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
3218 {
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3219 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
3220 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
3221 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
3222 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
3223 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
3224 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
3225 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
3226 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
3227 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
3228 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
3229 }
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3230
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3231 return QString ();
2b3e0b570e77 move GUI file editor classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 24666
diff changeset
3232 }
18834
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3233 }
0e6f7b5f6556 propose function name as file name when saving a new file (bug #42568)
Torsten <ttl@justmail.de>
parents: 18833
diff changeset
3234
15873
7d300b85ee25 allow build to proceed if either Qt or QScintilla is missing
John W. Eaton <jwe@octave.org>
parents: 15860
diff changeset
3235 #endif