/* This file is part of the KDE libraries Copyright (C) 1999 Reginald Stadlbauer 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 kcharselect_h #define kcharselect_h #include #include #include #include #include #include #include #include class QFont; class QFontDatabase; class QMouseEvent; class QSpinBox; class KCharSelectTablePrivate; class KCharSelectPrivate; /** * @short Character selection table * * A table widget which displays the characters of a font. Internally * used by KCharSelect. See the KCharSelect documentation for further * details. * * @author Reginald Stadlbauer */ class KDEUI_EXPORT KCharSelectTable : public QGridView { Q_OBJECT public: KCharSelectTable( QWidget *parent, const char *name, const QString &_font, const QChar &_chr, int _tableNum ); virtual QSize sizeHint() const; virtual void resizeEvent( QResizeEvent * ); virtual void setFont( const QString &_font ); virtual void setChar( const QChar &_chr ); virtual void setTableNum( int _tableNum ); virtual QChar chr() { return vChr; } protected: virtual void paintCell( class QPainter *p, int row, int col ); virtual void mousePressEvent( QMouseEvent *e ) { mouseMoveEvent( e ); } virtual void mouseDoubleClickEvent ( QMouseEvent *e ){ mouseMoveEvent( e ); emit doubleClicked();} virtual void mouseReleaseEvent( QMouseEvent *e ) { mouseMoveEvent( e ); emit activated( chr() ); emit activated(); } virtual void mouseMoveEvent( QMouseEvent *e ); virtual void keyPressEvent( QKeyEvent *e ); void gotoLeft(); void gotoRight(); void gotoUp(); void gotoDown(); QString vFont; QChar vChr; int vTableNum; QPoint vPos; QChar focusItem; QPoint focusPos; int temp; signals: void highlighted( const QChar &c ); void highlighted(); void activated( const QChar &c ); void activated(); void focusItemChanged(); void focusItemChanged( const QChar &c ); void tableUp(); void tableDown(); void doubleClicked(); private: virtual void setFont(const QFont &f) { QGridView::setFont(f); } void setToolTips(); protected: virtual void virtual_hook( int id, void* data ); private: KCharSelectTablePrivate* const d; }; /** * @short Character selection widget * * This widget allows the user to select a character of a * specified font in a table * * \image html kcharselect.png "Character Selection Widget" * * You can specify the font whose characters should be displayed via * setFont() or in the constructor. Using enableFontCombo() you can allow the * user to choose the font from a combob-box. As only 256 characters * are displayed at once in the table, using the spinbox on the top * the user can choose starting from which character the table * displays them. This spinbox also can be enabled or disabled using * enableTableSpinBox(). * * KCharSelect supports keyboard and mouse navigation. Click+Move * always selects the character below the mouse cursor. Using the * arrow keys moves the focus mark around and pressing RETURN * or SPACE selects the cell which contains the focus mark. * * To get the current selected character, use the chr() * method. You can set the character which should be displayed with * setChar() and the table number which should be displayed with * setTableNum(). * * @author Reginald Stadlbauer */ class KDEUI_EXPORT KCharSelect : public QVBox { Q_OBJECT Q_PROPERTY( QString fontFamily READ font WRITE setFont ) Q_PROPERTY( int tableNum READ tableNum WRITE setTableNum ) Q_PROPERTY( bool fontComboEnabled READ isFontComboEnabled WRITE enableFontCombo ) Q_PROPERTY( bool tableSpinBoxEnabled READ isTableSpinBoxEnabled WRITE enableTableSpinBox ) public: /** * Constructor. @p font specifies which font should be displayed, @p * chr which character should be selected and @p tableNum specifies * the number of the table which should be displayed. */ KCharSelect( QWidget *parent, const char *name, const QString &font = QString::null, const QChar &chr = ' ', int tableNum = 0 ); ~KCharSelect(); /** * Reimplemented. */ virtual QSize sizeHint() const; /** * Sets the font which is displayed to @p font */ virtual void setFont( const QString &font ); /** * Sets the currently selected character to @p chr. */ virtual void setChar( const QChar &chr ); /** * Sets the currently displayed table to @p tableNum. */ virtual void setTableNum( int tableNum ); /** * Returns the currently selected character. */ virtual QChar chr() const { return charTable->chr(); } /** * Returns the currently displayed font. */ virtual QString font() const { return fontCombo->currentText(); } /** * Returns the currently displayed table */ virtual int tableNum() const { return tableSpinBox->value(); } /** * If @p e is set to true, the combobox which allows the user to * select the font which should be displayed is enabled, else * disabled. */ virtual void enableFontCombo( bool e ) { fontCombo->setEnabled( e ); } /** * If @p e is set to true, the spinbox which allows the user to * specify which characters of the font should be displayed, is * enabled, else disabled. */ virtual void enableTableSpinBox( bool e ) { tableSpinBox->setEnabled( e ); } /** * Returns wether the font combobox on the top is enabled or * disabled. * * @see enableFontCombo() */ virtual bool isFontComboEnabled() const { return fontCombo->isEnabled(); } /** * Returns wether the table spinbox on the top is enabled or * disabled. * * @see enableTableSpinBox() */ virtual bool isTableSpinBoxEnabled() const { return tableSpinBox->isEnabled(); } protected: virtual void fillFontCombo(); static void cleanupFontDatabase(); QComboBox *fontCombo; QSpinBox *tableSpinBox; KCharSelectTable *charTable; QStringList fontList; static QFontDatabase * fontDataBase; protected slots: void fontSelected( const QString &_font ); void tableChanged( int _value ); void charHighlighted( const QChar &c ) { emit highlighted( c ); } void charHighlighted() { emit highlighted(); } void charActivated( const QChar &c ) { emit activated( c ); } void charActivated() { emit activated(); } void charFocusItemChanged() { emit focusItemChanged(); } void charFocusItemChanged( const QChar &c ) { emit focusItemChanged( c ); } void charTableUp() { if ( tableNum() < 255 ) setTableNum( tableNum() + 1 ); } void charTableDown() { if ( tableNum() > 0 ) setTableNum( tableNum() - 1 ); } void slotDoubleClicked() { emit doubleClicked(); } void slotUnicodeEntered(); void slotUpdateUnicode( const QChar &c ); signals: void highlighted( const QChar &c ); void highlighted(); void activated( const QChar &c ); void activated(); void fontChanged( const QString &_font ); void focusItemChanged(); void focusItemChanged( const QChar &c ); void doubleClicked(); private: virtual void setFont(const QFont &f) { QVBox::setFont(f); } protected: virtual void virtual_hook( int id, void* data ); private: class KCharSelectPrivate; KCharSelectPrivate* const d; }; #endif