summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/libopie.pro6
-rw-r--r--libopie/ofontselector.cpp277
-rw-r--r--libopie/ofontselector.h79
3 files changed, 360 insertions, 2 deletions
diff --git a/libopie/libopie.pro b/libopie/libopie.pro
index 6c47e86..4b176d0 100644
--- a/libopie/libopie.pro
+++ b/libopie/libopie.pro
@@ -10,3 +10,4 @@ HEADERS = ofontmenu.h ofileselector.h \
otimepicker.h otabwidget.h \
- otabbar.h otabinfo.h
+ otabbar.h otabinfo.h \
+ ofontselector.h
SOURCES = ofontmenu.cc ofileselector.cc \
@@ -18,3 +19,4 @@ SOURCES = ofontmenu.cc ofileselector.cc \
odevice.cpp otimepicker.cpp \
- otabwidget.cpp otabbar.cpp
+ otabwidget.cpp otabbar.cpp \
+ ofontselector.cpp
TARGET = opie
diff --git a/libopie/ofontselector.cpp b/libopie/ofontselector.cpp
new file mode 100644
index 0000000..f6fd541
--- a/dev/null
+++ b/libopie/ofontselector.cpp
@@ -0,0 +1,277 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This library is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include <qlayout.h>
+#include <qlistbox.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qfont.h>
+
+#include "ofontselector.h"
+
+
+class FontListItem : public QListBoxText {
+public:
+ FontListItem ( const QString &t, const QStringList &styles, const QValueList<int> &sizes ) : QListBoxText ( )
+ {
+ m_name = t;
+ m_styles = styles;
+ m_sizes = sizes;
+
+ QString str = t;
+ str [0] = str [0]. upper ( );
+ setText ( str );
+ }
+
+ QString family ( ) const
+ {
+ return m_name;
+ }
+
+ const QStringList &styles ( ) const
+ {
+ return m_styles;
+ }
+
+ const QValueList<int> &sizes ( ) const
+ {
+ return m_sizes;
+ }
+
+private:
+ QStringList m_styles;
+ QValueList<int> m_sizes;
+ QString m_name;
+};
+
+
+static int findItemCB ( QComboBox *box, const QString &str )
+{
+ for ( int i = 0; i < box-> count ( ); i++ ) {
+ if ( box-> text ( i ) == str )
+ return i;
+ }
+ return -1;
+}
+
+
+
+OFontSelector::OFontSelector ( QWidget *parent, const char *name, WFlags fl ) : QWidget ( parent, name, fl )
+{
+ QGridLayout *gridLayout = new QGridLayout ( this, 0, 0, 4, 4 );
+ gridLayout->setRowStretch ( 4, 10 );
+
+ m_font_family_list = new QListBox( this, "FontListBox" );
+ gridLayout->addMultiCellWidget( m_font_family_list, 0, 4, 0, 0 );
+ connect( m_font_family_list, SIGNAL( highlighted( int ) ), this, SLOT( fontFamilyClicked( int ) ) );
+
+ QLabel *label = new QLabel( tr( "Style" ), this );
+ gridLayout->addWidget( label, 0, 1 );
+
+ m_font_style_list = new QComboBox( this, "StyleListBox" );
+ connect( m_font_style_list, SIGNAL( activated( int ) ), this, SLOT( fontStyleClicked( int ) ) );
+ gridLayout->addWidget( m_font_style_list, 1, 1 );
+
+ label = new QLabel( tr( "Size" ), this );
+ gridLayout->addWidget( label, 2, 1 );
+
+ m_font_size_list = new QComboBox( this, "SizeListBox" );
+ connect( m_font_size_list, SIGNAL( activated( int ) ),
+ this, SLOT( fontSizeClicked( int ) ) );
+ gridLayout->addWidget( m_font_size_list, 3, 1 );
+
+ loadFonts ( m_font_family_list );
+}
+
+OFontSelector::~OFontSelector ( )
+{
+}
+
+bool OFontSelector::setSelectedFont ( const QString &family, const QString &styleStr, int size, const QString & /*charset*/ )
+{
+ if ( size <= 0 )
+ size = 10;
+ QString familyStr = family. isEmpty ( ) ? QString ( "Helvetica" ) : family;
+ QString sizeStr = QString::number ( size );
+
+ m_font_family_list-> setCurrentItem ( m_font_family_list-> findItem ( familyStr ));
+ if ( m_font_family_list-> currentItem ( ) < 0 )
+ m_font_family_list-> setCurrentItem ( 0 );
+
+ fontFamilyClicked ( m_font_family_list-> currentItem ( ));
+
+ m_font_style_list-> setCurrentItem ( findItemCB ( m_font_style_list, styleStr ));
+ fontStyleClicked ( m_font_style_list-> currentItem ( ));
+
+ m_font_size_list-> setCurrentItem ( findItemCB ( m_font_size_list, sizeStr ));
+ fontSizeClicked ( m_font_size_list-> currentItem ( ));
+
+ return (( m_font_family_list-> currentItem ( ) >= 0 ) &&
+ ( m_font_style_list-> currentItem ( ) >= 0 ) &&
+ ( m_font_size_list-> currentItem ( ) >= 0 ));
+}
+
+bool OFontSelector::selectedFont ( QString &family, QString &style, int &size )
+{
+ QString dummy;
+ return selectedFont ( family, style, size, dummy );
+}
+
+
+QString OFontSelector::fontFamily ( ) const
+{
+ FontListItem *fli = (FontListItem *) m_font_family_list-> item ( m_font_family_list-> currentItem ( ));
+
+ return fli ? fli-> family ( ) : QString::null;
+}
+
+QString OFontSelector::fontStyle ( ) const
+{
+ FontListItem *fli = (FontListItem *) m_font_family_list-> item ( m_font_family_list-> currentItem ( ));
+ int fst = m_font_style_list-> currentItem ( );
+
+ return ( fli && fst >= 0 ) ? fli-> styles ( ) [fst] : QString::null;
+}
+
+int OFontSelector::fontSize ( ) const
+{
+ FontListItem *fli = (FontListItem *) m_font_family_list-> item ( m_font_family_list-> currentItem ( ));
+ int fsi = m_font_size_list-> currentItem ( );
+
+ return ( fli && fsi >= 0 ) ? fli-> sizes ( ) [fsi] : 10;
+}
+
+QString OFontSelector::fontCharSet ( ) const
+{
+ FontListItem *fli = (FontListItem *) m_font_family_list-> item ( m_font_family_list-> currentItem ( ));
+
+ return fli ? m_fdb. charSets ( fli-> family ( )) [0] : QString::null;
+}
+
+bool OFontSelector::selectedFont ( QString &family, QString &style, int &size, QString &charset )
+{
+ int ffa = m_font_family_list-> currentItem ( );
+ int fst = m_font_style_list-> currentItem ( );
+ int fsi = m_font_size_list-> currentItem ( );
+
+ FontListItem *fli = (FontListItem *) m_font_family_list-> item ( ffa );
+
+ if ( fli ) {
+ family = fli-> family ( );
+ style = fst >= 0 ? fli-> styles ( ) [fst] : QString::null;
+ size = fsi >= 0 ? fli-> sizes ( ) [fsi] : 10;
+ charset = m_fdb. charSets ( fli-> family ( )) [0];
+
+ return true;
+ }
+ else
+ return false;
+}
+
+
+
+
+void OFontSelector::loadFonts ( QListBox *list )
+{
+ QStringList f = m_fdb. families ( );
+
+ for ( QStringList::ConstIterator it = f. begin ( ); it != f. end ( ); ++it )
+ list-> insertItem ( new FontListItem ( *it, m_fdb. styles ( *it ), m_fdb. pointSizes ( *it )));
+}
+
+void OFontSelector::fontFamilyClicked ( int index )
+{
+ QString oldstyle = m_font_style_list-> currentText ( );
+ QString oldsize = m_font_size_list-> currentText ( );
+
+ FontListItem *fli = (FontListItem *) m_font_family_list-> item ( index );
+
+ m_font_style_list-> clear ( );
+ m_font_style_list-> insertStringList ( fli-> styles ( ));
+ m_font_style_list-> setEnabled ( !fli-> styles ( ). isEmpty ( ));
+
+ int i;
+
+ i = findItemCB ( m_font_style_list, oldstyle );
+ if ( i < 0 )
+ i = findItemCB ( m_font_style_list, "Regular" );
+ if (( i < 0 ) && ( m_font_style_list-> count ( ) > 0 ))
+ i = 0;
+
+ if ( i >= 0 ) {
+ m_font_style_list-> setCurrentItem ( i );
+ fontStyleClicked ( i );
+ }
+
+ m_font_size_list-> clear ( );
+ QValueList<int> sl = fli-> sizes ( );
+
+ for ( QValueList<int>::Iterator it = sl. begin ( ); it != sl. end ( ); ++it )
+ m_font_size_list-> insertItem ( QString::number ( *it ));
+
+ i = findItemCB ( m_font_size_list, oldsize );
+ if ( i < 0 )
+ i = findItemCB ( m_font_size_list, "10" );
+ if (( i < 0 ) && ( m_font_size_list-> count ( ) > 0 ))
+ i = 0;
+
+ if ( i >= 0 ) {
+ m_font_size_list-> setCurrentItem ( i );
+ fontSizeClicked ( i );
+ }
+ changeFont ( );
+}
+
+void OFontSelector::fontStyleClicked ( int /*index*/ )
+{
+ changeFont ( );
+}
+
+void OFontSelector::fontSizeClicked ( int /*index*/ )
+{
+ changeFont ( );
+}
+
+void OFontSelector::changeFont ( )
+{
+ int ffa = m_font_family_list-> currentItem ( );
+ int fst = m_font_style_list-> currentItem ( );
+ int fsi = m_font_size_list-> currentItem ( );
+
+ FontListItem *fli = (FontListItem *) m_font_family_list-> item ( ffa );
+
+ if ( fli ) {
+ emit fontSelected ( m_fdb. font ( fli-> family ( ), \
+ fst >= 0 ? fli-> styles ( ) [fst] : QString::null, \
+ fsi >= 0 ? fli-> sizes ( ) [fsi] : 10, \
+ m_fdb. charSets ( fli-> family ( )) [0] ));
+ }
+}
+
+
+ \ No newline at end of file
diff --git a/libopie/ofontselector.h b/libopie/ofontselector.h
new file mode 100644
index 0000000..9227e48
--- a/dev/null
+++ b/libopie/ofontselector.h
@@ -0,0 +1,79 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This library is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef __OPIE_FONTSELECTOR_H__
+#define __OPIE_FONTSELECTOR_H__
+
+#include <qwidget.h>
+#include <qpe/fontdatabase.h>
+
+class QComboBox;
+class QListBox;
+class QFont;
+
+class OFontSelector : public QWidget
+{
+ Q_OBJECT
+
+public:
+ OFontSelector ( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ virtual ~OFontSelector ( );
+
+ bool selectedFont ( QString &family, QString &style, int &size );
+ bool selectedFont ( QString &family, QString &style, int &size, QString &charset );
+
+ bool setSelectedFont ( const QString &family, const QString &style, int size, const QString &charset = 0 );
+
+ QString fontFamily ( ) const;
+ QString fontStyle ( ) const;
+ int fontSize ( ) const;
+ QString fontCharSet ( ) const;
+
+signals:
+ void fontSelected ( const QFont & );
+
+protected slots:
+ virtual void fontFamilyClicked ( int );
+ virtual void fontStyleClicked ( int );
+ virtual void fontSizeClicked ( int );
+
+private:
+ void loadFonts ( QListBox * );
+
+ void changeFont ( );
+
+private:
+ QListBox * m_font_family_list;
+ QComboBox * m_font_style_list;
+ QComboBox * m_font_size_list;
+
+ FontDatabase m_fdb;
+};
+
+#endif
+