Mercurial > hg > octave-jordi
changeset 21008:ea50940c362f
added missing files for cset 0a09c3cae800 (bug #46779)
* marker.cc, marker.h
author | Torsten <ttl@justmail.de> |
---|---|
date | Tue, 29 Dec 2015 22:58:56 +0100 |
parents | 9c41a7ee5e14 |
children | 9b21039bf63b |
files | libgui/src/m-editor/marker.cc libgui/src/m-editor/marker.h |
diffstat | 2 files changed, 263 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/libgui/src/m-editor/marker.cc @@ -0,0 +1,178 @@ +/* + +Copyright (C) 2015 Daniel J. Sebald + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +<http://www.gnu.org/licenses/>. + +*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef HAVE_QSCINTILLA + +#include <stdio.h> + +#include "marker.h" + + +marker::marker (QsciScintilla *area, int original_linenr, editor_markers type, + int editor_linenr) : QObject () +{ + construct (area, original_linenr, type, editor_linenr); +} + + +marker::marker (QsciScintilla *area, int original_linenr, + editor_markers type) : QObject () +{ + construct (area, original_linenr, type, original_linenr - 1); +} + + +marker::~marker (void) +{ +} + + +void +marker::construct (QsciScintilla *area, int original_linenr, + editor_markers type, int editor_linenr) +{ + _edit_area = area; + _original_linenr = original_linenr; + _marker_type = type; + _mhandle = _edit_area->markerAdd (editor_linenr, _marker_type); +} + + +void +marker::handle_remove_via_original_linenr (int linenr) +{ + if (_original_linenr == linenr) + { + _edit_area->markerDeleteHandle(_mhandle); + delete this; + } +} + + +void +marker::handle_request_remove_via_editor_linenr (int linenr) +{ + // Get line number from the edit area and if it matches + // the requested line number, remove. + if (_edit_area->markerLine (_mhandle) == linenr) + { + // Rather than delete editor marker directly, issue command + // to Octave core. Octave core should signal back to remove + // this breakpoint via debugger line number. + emit request_remove (_original_linenr); + } +} + + +void +marker::handle_remove (void) +{ + _edit_area->markerDeleteHandle (_mhandle); + delete this; +} + + +void +marker::handle_find_translation (int linenr, int& translation_linenr) +{ + if (_original_linenr == linenr) + translation_linenr = _edit_area->markerLine (_mhandle); +} + + +void +marker::handle_find_just_before (int linenr, int& original_linenr, int& editor_linenr) +{ + if (_original_linenr < linenr && _original_linenr >= original_linenr) + { + original_linenr = _original_linenr; + editor_linenr = _edit_area->markerLine (_mhandle); + } +} + + +void +marker::handle_find_just_after (int linenr, int& original_linenr, int& editor_linenr) +{ + if (_original_linenr > linenr && _original_linenr <= original_linenr) + { + original_linenr = _original_linenr; + editor_linenr = _edit_area->markerLine (_mhandle); + } +} + + +void +marker::handle_report_editor_linenr (QIntList& list) +{ + list << _edit_area->markerLine (_mhandle); +} + + +void +marker::handle_marker_line_deleted (int mhandle) +{ + // FUTURE SUPPORT: There really should be a signal in QsciScintilla + // called markerLineDeleted (int mhandle) because there is no way + // of knowing this. QsciScintilla will place the marker at a + // different line rather than remove it from the margin. I (DJS) will + // lobby for such a signal. + if (_mhandle == mhandle) + { + if (_marker_type == breakpoint || _marker_type == debugger_position) + { + int editor_linenr = _edit_area->markerLine (_mhandle); + _edit_area->markerDeleteHandle(_mhandle); + _marker_type = _marker_type == breakpoint ? unsure_breakpoint + : unsure_debugger_position; + _mhandle = _edit_area->markerAdd (editor_linenr, _marker_type); + } + } +} + + +void +marker::handle_marker_line_undeleted (int mhandle) +{ + // FUTURE SUPPORT: There really should be a signal in QsciScintilla + // called markerLineUndeleted (int mhandle) because there is no way + // of knowing this. QsciScintilla will place the marker at a + // different line rather than remove it from the margin. I (DJS) will + // lobby for such a signal. + if (_mhandle == mhandle) + { + if (_marker_type == unsure_breakpoint || _marker_type == unsure_debugger_position) + { + int editor_linenr = _edit_area->markerLine (_mhandle); + _edit_area->markerDeleteHandle(_mhandle); + _marker_type = _marker_type == unsure_breakpoint ? breakpoint + : debugger_position; + _mhandle = _edit_area->markerAdd (editor_linenr, _marker_type); + } + } +} + +#endif
new file mode 100644 --- /dev/null +++ b/libgui/src/m-editor/marker.h @@ -0,0 +1,85 @@ +/* +Copyright (C) 2015 Daniel J. Sebald + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +<http://www.gnu.org/licenses/>. + +*/ + +#ifndef MARKER_H +#define MARKER_H + +#include <Qsci/qsciscintilla.h> +#include <QObject> + +// Defined for purposes of sending QList<int> as part of signal. +#include <QList> +typedef QList<int> QIntList; + +// The breakpoint class keeps track of the debug line number that Octave core +// uses and the handle of the marker inside the editor file. If the editor +// contents is modified, the debug line number and editor line number can be +// out of alignment. The marker handle can be used to retrieve the editor +// line. + +class marker; +class marker : public QObject +{ + Q_OBJECT + +public: + + enum editor_markers + { + bookmark, + breakpoint, + unsure_breakpoint, + debugger_position, + unsure_debugger_position + }; + + marker (QsciScintilla *edit_area, int original_linenr, + editor_markers marker_type); + marker (QsciScintilla *edit_area, int original_linenr, + editor_markers marker_type, int editor_linenr); + ~marker (void); + +public slots: + void handle_remove_via_original_linenr (int original_linenr); + void handle_request_remove_via_editor_linenr (int editor_linenr); + void handle_remove (void); + void handle_find_translation (int original_linenr, int& editor_linenr); + void handle_find_just_before (int linenr, int& original_linenr, int& editor_linenr); + void handle_find_just_after (int linenr, int& original_linenr, int& editor_linenr); +/* void handle_lines_changed (void);*/ + void handle_marker_line_deleted (int mhandle); + void handle_marker_line_undeleted (int mhandle); + void handle_report_editor_linenr (QIntList& int_list); + +signals: + void request_remove (int original_linenr); + +private: + void construct (QsciScintilla *edit_area, int original_linenr, + editor_markers marker_type, int editor_linenr); + + QsciScintilla * _edit_area; + int _original_linenr; + editor_markers _marker_type; + int _mhandle; +}; + +#endif // MARKER_H