[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ktexteditor-devel
Subject:    Re: Access to the currently displayed document range
From:       Michel Ludwig <michel.ludwig () kdemail ! net>
Date:       2008-04-07 20:09:34
Message-ID: 200804072109.35177.michel.ludwig () kdemail ! net
[Download RAW message or body]

On Tue 01 Apr 2008, Hamish Rodda wrote:>
> True, and same problem for non-fixed size fonts.  That's why block
> selection is also very hard.  So, ok then.

Attached is a patch which incorporates the latest changes.

Michel

["viewportinterface.patch" (text/x-diff)]

Index: interfaces/ktexteditor/viewportinterface.cpp
===================================================================
--- interfaces/ktexteditor/viewportinterface.cpp	(revision 0)
+++ interfaces/ktexteditor/viewportinterface.cpp	(revision 0)
@@ -0,0 +1,45 @@
+/* This file is part of the KDE libraries
+   Copyright (C) 2008 Michel Ludwig <michel.ludwig@kdemail.net>
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License version 2 as published by the Free Software Foundation.
+
+   This library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public License
+   along with this library; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+
+#include "viewportinterface.h"
+
+#include "range.h"
+
+using namespace KTextEditor;
+
+ViewportInterface::ViewportInterface()
+  : d(0)
+{
+}
+
+ViewportInterface::~ViewportInterface()
+{
+}
+
+QList<KTextEditor::Range> ViewportInterface::displayLineRanges() const
+{
+  QList<KTextEditor::Range> toReturn;
+  int numLines = displayLines(); 
+
+  for(int i = 0; i < numLines; ++i)
+  {
+    toReturn.append(displayLineRange(i));
+  }
+
+  return toReturn;
+}
Index: interfaces/ktexteditor/CMakeLists.txt
===================================================================
--- interfaces/ktexteditor/CMakeLists.txt	(revision 794532)
+++ interfaces/ktexteditor/CMakeLists.txt	(working copy)
@@ -17,6 +17,7 @@
    codecompletionmodel.cpp
    configinterface.cpp
    smartinterface.cpp
+   viewportinterface.cpp
    )
 
 
@@ -59,6 +60,7 @@
     codecompletionmodel.h
     configinterface.h
     containerinterface.h
+    viewportinterface.h
     DESTINATION  ${INCLUDE_INSTALL_DIR}/ktexteditor COMPONENT Devel)
 
 install( FILES ktexteditor.desktop ktexteditorplugin.desktop  DESTINATION  ${SERVICETYPES_INSTALL_DIR} )
Index: interfaces/ktexteditor/viewportinterface.h
===================================================================
--- interfaces/ktexteditor/viewportinterface.h	(revision 0)
+++ interfaces/ktexteditor/viewportinterface.h	(revision 0)
@@ -0,0 +1,142 @@
+/* This file is part of the KDE libraries
+   Copyright (C) 2008 Michel Ludwig <michel.ludwig@kdemail.net>
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License version 2 as published by the Free Software Foundation.
+
+   This library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public License
+   along with this library; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KDELIBS_KTEXTEDITOR_VIEWPORTINTERFACE_H
+#define KDELIBS_KTEXTEDITOR_VIEWPORTINTERFACE_H
+
+#include <ktexteditor/ktexteditor_export.h>
+
+class KConfigGroup;
+
+#include <QtCore/QList>
+#include <QtCore/QObject>
+
+namespace KTextEditor
+{
+
+class Range;
+class View;
+
+/**
+ * \brief Viewport interface extension for the View.
+ *
+ * \ingroup kte_group_view_extensions
+ *
+ * \section viewport_intro Introduction
+ *
+ * The ViewportInterface is an extension for Views which allows for notifications when the
+ * currently displayed document range changes.
+ *
+ * \section viewport_support Adding Viewport Support
+ *
+ * To add Viewport support a KTextEditor implementation has to derive the
+ * View class from ViewportInterface and reimplement the purely virtual methods defined
+ * in this interface.
+ *
+ * \section viewport_access Accessing the ViewportInterface
+ *
+ * The ViewportInterface is supposed to be an extension interface for a View, i.e. the
+ * View inherits the interface \e provided that it implements the interface. Use qobject_cast to
+ * access the implementation:
+ * \code
+ * // object is of type KTextEditor::View*
+ * KTextEditor::ViewportInterface *iface =
+ *     qobject_cast<KTextEditor::ViewportInterface*>( object );
+ *
+ * if( iface ) {
+ *     // interface is supported
+ *     // do stuff
+ * }
+ * \endcode
+ *
+ * \since 4.1
+ * \see KTextEditor::View
+ * \author Michel Ludwig \<michel.ludwig@kdemail.net\>
+ */
+class KTEXTEDITOR_EXPORT ViewportInterface
+{
+  public:
+    /**
+     * Constructor.
+     */
+    ViewportInterface();
+
+    /**
+     * Virtual destructor.
+     */
+    virtual ~ViewportInterface();
+
+  public:
+    //
+    // signals!!
+    //
+    /**
+     * This signal is emitted whenever the displayed document range in \p view
+     * changes.
+     *
+     * \param view View whose displayed document range has changed
+     * \warning This 'method' needs to be implemented as a signal!
+     * \since 4.1
+     */
+    virtual void displayRangeChanged(KTextEditor::View *view) = 0;
+
+  public:
+    /**
+     * Get the ranges of the document which are currently displayed in the View.
+     * The default implementation uses the displayLineRange(int line) function to
+     * retrieve the document range for a given line.
+     * Please note that the values for the columns returned are also of particular
+     * importance due to the dynamic word wrap feature, for example.
+     *
+     * \return Range of the document which is currently displayed
+     * \since 4.1
+     */
+    virtual QList<KTextEditor::Range> displayLineRanges() const;
+
+    /**
+     * Get the number of lines that are currently displayed in the View.
+     * \return Number of lines that are currently displayed
+     * \since 4.1
+     */
+    virtual int displayLines() const = 0;
+
+    /**
+     * Get the range of the document which is currently displayed at the given
+     * line in the View.
+     * Please note that the values for the columns returned are also of particular
+     * importance due to the dynamic word wrap feature, for example.
+     *
+     * \param line Line for which the displayed document range should be determined
+     * \return Range of the document which is currently displayed at the given line;
+     *         an invalid Range is returned when the given \p line parameter does not
+     *         specify a valid line
+     * \since 4.1
+     */
+    virtual KTextEditor::Range displayLineRange(int line) const = 0;
+
+   private:
+    class ViewportInterfacePrivate* const d;
+};
+
+}
+
+Q_DECLARE_INTERFACE(KTextEditor::ViewportInterface, "org.kde.KTextEditor.ViewportInterface")
+
+#endif
+
+// kate: space-indent on; indent-width 2; replace-tabs on;
Index: includes/KTextEditor/ViewportInterface
===================================================================
--- includes/KTextEditor/ViewportInterface	(revision 0)
+++ includes/KTextEditor/ViewportInterface	(revision 0)
@@ -0,0 +1 @@
+#include "../../ktexteditor/viewportinterface.h"
Index: includes/CMakeLists.txt
===================================================================
--- includes/CMakeLists.txt	(revision 794532)
+++ includes/CMakeLists.txt	(working copy)
@@ -810,6 +810,7 @@
   KTextEditor/TemplateInterface
   KTextEditor/TextHintInterface
   KTextEditor/VariableInterface
+  KTextEditor/ViewportInterface
   KTextEditor/View
 DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/KTextEditor )
 


_______________________________________________
KTextEditor-Devel mailing list
KTextEditor-Devel@kde.org
https://mail.kde.org/mailman/listinfo/ktexteditor-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic