diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /lib/kofficecore/kkbdaccessextensions.h | |
download | koffice-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.h | 175 |
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 <[email protected]> +* +* @author Gary Cramblitt <[email protected]> +* @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__ |