• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • applications API Reference
  • KDE Home
  • Contact Us
 

Konsole

  • kde-4.14
  • applications
  • konsole
  • src
TerminalDisplayAccessible.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of Konsole, a terminal emulator for KDE.
3  *
4  * Copyright 2012 Frederik Gladhorn <gladhorn@kde.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301 USA.
20  */
21 
22 #include "TerminalDisplayAccessible.h"
23 
24 #if QT_VERSION >= 0x040800 // added in Qt 4.8.0
25 QString Q_GUI_EXPORT qTextBeforeOffsetFromString(int offset, QAccessible2::BoundaryType boundaryType,
26  int* startOffset, int* endOffset, const QString& text);
27 QString Q_GUI_EXPORT qTextAtOffsetFromString(int offset, QAccessible2::BoundaryType boundaryType,
28  int* startOffset, int* endOffset, const QString& text);
29 QString Q_GUI_EXPORT qTextAfterOffsetFromString(int offset, QAccessible2::BoundaryType boundaryType,
30  int* startOffset, int* endOffset, const QString& text);
31 #endif
32 
33 using namespace Konsole;
34 
35 TerminalDisplayAccessible::TerminalDisplayAccessible(TerminalDisplay* display)
36  : QAccessibleWidgetEx(display,
37 #if QT_VERSION > 0x040800 // added in Qt 4.8.1
38  QAccessible::Terminal
39 #else
40  QAccessible::EditableText
41 #endif
42  )
43  , QAccessibleSimpleEditableTextInterface(this)
44 {}
45 
46 int TerminalDisplayAccessible::characterCount()
47 {
48  return display()->_usedLines * display()->_usedColumns;
49 }
50 
51 int TerminalDisplayAccessible::cursorPosition()
52 {
53  if (!display()->screenWindow())
54  return 0;
55 
56  int offset = display()->_usedColumns * display()->screenWindow()->screen()->getCursorY();
57  return offset + display()->screenWindow()->screen()->getCursorX();
58 }
59 
60 void TerminalDisplayAccessible::selection(int selectionIndex, int* startOffset, int* endOffset)
61 {
62  *startOffset = 0;
63  *endOffset = 0;
64  if (!display()->screenWindow() || selectionIndex)
65  return;
66 
67  int startLine;
68  int startColumn;
69  int endLine;
70  int endColumn;
71  display()->screenWindow()->getSelectionStart(startColumn, startLine);
72  display()->screenWindow()->getSelectionEnd(endColumn, endLine);
73  if ((startLine == endLine) && (startColumn == endColumn))
74  return;
75  *startOffset = positionToOffset(startColumn, startLine);
76  *endOffset = positionToOffset(endColumn, endLine);
77 }
78 
79 int TerminalDisplayAccessible::selectionCount()
80 {
81  if (!display()->screenWindow())
82  return 0;
83 
84  int startLine;
85  int startColumn;
86  int endLine;
87  int endColumn;
88  display()->screenWindow()->getSelectionStart(startColumn, startLine);
89  display()->screenWindow()->getSelectionEnd(endColumn, endLine);
90  return ((startLine == endLine) && (startColumn == endColumn)) ? 0 : 1;
91 }
92 
93 QString TerminalDisplayAccessible::visibleText() const
94 {
95  // This function should be const to allow calling it from const interface functions.
96  TerminalDisplay* display = const_cast<TerminalDisplayAccessible*>(this)->display();
97  if (!display->screenWindow())
98  return QString();
99 
100  return display->screenWindow()->screen()->text(0, display->_usedColumns * display->_usedLines, true);
101 }
102 
103 void TerminalDisplayAccessible::addSelection(int startOffset, int endOffset)
104 {
105  if (!display()->screenWindow())
106  return;
107  display()->screenWindow()->setSelectionStart(columnForOffset(startOffset), lineForOffset(startOffset), false);
108  display()->screenWindow()->setSelectionEnd(columnForOffset(endOffset), lineForOffset(endOffset));
109 }
110 
111 QString TerminalDisplayAccessible::attributes(int offset, int* startOffset, int* endOffset)
112 {
113  // FIXME: this function should return css like attributes
114  // as defined in the web ARIA standard
115  Q_UNUSED(offset)
116  *startOffset = 0;
117  *endOffset = characterCount();
118  return QString();
119 }
120 
121 QRect TerminalDisplayAccessible::characterRect(int offset, QAccessible2::CoordinateType coordType)
122 {
123  int row = offset / display()->_usedColumns;
124  int col = offset - row * display()->_usedColumns;
125  QPoint position = QPoint(col * display()->fontWidth() , row * display()->fontHeight());
126  if(coordType == QAccessible2::RelativeToScreen)
127  position = display()->mapToGlobal(position);
128  return QRect(position, QSize(display()->fontWidth(), display()->fontHeight()));
129 }
130 
131 int TerminalDisplayAccessible::offsetAtPoint(const QPoint& point, QAccessible2::CoordinateType coordType)
132 {
133  // FIXME return the offset into the text from the given point
134  Q_UNUSED(point)
135  Q_UNUSED(coordType)
136  return 0;
137 }
138 
139 void TerminalDisplayAccessible::removeSelection(int selectionIndex)
140 {
141  if (!display()->screenWindow() || selectionIndex)
142  return;
143  display()->screenWindow()->clearSelection();
144 }
145 
146 void TerminalDisplayAccessible::scrollToSubstring(int startIndex, int endIndex)
147 {
148  // FIXME: make sure the string between startIndex and endIndex is visible
149  Q_UNUSED(startIndex)
150  Q_UNUSED(endIndex)
151 }
152 
153 void TerminalDisplayAccessible::setCursorPosition(int position)
154 {
155  if (!display()->screenWindow())
156  return;
157 
158  display()->screenWindow()->screen()->setCursorYX(lineForOffset(position), columnForOffset(position));
159 }
160 
161 void TerminalDisplayAccessible::setSelection(int selectionIndex, int startOffset, int endOffset)
162 {
163  if (selectionIndex)
164  return;
165  addSelection(startOffset, endOffset);
166 }
167 
168 QString TerminalDisplayAccessible::text(QAccessible::Text t, int child) const
169 {
170  if (t == QAccessible::Value && child == 0)
171  return visibleText();
172  return QAccessibleWidgetEx::text(t, child);
173 }
174 
175 QString TerminalDisplayAccessible::text(int startOffset, int endOffset)
176 {
177  if (!display()->screenWindow())
178  return QString();
179 
180  return display()->screenWindow()->screen()->text(startOffset, endOffset, true);
181 }
182 
183 QString TerminalDisplayAccessible::textAfterOffset(int offset, QAccessible2::BoundaryType boundaryType, int* startOffset, int* endOffset)
184 {
185  const QString text = visibleText();
186 #if QT_VERSION >= 0x040800 // added in Qt 4.8.0
187  return qTextAfterOffsetFromString(offset, boundaryType, startOffset, endOffset, text);
188 #else
189  return text;
190 #endif
191 }
192 
193 QString TerminalDisplayAccessible::textAtOffset(int offset, QAccessible2::BoundaryType boundaryType, int* startOffset, int* endOffset)
194 {
195  const QString text = visibleText();
196 #if QT_VERSION >= 0x040800 // added in Qt 4.8.0
197  return qTextAtOffsetFromString(offset, boundaryType, startOffset, endOffset, text);
198 #else
199  return text;
200 #endif
201 }
202 
203 QString TerminalDisplayAccessible::textBeforeOffset(int offset, QAccessible2::BoundaryType boundaryType, int* startOffset, int* endOffset)
204 {
205  const QString text = visibleText();
206 #if QT_VERSION >= 0x040800 // added in Qt 4.8.0
207  return qTextBeforeOffsetFromString(offset, boundaryType, startOffset, endOffset, text);
208 #else
209  return text;
210 #endif
211 }
212 
213 TerminalDisplay* TerminalDisplayAccessible::display()
214 {
215  return static_cast<TerminalDisplay*>(object());
216 }
Konsole::TerminalDisplayAccessible::attributes
QString attributes(int offset, int *startOffset, int *endOffset)
Definition: TerminalDisplayAccessible.cpp:111
Konsole::TerminalDisplayAccessible::selection
void selection(int selectionIndex, int *startOffset, int *endOffset)
Definition: TerminalDisplayAccessible.cpp:60
Konsole::ScreenWindow::setSelectionEnd
void setSelectionEnd(int column, int line)
Sets the end of the selection to the given line and column within the window.
Definition: ScreenWindow.cpp:146
Konsole::TerminalDisplayAccessible::text
QString text(QAccessible::Text t, int child) const
Definition: TerminalDisplayAccessible.cpp:168
Konsole::TerminalDisplayAccessible::offsetAtPoint
int offsetAtPoint(const QPoint &point, QAccessible2::CoordinateType coordType)
Definition: TerminalDisplayAccessible.cpp:131
Konsole::ScreenWindow::clearSelection
void clearSelection()
Clears the current selection.
Definition: ScreenWindow.cpp:170
Konsole::TerminalDisplayAccessible::addSelection
void addSelection(int startOffset, int endOffset)
Definition: TerminalDisplayAccessible.cpp:103
TerminalDisplayAccessible.h
QWidget::mapToGlobal
QPoint mapToGlobal(const QPoint &pos) const
Konsole::TerminalDisplayAccessible::textAtOffset
QString textAtOffset(int offset, QAccessible2::BoundaryType boundaryType, int *startOffset, int *endOffset)
Definition: TerminalDisplayAccessible.cpp:193
QPoint
Konsole::Screen::setCursorYX
void setCursorYX(int y, int x)
Position the cursor at line y, column x.
Definition: Screen.cpp:799
Konsole::TerminalDisplayAccessible::setCursorPosition
void setCursorPosition(int position)
Definition: TerminalDisplayAccessible.cpp:153
Konsole::Screen::text
QString text(int startIndex, int endIndex, bool preserveLineBreaks, bool trimTrailingSpaces=false) const
Convenience method.
Definition: Screen.cpp:1118
Konsole::TerminalDisplayAccessible::selectionCount
int selectionCount()
Definition: TerminalDisplayAccessible.cpp:79
QRect
Konsole::TerminalDisplayAccessible::removeSelection
void removeSelection(int selectionIndex)
Definition: TerminalDisplayAccessible.cpp:139
QAccessible
Konsole::TerminalDisplayAccessible::textBeforeOffset
QString textBeforeOffset(int offset, QAccessible2::BoundaryType boundaryType, int *startOffset, int *endOffset)
Definition: TerminalDisplayAccessible.cpp:203
QAccessibleWidgetEx
QString
QAccessibleSimpleEditableTextInterface
Konsole::TerminalDisplayAccessible::cursorPosition
int cursorPosition()
Definition: TerminalDisplayAccessible.cpp:51
Konsole::ScreenWindow::getSelectionEnd
void getSelectionEnd(int &column, int &line)
Retrieves the end of the selection within the window.
Definition: ScreenWindow.cpp:133
QSize
Konsole::ScreenWindow::getSelectionStart
void getSelectionStart(int &column, int &line)
Retrieves the start of the selection within the window.
Definition: ScreenWindow.cpp:128
Konsole::Screen::getCursorX
int getCursorX() const
Returns the column which the cursor is positioned at.
Definition: Screen.cpp:830
Konsole::TerminalDisplayAccessible::scrollToSubstring
void scrollToSubstring(int startIndex, int endIndex)
Definition: TerminalDisplayAccessible.cpp:146
Konsole::ScreenWindow::screen
Screen * screen() const
Returns the screen which this window looks onto.
Definition: ScreenWindow.cpp:53
Konsole::ScreenWindow::setSelectionStart
void setSelectionStart(int column, int line, bool columnMode)
Sets the start of the selection to the given line and column within the window.
Definition: ScreenWindow.cpp:138
Konsole::Screen::getCursorY
int getCursorY() const
Returns the line which the cursor is positioned on.
Definition: Screen.cpp:835
Konsole::TerminalDisplay::screenWindow
ScreenWindow * screenWindow() const
Returns the terminal screen section which is displayed in this widget.
Definition: TerminalDisplay.cpp:103
Konsole::TerminalDisplayAccessible::TerminalDisplayAccessible
TerminalDisplayAccessible(TerminalDisplay *display)
Definition: TerminalDisplayAccessible.cpp:35
Konsole::TerminalDisplayAccessible::textAfterOffset
QString textAfterOffset(int offset, QAccessible2::BoundaryType boundaryType, int *startOffset, int *endOffset)
Definition: TerminalDisplayAccessible.cpp:183
Konsole::TerminalDisplayAccessible
Class implementing the QAccessibleInterface for the terminal display.
Definition: TerminalDisplayAccessible.h:41
Konsole::TerminalDisplay
A widget which displays output from a terminal emulation and sends input keypresses and mouse activit...
Definition: TerminalDisplay.h:63
Konsole::TerminalDisplayAccessible::setSelection
void setSelection(int selectionIndex, int startOffset, int endOffset)
Definition: TerminalDisplayAccessible.cpp:161
Konsole::TerminalDisplayAccessible::characterRect
QRect characterRect(int offset, QAccessible2::CoordinateType coordType)
Definition: TerminalDisplayAccessible.cpp:121
Konsole::TerminalDisplayAccessible::characterCount
int characterCount()
Definition: TerminalDisplayAccessible.cpp:46
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Sat May 9 2020 03:56:27 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Konsole

Skip menu "Konsole"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

applications API Reference

Skip menu "applications API Reference"
  •   kate
  •       kate
  •   KTextEditor
  •   Kate
  • Konsole

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal