summaryrefslogtreecommitdiffstats
path: root/ktouch/src/ktouchkeyboardwidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'ktouch/src/ktouchkeyboardwidget.h')
-rw-r--r--ktouch/src/ktouchkeyboardwidget.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/ktouch/src/ktouchkeyboardwidget.h b/ktouch/src/ktouchkeyboardwidget.h
new file mode 100644
index 00000000..9ba71d8f
--- /dev/null
+++ b/ktouch/src/ktouchkeyboardwidget.h
@@ -0,0 +1,98 @@
+/***************************************************************************
+ * ktouchkeyboardwidget.h *
+ * ---------------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * haavard@users.sourceforge.net *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+
+#ifndef KTOUCHKEYBOARDWIDGET_H
+#define KTOUCHKEYBOARDWIDGET_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qwidget.h>
+#include <qvaluevector.h>
+#include <qmap.h>
+#include "ktouchkeys.h"
+
+#include "ktouchkey.h" // new class
+#include "ktouchkeyconnector.h" // new class
+
+class KURL;
+
+/** This is the keyboard widget at the bottom of the training screen.
+ * In addition to the painting functions this class has the member
+ * functions loadKeyboard() and saveKeyboard() which can read and write
+ * a keyboard layout from/into a file.<p>
+ * The keyboard is drawn in the paintEvent() member function. The
+ * resizing, that means the recalculation of m_shift is
+ * done in the resizeEvent() member function.<p>
+ * The state of keyboard and keys does not change while it is
+ * repainted or resized. Only when a new character has been typed
+ * and the newKey() slot is called the state changes (and thus the
+ * activated keys and finger key animations etc.)
+ */
+class KTouchKeyboardWidget : public QWidget {
+ Q_OBJECT
+ public:
+ /// Constructor
+ KTouchKeyboardWidget(QWidget *parent);
+ /// Reads a keyboard layout from the given URL.
+ /// The function returns 'true' when the reading was successful or 'false' if not. In this
+ /// case the optional parameter errorMsg contains the error message.
+ bool loadKeyboard(QWidget * window, const KURL& url, QString* errorMsg=NULL);
+ /// Saves the keyboard layout to the URL.
+ void saveKeyboard(QWidget * window, const KURL& url);
+ /// Applies preferences to the keyboard layout and the keys.
+ /// This means that the layout is basically recreated and if the layout type/language
+ /// changed it will be reloaded.
+ void applyPreferences(QWidget * window, bool silent);
+
+ public slots:
+ /// This function displays the next key (or key combination) the user has to press.
+ void newKey(const QChar& nextChar);
+
+ protected:
+ /// Draws the keyboard.
+ void paintEvent(QPaintEvent *);
+ /// Resizes (recalculates m_shift and m_scale) and redraws the keyboard.
+ void resizeEvent(QResizeEvent *);
+
+ private:
+ /// Does what the name says (create a default keyboard which is a number keypad).
+ /// This function is needed in case there no keyboard file could be found.
+ void createDefaultKeyboard();
+ /// Does the actual reading.
+ bool readKeyboard(const QString& fileName, QString& errorMsg);
+ /// Assigns the background colours to the normal keys, which have a finger key assigned.
+ void updateColours();
+
+ // *** new data storage classes ***
+ QValueVector<KTouchKey> m_keys; ///< The geometrical key data.
+ QValueVector<KTouchKeyConnector> m_keyConnections; ///< Contains the character - key associations.
+ QMap<unsigned int, int> m_keyMap; ///< Links target keys with finger keys: m_keyMap[target_key] = finger_key
+ QMap<unsigned int, unsigned int> m_colorMap; ///< Links finger keys with color indices: m_colorMap[finger_key] = color_index in color scheme
+
+ // *** old data storage classes ***
+ QPtrList<KTouchBaseKey> m_keyList; ///< The pointer list with base class pointers to the keys.
+ QValueList<KTouchKeyConnection> m_connectorList; ///< Contains the character - key associations.
+
+ static QMap<QChar, int> m_keyCharMap; ///< Links target keys with finger keys: m_keyCharMap[target_key_char] = color_index
+
+ int m_keyboardWidth; ///< The width of the keyboard (maximum of the sums of all keywidths in each line).
+ int m_keyboardHeight; ///< The height of the keyboard (sum of all key row heights).
+ double m_shift; ///< The horizontal shift for the keyboard.
+ QString m_currentLayout; ///< The name of the currently used layout.
+ QChar m_nextKey; ///< The next to be pressed character.
+
+ bool m_hideKeyboard; ///< If true, the keyboard won't be shown.
+};
+
+#endif // KTOUCHKEYBOARDWIDGET_H