File indexing completed on 2024-04-28 05:50:55

0001 /*
0002  *  SPDX-FileCopyrightText: 2012 Frederik Gladhorn <gladhorn@kde.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef TERMINALDISPLAYACCESSIBLE_H
0008 #define TERMINALDISPLAYACCESSIBLE_H
0009 
0010 //#include <QtGlobal>
0011 
0012 #include <QAccessibleTextInterface>
0013 #include <QAccessibleWidget>
0014 
0015 #include "Screen.h"
0016 #include "ScreenWindow.h"
0017 #include "terminalDisplay/TerminalDisplay.h"
0018 
0019 namespace Konsole
0020 {
0021 /**
0022  * Class implementing the QAccessibleInterface for the terminal display.
0023  * This exposes information about the display to assistive technology using the QAccessible framework.
0024  *
0025  * Most functions are re-implemented from QAccessibleTextInterface.
0026  */
0027 class TerminalDisplayAccessible : public QAccessibleWidget, public QAccessibleTextInterface
0028 {
0029 public:
0030     explicit TerminalDisplayAccessible(TerminalDisplay *display);
0031 
0032     QString text(QAccessible::Text t) const override;
0033     QString text(int startOffset, int endOffset) const override;
0034     int characterCount() const override;
0035 
0036     int selectionCount() const override;
0037     void selection(int selectionIndex, int *startOffset, int *endOffset) const override;
0038     void addSelection(int startOffset, int endOffset) override;
0039     void setSelection(int selectionIndex, int startOffset, int endOffset) override;
0040     void removeSelection(int selectionIndex) override;
0041 
0042     QRect characterRect(int offset) const override;
0043     int offsetAtPoint(const QPoint &point) const override;
0044     void scrollToSubstring(int startIndex, int endIndex) override;
0045 
0046     QString attributes(int offset, int *startOffset, int *endOffset) const override;
0047 
0048     int cursorPosition() const override;
0049     void setCursorPosition(int position) override;
0050 
0051     void *interface_cast(QAccessible::InterfaceType type) override;
0052 
0053 private:
0054     Konsole::TerminalDisplay *display() const;
0055 
0056     inline int positionToOffset(int column, int line) const
0057     {
0058         return line * display()->_usedColumns + column;
0059     }
0060 
0061     inline int lineForOffset(int offset) const
0062     {
0063         return offset / display()->_usedColumns;
0064     }
0065 
0066     inline int columnForOffset(int offset) const
0067     {
0068         return offset % display()->_usedColumns;
0069     }
0070 
0071     QString visibleText() const;
0072 };
0073 } // namespace
0074 
0075 #endif // TERMINALDISPLAYACCESSIBLE_H