# HG changeset patch # User Torsten # Date 1451426336 -3600 # Node ID ea50940c362ff074840014f5fed0e76976fd1e1e # Parent 9c41a7ee5e1444fe6888a6f3c74979b272469e2a added missing files for cset 0a09c3cae800 (bug #46779) * marker.cc, marker.h diff -r 9c41a7ee5e14 -r ea50940c362f libgui/src/m-editor/marker.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgui/src/m-editor/marker.cc Tue Dec 29 22:58:56 2015 +0100 @@ -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 +. + +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_QSCINTILLA + +#include + +#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 diff -r 9c41a7ee5e14 -r ea50940c362f libgui/src/m-editor/marker.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgui/src/m-editor/marker.h Tue Dec 29 22:58:56 2015 +0100 @@ -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 +. + +*/ + +#ifndef MARKER_H +#define MARKER_H + +#include +#include + +// Defined for purposes of sending QList as part of signal. +#include +typedef QList 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