UBKeyboardPalette.h 5.5 KB
Newer Older
Claudio Valerio's avatar
Claudio Valerio committed
1 2 3
#ifndef UBKEYBOARDPALETTE_H
#define UBKEYBOARDPALETTE_H

4
#include "UBActionPalette.h"
Claudio Valerio's avatar
Claudio Valerio committed
5 6 7 8 9 10 11 12 13 14 15

#include <QLayout>
#include <QPainter>
#include <QMenu>
#include <QIcon>

#include "frameworks/UBPlatformUtils.h"

class UBKeyButton;
class UBKeyboardButton;

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
class UBApplication;
class UBMainWindow;

class BTNImages
{
public:

    BTNImages(QString _strHeight, int _width, int _height);

    QString m_strHeight;
    int m_width;
    int m_height;

    QImage m_btnLeftPassive;
    QImage m_btnCenterPassive;
    QImage m_btnRightPassive;
    QImage m_btnLeftActive;
    QImage m_btnCenterActive;
    QImage m_btnRightActive;

private:
    QString m_strLeftPassive;
    QString m_strCenterPassive;
    QString m_strRightPassive;
    QString m_strLeftActive;
    QString m_strCenterActive;
    QString m_strRightActive;

};

class ContentImage
{
public:

    ContentImage(QString strHeight, int m_height, QString strContentPath);

    QString m_strHeight;
    int m_height;

    QImage m_btnContent;

private:
    QString m_strContent;
};

class UBKeyboardPalette : public UBActionPalette
Claudio Valerio's avatar
Claudio Valerio committed
62 63 64 65 66 67 68 69
{
    Q_OBJECT

friend class UBKeyboardButton;
friend class UBCapsLockButton;
friend class UBLocaleButton;

public:
70
    UBKeyboardPalette(QWidget *parent);
Claudio Valerio's avatar
Claudio Valerio committed
71 72
    ~UBKeyboardPalette();

73 74
    BTNImages *currBtnImages;

Claudio Valerio's avatar
Claudio Valerio committed
75 76 77 78 79
    bool isEnabled(){return locales!= NULL;}
    virtual QSize  sizeHint () const;
    virtual void adjustSizeAndPosition(bool pUp = true);
    QString getKeyButtonSize() const {QString res; res.sprintf("%dx%d", btnWidth, btnHeight); return res;}
    void setKeyButtonSize(const QString& strSize);
Anatoly Mihalchenko's avatar
Anatoly Mihalchenko committed
80 81 82

    bool m_isVisible;
    QPoint m_pos;
Claudio Valerio's avatar
Claudio Valerio committed
83 84 85 86 87 88 89 90 91 92 93

signals:
    void moved(const QPoint&);
    void localeChanged(int);
    void keyboardActivated(bool);

private slots:
    void syncPosition(const QPoint & pos);
    void syncLocale(int nLocale);
    void keyboardPaletteButtonSizeChanged(QVariant size);
    void onActivated(bool b);
94
    void onDeactivated();
Anatoly Mihalchenko's avatar
Anatoly Mihalchenko committed
95
    void showKeyboard(bool show);
96
    void hideKeyboard();
Claudio Valerio's avatar
Claudio Valerio committed
97 98 99 100 101 102 103

protected:
    bool capsLock;
    int nCurrentLocale;
    int nLocalesCount;
    UBKeyboardLocale** locales;

104
    QString strSize;
Claudio Valerio's avatar
Claudio Valerio committed
105 106
    int btnWidth;
    int btnHeight;
107
// 
Claudio Valerio's avatar
Claudio Valerio committed
108 109
    bool languagePopupActive;
    bool keyboardActive;
110
// 
Claudio Valerio's avatar
Claudio Valerio committed
111 112
    virtual void  enterEvent ( QEvent * event );
    virtual void  leaveEvent ( QEvent * event );
113
    virtual void  paintEvent(QPaintEvent *event);
Claudio Valerio's avatar
Claudio Valerio committed
114 115 116 117 118 119 120 121
    virtual void  moveEvent ( QMoveEvent * event );

    void sendKeyEvent(const KEYBT& keybt);

    void setLocale(int nLocale);

    const QString* getLocaleName();

122 123 124
    void init();

private:
Claudio Valerio's avatar
Claudio Valerio committed
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152

    QRect originalRect;

    UBKeyButton** buttons;
    UBKeyboardButton** ctrlButtons;

    void createCtrlButtons();

    void setInput(const UBKeyboardLocale* locale);

    // Can be redefined under each platform
    void onLocaleChanged(UBKeyboardLocale* locale);

    // Storage for platform-dependent objects (linux)
    void* storage;
    // Linux-related parameters
    int min_keycodes, max_keycodes, byte_per_code;

    // Save locale before activation to restore it after (MAC)
    QString activeLocale;

};

