1 /*
2  *  SPDX-FileCopyrightText: 2012 Frederik Gladhorn <gladhorn@kde.org>
3  *
4  *  SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 
7 #ifndef TERMINALDISPLAYACCESSIBLE_H
8 #define TERMINALDISPLAYACCESSIBLE_H
9 
10 //#include <QtGlobal>
11 
12 #include <QAccessibleTextInterface>
13 #include <QAccessibleWidget>
14 
15 #include "Screen.h"
16 #include "ScreenWindow.h"
17 #include "terminalDisplay/TerminalDisplay.h"
18 
19 namespace Konsole
20 {
21 /**
22  * Class implementing the QAccessibleInterface for the terminal display.
23  * This exposes information about the display to assistive technology using the QAccessible framework.
24  *
25  * Most functions are re-implemented from QAccessibleTextInterface.
26  */
27 class TerminalDisplayAccessible : public QAccessibleWidget, public QAccessibleTextInterface
28 {
29 public:
30     explicit TerminalDisplayAccessible(TerminalDisplay *display);
31 
32     QString text(QAccessible::Text t) const override;
33     QString text(int startOffset, int endOffset) const override;
34     int characterCount() const override;
35 
36     int selectionCount() const override;
37     void selection(int selectionIndex, int *startOffset, int *endOffset) const override;
38     void addSelection(int startOffset, int endOffset) override;
39     void setSelection(int selectionIndex, int startOffset, int endOffset) override;
40     void removeSelection(int selectionIndex) override;
41 
42     QRect characterRect(int offset) const override;
43     int offsetAtPoint(const QPoint &point) const override;
44     void scrollToSubstring(int startIndex, int endIndex) override;
45 
46     QString attributes(int offset, int *startOffset, int *endOffset) const override;
47 
48     int cursorPosition() const override;
49     void setCursorPosition(int position) override;
50 
51     void *interface_cast(QAccessible::InterfaceType type) override;
52 
53 private:
54     Konsole::TerminalDisplay *display() const;
55 
positionToOffset(int column,int line)56     inline int positionToOffset(int column, int line) const
57     {
58         return line * display()->_usedColumns + column;
59     }
60 
lineForOffset(int offset)61     inline int lineForOffset(int offset) const
62     {
63         return offset / display()->_usedColumns;
64     }
65 
columnForOffset(int offset)66     inline int columnForOffset(int offset) const
67     {
68         return offset % display()->_usedColumns;
69     }
70 
71     QString visibleText() const;
72 };
73 } // namespace
74 
75 #endif // TERMINALDISPLAYACCESSIBLE_H
76