changeset 21009: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
--- /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
+<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
--- /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
+<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