class UBKeyboardButton : public QWidget
{
    Q_OBJECT

public:
153
    UBKeyboardButton(UBKeyboardPalette* parent, QString contentImagePath);
Claudio Valerio's avatar
Claudio Valerio committed
154 155 156
    ~UBKeyboardButton();

protected:
157 158 159 160 161

    UBKeyboardPalette* m_parent;
    ContentImage *imgContent;
    QString m_contentImagePath;

Claudio Valerio's avatar
Claudio Valerio committed
162
    void paintEvent(QPaintEvent *event);
163

Claudio Valerio's avatar
Claudio Valerio committed
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
    virtual void  enterEvent ( QEvent * event );
    virtual void  leaveEvent ( QEvent * event );
    virtual void  mousePressEvent ( QMouseEvent * event );
    virtual void  mouseReleaseEvent ( QMouseEvent * event );

    virtual void onPress() = 0;
    virtual void onRelease() = 0;
    virtual void paintContent(QPainter& painter) = 0;

    bool capsLock(){return keyboard->capsLock;}

    UBKeyboardPalette* keyboard;

    void sendUnicodeSymbol(unsigned int nSymbol1, unsigned int nSymbol2, bool shift);
    void sendControlSymbol(int nSymbol);

private:
    bool bFocused;
    bool bPressed;
};

class UBKeyButton : public UBKeyboardButton
{
    Q_OBJECT

public:
    UBKeyButton(UBKeyboardPalette* parent);
    ~UBKeyButton();

    void setKeyBt(const KEYBT* keybt){this->keybt = keybt;}

    virtual void onPress();
    virtual void onRelease();
    virtual void paintContent(QPainter& painter);

private:
    const KEYBT* keybt;
};

class UBCntrlButton : public UBKeyboardButton
{
    Q_OBJECT

public:
208
    UBCntrlButton(UBKeyboardPalette* parent, int _code, const QString& _contentImagePath );
Claudio Valerio's avatar
Claudio Valerio committed
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
    UBCntrlButton(UBKeyboardPalette* parent, const QString& _label, int _code );
    ~UBCntrlButton();

    virtual void onPress();
    virtual void onRelease();
    virtual void paintContent(QPainter& painter);

private:
    QString label;
    int code;
};

class UBCapsLockButton : public UBKeyboardButton
{
    Q_OBJECT

public:
226
    UBCapsLockButton(UBKeyboardPalette* parent, const QString _contentImagePath);
Claudio Valerio's avatar
Claudio Valerio committed
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
    ~UBCapsLockButton();

    virtual void onPress();
    virtual void onRelease();
    virtual void paintContent(QPainter& painter);
};

class UBLocaleButton : public UBKeyboardButton
{
    Q_OBJECT

public:
    UBLocaleButton(UBKeyboardPalette* parent);
    ~UBLocaleButton();

    virtual void onPress();
    virtual void onRelease();
    virtual void paintContent(QPainter& painter);

protected:
247
    QMenu* localeMenu;
Claudio Valerio's avatar
Claudio Valerio committed
248 249 250
};

#endif // UBKEYBOARDPALETTE_H