summaryrefslogtreecommitdiffstats
path: root/lib/kofficecore/kkbdaccessextensions.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /lib/kofficecore/kkbdaccessextensions.h
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'lib/kofficecore/kkbdaccessextensions.h')
-rw-r--r--lib/kofficecore/kkbdaccessextensions.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/lib/kofficecore/kkbdaccessextensions.h b/lib/kofficecore/kkbdaccessextensions.h
new file mode 100644
index 00000000..acca057c
--- /dev/null
+++ b/lib/kofficecore/kkbdaccessextensions.h
@@ -0,0 +1,175 @@
+/** @file
+* This file is part of the KDE/KOffice project.
+* Copyright (C) 2005, Gary Cramblitt <garycramblitt@comcast.net>
+*
+* @author Gary Cramblitt <garycramblitt@comcast.net>
+* @since KOffice 1.5
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Library General Public
+* License as published by the Free Software Foundation; either
+* version 2 of the License, or (at your option) any later version.
+*
+* 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 __KKBDACCESSEXTENSIONS_H__
+#define __KKBDACCESSEXTENSIONS_H__
+
+// Qt includes.
+#include <qobject.h>
+
+// KOffice includes.
+#include <koffice_export.h>
+
+class KKbdAccessExtensionsPrivate;
+class QWidgetList;
+class KMainWindow;
+
+/** KKbdAccessExtensions is an object that improves accessibility for motor impaired users
+* who may not be able to easily use a mouse. It adds two new capabilities using the keyboard:
+*
+* - Resizing and positioning of panel widgets derived from QSplitter and QDockWindow.
+* - Setting focus to any widget that accepts focus.
+*
+* @section sizing_mode Sizing Mode
+*
+* Users may press F8 or Shift-F8 (defaults) to enter sizing mode. A sizing icon appears on the first
+* QSplitter or QDockWindow handle found in the application (F8) or the last such handle (Shift+F8).
+* (A "handle" is the divider bar that appears to the left, right, above, or below each panel
+* of a QSplitter or QDockArea.)
+*
+* Once in sizing mode, the following functions are available via the keyboard:
+*
+* - F8 Moves to the next sizing handle. After the last handle, exits sizing mode.
+* - Shift+F8 Moves to the previous sizing handle. After the first handle, exits sizing mode.
+* - Esc Exits sizing mode.
+* - LeftArrow When on a vertical sizing handle, moves the handle to the left.
+* When on a horizontal sizing handle, moves the handle up.
+* - RightArrow When on a vertical sizing handle, moves the handle to the right.
+* When on a horizontal sizing handle, moves the handle down.
+* - UpArrow When on a vertical sizing handle, moves the handle to the left.
+* When on a horizontal sizing handle, moves the handle up.
+* - DownArrow When on a vertical sizing handle, moves the handle to the right.
+* When on a horizontal sizing handle, moves the handle down.
+* - PgUp Like LeftArrow or UpArrow, but moves the handle 5X farther to the left or up.
+* - PgDn Like RightArrow or DownArrow, but moves the handle 5X farther to the right or down.
+* - Enter (On numeric keypad). When on the handle of a QDockWindow, undocks or docks
+* the widget. Ignored when on the handle of a QSplitter.
+*
+* The default step size for each arrow key press is 10 pixels.
+*
+* When a QDockWindow is undocked, the sizing icon appears in the center of the window.
+* The arrow keys and PgUp/PgDn move the undocked window on the screen. Shifted arrow keys
+* and PgUp/PgDn decrease/increase the size of the undocked window.
+*
+* When the sizing icon is on a sizing handle, the mouse may also be used to move the handle
+* without having to click and drag. When moving the mouse while sizing icon is on an undocked
+* QDockWindow, the window moves with the mouse. Holding Shift down while moving the mouse
+* sizes the QDockWindow.
+*
+* @note Users can also move and size undocked windows using the Window Operations Menu (Alt+F3).
+*
+* Clicking any mouse button exits sizing mode.
+*
+* When entering sizing mode, the position of the mouse cursor is saved and restored when
+* exiting sizing mode.
+*
+* For a QSplitter or QDockWindow to be found, it must be in the kapp::allWidgets() list.
+*
+* @section focus_setting Focus Setting
+*
+* Users can press Alt-F8. A small box appears in the upperleft corner of each visible widget
+* on the screen that can accept focus. Each box is assigned a single letter or digit.
+* User can press the corresponding key to set focus to the widget.
+*
+* At most 36 such shortcuts are possible. If any application shortcuts are single letters
+* or digits, those shortcuts are not in any of the boxes.
+*
+* Clicking any mouse button exits Focus Setting mode.
+*
+* @section notes Notes
+*
+* The F8, Shift+F8, and Alt+F8 keys are KShortcuts and therefore user may choose different keys in
+* the application's Configure Shortcuts dialog.
+*
+* @note At present, these shortcuts may not be multi-key. If user sets multi-key
+* shortcuts, they will not work.
+*
+* F8/Shift+F8 are the default shortcuts because these are the keys used for similar
+* functionality in GNOME and Java SWT.
+*/
+class KOFFICECORE_EXPORT KKbdAccessExtensions : public QObject
+{
+ // TODO: A .moc isn't really needed right now, but see TODO in eventFilter method.
+ // Q_PROPERTY(int stepSize READ stepSize WRITE setStepSize)
+
+ public:
+ /** Constructor.
+ * @param parent KMainWindow of the application. Required.
+ * @param name (optional) Name of this object.
+ */
+ KKbdAccessExtensions(KMainWindow* parent, const char* name = 0);
+
+ /** Destructor. */
+ virtual ~KKbdAccessExtensions();
+
+ /** Returns number of pixels panel is sized for each arrow key pressed. Default is 10. */
+ int stepSize() const;
+ /** Sets number of pixels panel is sized for each arrow key pressed. */
+ void setStepSize(int s);
+
+ protected:
+ /** Event filter installed on kapp object. */
+ bool eventFilter( QObject *o, QEvent *e );
+
+ /** Retrieves a list of all Splitter and DockArea widgets in the application. */
+ QWidgetList* getAllPanels();
+ /** Advances to the next Panel handle. If not currently in resizing mode,
+ turns it on. */
+ void nextHandle();
+ /** Moves to the previous Panel handle. If not currently in resizing mode,
+ turns it on. */
+ void prevHandle();
+ /** Exits Sizing mode. */
+ void exitSizing();
+ /** Moves panel handle based on key pressed. */
+ void resizePanelFromKey(int key, int state);
+ /** Moves panel handle based on deltaX and deltaY and state of keyboard modifier keys. */
+ void resizePanel(int dx, int dy, int state);
+ /** Displays the sizer icon. */
+ void showIcon();
+ /** Hides the sizer icon. */
+ void hideIcon();
+
+ /** Displays the access keys. */
+ void displayAccessKeys();
+ /** Handles an access keypress. */
+ bool handleAccessKey( const QKeyEvent* ev );
+
+ private:
+ KKbdAccessExtensionsPrivate* d;
+};
+
+/** Provides a way to sort QLabelss using a QValueList based on their screen position. */
+class KSortedLabel
+{
+public:
+ KSortedLabel(QLabel* l);
+ KSortedLabel(); // default constructor
+ bool operator<( KSortedLabel l);
+ QLabel* label() { return m_l; }
+
+private:
+ QLabel* m_l;
+};
+
+#endif // __KKBDACCESSEXTENSIONS_H__