-rw-r--r-- | noncore/apps/opie-console/function_keyboard.cpp | 77 | ||||
-rw-r--r-- | noncore/apps/opie-console/function_keyboard.h | 33 |
2 files changed, 110 insertions, 0 deletions
diff --git a/noncore/apps/opie-console/function_keyboard.cpp b/noncore/apps/opie-console/function_keyboard.cpp new file mode 100644 index 0000000..a3da5b2 --- a/dev/null +++ b/noncore/apps/opie-console/function_keyboard.cpp @@ -0,0 +1,77 @@ +#include "function_keyboard.h" +#include <qsizepolicy.h> + +FunctionKeyboard::FunctionKeyboard(QWidget *parent) : + QFrame(parent), numRows(2), numCols(15), + pressedRow(0), pressedCol(0) { + + setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); + +} + +FunctionKeyboard::~FunctionKeyboard() { + +} + +void FunctionKeyboard::paintEvent(QPaintEvent *e) { + + QPainter p(this); + p.setClipRect(e->rect()); + p.fillRect(0, 0, width(), height(), QColor(255,255,255)); + + /* those decimals do count! becomes short if use plain int */ + for (double i = 0; i <= width(); i += keyWidth) { + + p.setPen(QColor(0,0,0)); + p.drawLine((int)i, 0, (int)i, height()); + } + + for (int i = 0; i <= height(); i += height()/numRows) { + + p.setPen(QColor(0,0,0)); + p.drawLine(0, i, width(), i); + } + +} + +void FunctionKeyboard::paintKey(int row, int col) { + + QPainter p(this); + p.fillRect(QRect(QPoint(col * keyWidth + 1, row * keyHeight + 1), + QPoint((col + 1) * keyWidth - 1, row * keyHeight + keyHeight- 1)), + (pressedRow != -1 && pressedCol != -1 ) ? QColor(97,119,155) : QColor(255,255,255)); +} + +void FunctionKeyboard::mousePressEvent(QMouseEvent *e) { + + pressedRow = e->y() / keyHeight; + pressedCol = e->x() / keyWidth; + + paintKey(pressedRow, pressedCol); +} + +void FunctionKeyboard::mouseReleaseEvent(QMouseEvent *) { + + if (pressedRow != -1 && pressedRow != -1) { + + int row = pressedRow; pressedRow = -1; + int col = pressedCol; pressedCol = -1; + paintKey(row, col); + } +} + + +void FunctionKeyboard::resizeEvent(QResizeEvent*) { + + /* set he default font height/width */ + QFontMetrics fm=fontMetrics(); + keyHeight = fm.lineSpacing() + 2; + keyWidth = (double)width()/numCols; + +} + +QSize FunctionKeyboard::sizeHint() const { + + return QSize(width(), keyHeight * numRows + 1); +} + diff --git a/noncore/apps/opie-console/function_keyboard.h b/noncore/apps/opie-console/function_keyboard.h new file mode 100644 index 0000000..f1ca037 --- a/dev/null +++ b/noncore/apps/opie-console/function_keyboard.h @@ -0,0 +1,33 @@ +#ifndef OPIE_FUNCTION_KEYBOARD_H +#define OPIE_FUNCTION_KEYBOARD_H + +#include <qframe.h> +#include <qpainter.h> + +class FunctionKeyboard : public QFrame { + Q_OBJECT + +public: + FunctionKeyboard(QWidget *parent = 0); + ~FunctionKeyboard(); + + void paintEvent(QPaintEvent *); + void paintKey(int, int); + void mousePressEvent(QMouseEvent*); + void mouseReleaseEvent(QMouseEvent*); + void resizeEvent(QResizeEvent*); + + + QSize sizeHint() const; + +private: + uint numRows; + uint numCols; + uint keyHeight; + double keyWidth; // decimal point matters! + + int pressedRow, pressedCol; + +}; + +#endif |