aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/document.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-18 23:17:18 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-22 01:18:05 +0100
commit753dacacbcc2d45d35a044bfe2512fc4cd564b5c (patch)
tree0836f965a306b33449d60c4c7b579eab06f6bc2b /src/document.cpp
parente0a47e8fcd592585030384faf6d42a2bf74f43ad (diff)
downloadsciteco-753dacacbcc2d45d35a044bfe2512fc4cd564b5c.tar.gz
clean up QRegister vs. Buffer redundancies using TECODocument class
* also encapsulates data properly (previously there were many public attributes to avoid permission issues) * new class also cares about saving/and restoring scroll state. now, buffer/q-reg edits and temporary accesses do not reset the scroll state anymore.
Diffstat (limited to 'src/document.cpp')
-rw-r--r--src/document.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/document.cpp b/src/document.cpp
new file mode 100644
index 0000000..b6a99f5
--- /dev/null
+++ b/src/document.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2012-2013 Robin Haberkorn
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+
+#include <Scintilla.h>
+
+#include "sciteco.h"
+#include "interface.h"
+#include "undo.h"
+#include "document.h"
+
+void
+TECODocument::edit(void)
+{
+ if (!is_initialized())
+ doc = (SciDoc)interface.ssm(SCI_CREATEDOCUMENT);
+
+ interface.ssm(SCI_SETDOCPOINTER, 0, (sptr_t)doc);
+ interface.ssm(SCI_SETFIRSTVISIBLELINE, first_line);
+ interface.ssm(SCI_SETXOFFSET, xoffset);
+ interface.ssm(SCI_GOTOPOS, dot);
+}
+
+void
+TECODocument::undo_edit(void)
+{
+ undo.push_msg(SCI_GOTOPOS, dot);
+ undo.push_msg(SCI_SETXOFFSET, xoffset);
+ undo.push_msg(SCI_SETFIRSTVISIBLELINE, first_line);
+ undo.push_msg(SCI_SETDOCPOINTER, 0, (sptr_t)doc);
+}
+
+void
+TECODocument::update(void)
+{
+ dot = interface.ssm(SCI_GETCURRENTPOS);
+ first_line = interface.ssm(SCI_GETFIRSTVISIBLELINE);
+ xoffset = interface.ssm(SCI_GETXOFFSET);
+}
+
+/*
+ * Only for QRegisterStack::pop() which does some clever
+ * exchanging of document data (without any deep copying)
+ */
+void
+TECODocument::exchange(TECODocument &other)
+{
+ SciDoc temp_doc = doc;
+ gint temp_dot = dot;
+ gint temp_first_line = first_line;
+ gint temp_xoffset = xoffset;
+
+ doc = other.doc;
+ dot = other.dot;
+ first_line = other.first_line;
+ xoffset = other.xoffset;
+
+ other.doc = temp_doc;
+ other.dot = temp_dot;
+ other.first_line = temp_first_line;
+ other.xoffset = temp_xoffset;
+}