author | mickeyl <mickeyl> | 2004-01-15 13:59:58 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-01-15 13:59:58 (UTC) |
commit | dde789ef19fa3a3913805e452ac1e3400688e8a0 (patch) (side-by-side diff) | |
tree | a33a0ce31750ad56cfd3362585d4e7b32ca0a456 /libqtaux | |
parent | 3c74c5343a8432c494ace71d94cca354c01ef1d3 (diff) | |
download | opie-dde789ef19fa3a3913805e452ac1e3400688e8a0.zip opie-dde789ef19fa3a3913805e452ac1e3400688e8a0.tar.gz opie-dde789ef19fa3a3913805e452ac1e3400688e8a0.tar.bz2 |
more libopie1 --> libopie2 with namespace cleanups and code layout cleanups
-rw-r--r-- | libqtaux/libqtaux.pro | 6 | ||||
-rw-r--r-- | libqtaux/ocolorbutton.cpp | 150 | ||||
-rw-r--r-- | libqtaux/ocolorbutton.h | 80 | ||||
-rw-r--r-- | libqtaux/ocolorpopupmenu.cpp | 3 | ||||
-rw-r--r-- | libqtaux/ocolorpopupmenu.h | 11 |
5 files changed, 246 insertions, 4 deletions
diff --git a/libqtaux/libqtaux.pro b/libqtaux/libqtaux.pro index 2f7aa91..56ccc65 100644 --- a/libqtaux/libqtaux.pro +++ b/libqtaux/libqtaux.pro @@ -1,23 +1,25 @@ TEMPLATE = lib CONFIG += qte warn_on debug HEADERS = qcolordialog.h \ qsplitter.h \ qinputdialog.h \ \ - ocolorpopupmenu.h + ocolorpopupmenu.h \ + ocolorbutton.h SOURCES = qcolordialog.cpp \ qsplitter.cpp \ qinputdialog.cpp \ \ - ocolorpopupmenu.cpp + ocolorpopupmenu.cpp \ + ocolorbutton.cpp TARGET = qtaux2 INCLUDEPATH += $(OPIEDIR)/include DESTDIR = $(OPIEDIR)/lib INTERFACES = include ( $(OPIEDIR)/include.pro ) diff --git a/libqtaux/ocolorbutton.cpp b/libqtaux/ocolorbutton.cpp new file mode 100644 index 0000000..d2ad873 --- a/dev/null +++ b/libqtaux/ocolorbutton.cpp @@ -0,0 +1,150 @@ +/* + This file is part of the Opie Project + Copyright (C) Robert Griebl <sandman@handhelds.org> + =. Copyright (C) The Opie Team <opie-devel@handhelds.org> + .=l. + .>+-= + _;:, .> :=|. This program 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 program 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 "ocolorpopupmenu.h" +#include "ocolorbutton.h" + +/* OPIE */ +#include <qpe/resource.h> + +/* QT */ +#include <qcolor.h> +#include <qpixmap.h> +#include <qimage.h> + +using namespace Opie; + +struct OColorButtonPrivate +{ + QPopupMenu *m_menu; + QColor m_color; +}; + +/** + * This concstructs a Color Button with @param color as the start color + * It'll use a OColorPopupMenu internally + * + * @param parent The parent of the Color Button + * @param color The color from where to start on + * @param name @see QObject + */ +OColorButton::OColorButton ( QWidget *parent, const QColor &color, const char *name ) + : QPushButton ( parent, name ) +{ + d = new OColorButtonPrivate; + + d-> m_menu = new OColorPopupMenu ( color, 0, 0 ); + setPopup ( d-> m_menu ); + // setPopupDelay ( 0 ); + connect ( d-> m_menu, SIGNAL( colorSelected ( const QColor & )), this, SLOT( updateColor ( const QColor & ))); + + updateColor ( color ); + + QSize s = sizeHint ( ) + QSize ( 12, 0 ); + setMinimumSize ( s ); + setMaximumSize ( s. width ( ) * 2, s. height ( )); +} + +/** + * This destructs the object + */ +OColorButton::~OColorButton ( ) +{ + delete d; +} + +/** + * @return Returns the current color of the button + */ +QColor OColorButton::color ( ) const +{ + return d-> m_color; +} + +/** + * This method sets the color of the button + * @param c The color to be set. + */ +void OColorButton::setColor ( const QColor &c ) +{ + updateColor ( c ); +} + +/** + * @internal + */ +void OColorButton::updateColor ( const QColor &c ) +{ + d-> m_color = c; + + QImage img ( 16, 16, 32 ); + img. fill ( 0 ); + + int r, g, b; + c. rgb ( &r, &g, &b ); + + int w = img. width ( ); + int h = img. height ( ); + + int dx = w * 20 / 100; // 15% + int dy = h * 20 / 100; + + for ( int y = 0; y < h; y++ ) + { + for ( int x = 0; x < w; x++ ) + { + double alpha = 1.0; + + if ( x < dx ) + alpha *= ( double ( x + 1 ) / dx ); + else if ( x >= w - dx ) + alpha *= ( double ( w - x ) / dx ); + if ( y < dy ) + alpha *= ( double ( y + 1 ) / dy ); + else if ( y >= h - dy ) + alpha *= ( double ( h - y ) / dy ); + + int a = int ( alpha * 255.0 ); + if ( a < 0 ) + a = 0; + if ( a > 255 ) + a = 255; + + img. setPixel ( x, y, qRgba ( r, g, b, a )); + } + } + img. setAlphaBuffer ( true ); + + QPixmap pix; + pix. convertFromImage ( img ); + setPixmap ( pix ); + + emit colorSelected ( c ); +} + diff --git a/libqtaux/ocolorbutton.h b/libqtaux/ocolorbutton.h new file mode 100644 index 0000000..ca68f1f --- a/dev/null +++ b/libqtaux/ocolorbutton.h @@ -0,0 +1,80 @@ +/* + This file is part of the Opie Project + Copyright (C) Robert Griebl <sandman@handhelds.org> + =. Copyright (C) The Opie Team <opie-devel@handhelds.org> + .=l. + .>+-= + _;:, .> :=|. This program 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 program 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 OCOLORBUTTON_H +#define OCOLORBUTTON_H + +/* QT*/ +#include <qpushbutton.h> + +class OColorButtonPrivate; +class QColor; + +namespace Opie +{ + +/** + * + * @short A Button which will show a OColorPopupMenu + * @author Robert Griebl ( sandman@handhelds.org ) + * @version 1.0 + * @see QPushButton + */ +class OColorButton : public QPushButton +{ + Q_OBJECT +public: + OColorButton ( QWidget *parent = 0, const QColor & = black, const char *name = 0 ); + virtual ~OColorButton ( ); + + QColor color ( ) const; + +signals: + /** + * emitted when a color gets selected + */ + void colorSelected ( const QColor & ); + +public slots: + virtual void setColor ( const QColor & ); + +protected slots: + /** + * @internal + */ + virtual void updateColor ( const QColor & ); + +private: + OColorButtonPrivate *d; +}; + +}; + +#endif + diff --git a/libqtaux/ocolorpopupmenu.cpp b/libqtaux/ocolorpopupmenu.cpp index 6a2321e..6c5f99c 100644 --- a/libqtaux/ocolorpopupmenu.cpp +++ b/libqtaux/ocolorpopupmenu.cpp @@ -1,167 +1,170 @@ /* This file is part of the Opie Project Copyright (c) 2002 S. Prud'homme <prudhomme@laposte.net> Dan Williams <williamsdr@acm.org> =. .=l. .>+-= _;:, .> :=|. This program 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 program 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 "ocolorpopupmenu.h" #include "qcolordialog.h" +/* QT */ #include <qaction.h> #include <qlayout.h> #include <qpainter.h> +using namespace Opie; + OColorPanelButton::OColorPanelButton( const QColor& color, QWidget* parent, const char* name ) : QFrame( parent, name ) { m_color = color; setFixedSize( 16, 16 ); setActive( FALSE ); } OColorPanelButton::~OColorPanelButton() { } void OColorPanelButton::setActive( bool active ) { m_active = active; if ( m_active ) { setFrameStyle( Panel | Sunken ); } else { setFrameStyle( NoFrame ); } } void OColorPanelButton::enterEvent( QEvent* ) { if ( !m_active ) { setFrameStyle( Panel | Sunken ); } } void OColorPanelButton::leaveEvent( QEvent* ) { if ( !m_active ) { setFrameStyle( NoFrame ); } } void OColorPanelButton::paintEvent( QPaintEvent* e ) { QFrame::paintEvent( e ); QPainter painter; painter.begin( this ); painter.fillRect( 2, 2, 12, 12, m_color ); painter.setPen( Qt::black ); painter.drawRect( 2, 2, 12, 12 ); painter.end(); } void OColorPanelButton::mouseReleaseEvent( QMouseEvent* ) { emit selected( m_color ); } OColorPopupMenu::OColorPopupMenu( const QColor& color, QWidget* parent, const char* name ) : QPopupMenu( parent, name ) { m_color = color; colorPanel = new QWidget( this ); colorLayout = new QGridLayout(colorPanel, 5, 6); addColor(QColor(255, 255, 255), 0, 1); addColor(QColor(192, 192, 192), 0, 2); addColor(QColor(128, 128, 128), 0, 3); addColor(QColor(64, 64, 64), 0, 4); addColor(QColor(0, 0, 0), 0, 5); addColor(QColor(255, 0, 0), 1, 0); addColor(QColor(255, 128, 0), 1, 1); addColor(QColor(255, 255, 0), 1, 2); addColor(QColor(128, 255, 0), 1, 3); addColor(QColor(0, 255, 0), 1, 4); addColor(QColor(0, 255, 128), 1, 5); addColor(QColor(128, 0, 0), 2, 0); addColor(QColor(128, 64, 0), 2, 1); addColor(QColor(128, 128, 0), 2, 2); addColor(QColor(64, 128, 0), 2, 3); addColor(QColor(0, 128, 0), 2, 4); addColor(QColor(0, 128, 64), 2, 5); addColor(QColor(0, 255, 255), 3, 0); addColor(QColor(0, 128, 255), 3, 1); addColor(QColor(0, 0, 255), 3, 2); addColor(QColor(128, 0, 255), 3, 3); addColor(QColor(255, 0, 255), 3, 4); addColor(QColor(255, 0, 128), 3, 5); addColor(QColor(0, 128, 128), 4, 0); addColor(QColor(0, 64, 128), 4, 1); addColor(QColor(0, 0, 128), 4, 2); addColor(QColor(64, 0, 128), 4, 3); addColor(QColor(128, 0, 128), 4, 4); addColor(QColor(128, 0, 64), 4, 5); insertItem( colorPanel ); insertSeparator(); insertItem(tr("More"),this,SLOT( moreColorClicked())); /* QAction* chooseColorAction = new QAction( tr( "More" ), tr( "More..." ), 0, colorPanel, "More" ); connect( chooseColorAction, SIGNAL( activated() ), this, SLOT( moreColorClicked() ) ); chooseColorAction->addTo( this ); */ activateItemAt( 0 ); } OColorPopupMenu::~OColorPopupMenu() { } void OColorPopupMenu::addColor( const QColor& color, int row, int col ) { OColorPanelButton* panelButton = new OColorPanelButton( color, colorPanel ); connect( panelButton, SIGNAL( selected( const QColor& ) ), this, SLOT( buttonSelected( const QColor& ) ) ); colorLayout->addWidget( panelButton, row, col ); } void OColorPopupMenu::buttonSelected( const QColor& color ) { m_color = color; emit colorSelected( color ); hide(); } void OColorPopupMenu::moreColorClicked() diff --git a/libqtaux/ocolorpopupmenu.h b/libqtaux/ocolorpopupmenu.h index 90cfbed..7ab3ca6 100644 --- a/libqtaux/ocolorpopupmenu.h +++ b/libqtaux/ocolorpopupmenu.h @@ -1,255 +1,262 @@ /* This file is part of the Opie Project Copyright (c) 2002 S. Prud'homme <prudhomme@laposte.net> Dan Williams <williamsdr@acm.org> =. .=l. .>+-= _;:, .> :=|. This program 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 program 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 COLORPOPUPMENU_H -#define COLORPOPUPMENU_H +#ifndef OCOLORPOPUPMENU_H +#define OCOLORPOPUPMENU_H + +/* QT */ #include <qframe.h> #include <qpopupmenu.h> class QWidget; class QGridLayout; +namespace Opie +{ + /** * @class OColorPanelButton * @brief The OColorPanelButton class provides a button for color selection. * * @see OColorPopupMenu * * The OColorPanelButton class provides a button for color selection. The button * is drawn with the desired color and no border. This class is used internally * by the OColorPopupMenu class to displaying colors in its menu. */ class OColorPanelButton : public QFrame { Q_OBJECT public: /** * @fn OColorPanelButton( const QColor& color, QWidget* parent = 0, const char* name = 0 ) * @brief Object constructor. * * @param color Desired color. * @param parent Pointer to parent of this control. * @param name Name of control. * * Constructs a new ColorPanelButton control with parent, name and desired color. */ OColorPanelButton(const QColor& color, QWidget* parent = 0, const char* name = 0); /** * @fn ~OColorPanelButton() * @brief Object destructor. */ ~OColorPanelButton(); /** * @fn setActive( bool active ) * @brief Sets button selection state. * * @param active Boolean indicator of new button state. * * Changes button selection state. If button is selected, a highlighted border * is drawn. */ void setActive(bool active); /** * @fn enterEvent( QEvent* e ) * @brief Reimplemented for internal reasons. * * @param e Event currently being processed. * * Reimplemented to ensure correct display of button based on whether it is * active or not. */ void enterEvent(QEvent* e); /** * @fn leaveEvent( QEvent* e ) * @brief Reimplemented for internal reasons. * * @param e Event currently being processed. * * Reimplemented to ensure correct display of button based on whether it is * active or not. */ void leaveEvent(QEvent* e); /** * @fn paintEvent( QPaintEvent* e ) * @brief Reimplemented for internal reasons. * * @param e Event currently being processed. * @reimp * Reimplemented to ensure correct display of button. */ void paintEvent(QPaintEvent* e); /** * @fn mouseReleaseEvent( QMouseEvent* e ) * @brief Slot executed when button is pressed. * * @param e Mouse event currently being processed. * * @see selected() * * This slot executes when the button has been pressed. It emits the selected * signal as notification that it has been pressed. */ void mouseReleaseEvent(QMouseEvent* e); signals: /** * @fn selected( const QColor& color ) * @brief Signal to indicate button has been pressed. * * @param color Button color. * * This signal is emitted when the button is pressed. It provides the color * associated to this button. */ void selected(const QColor&); private: QColor m_color; bool m_active : 1; class ColorPanelButtonPrivate; ColorPanelButtonPrivate *d; }; /** * @class OColorPopupMenu * @brief The OColorPopupMenu class provides a small color selection * popup menu. * * OColorPopupMenu is a derivation of TrollTech's QPopupMenu and provides * a small color selection popup menu which can be attached to another control * such as a toolbar button of menu item. * * The popup menu displays 30 default colors available in a grid, and also * includes an option at the bottom to display a color selection dialog box for * finer color control. */ class OColorPopupMenu : public QPopupMenu { Q_OBJECT public: /** * @fn OColorPopupMenu( const QColor& color, QWidget* parent = 0, const char* name = 0 ) * @brief Object constructor. * * @param color Initial color selected in menu. * @param parent Pointer to parent of this control. * @param name Name of control. * * Constructs a new OColorPopupMenu control with parent, name and initial color selected. */ // FIXME add Wflags? -zecke OColorPopupMenu( const QColor& color, QWidget* parent = 0, const char* name = 0 ); /** * @fn ~OColorPopupMenu() * @brief Object destructor. */ ~OColorPopupMenu(); private: class ColorPopupMenuPrivate; ColorPopupMenuPrivate *d; QColor m_color; QWidget* colorPanel; QGridLayout* colorLayout; /** * @fn addColor( const QColor& color, int row, int col ) * @brief Adds color selection option to popup menu. * * @param color Color to be displayed in menu. * @param row Row where color is to appear in menu. * @param col Column where color is to appear in menu. * * Adds a color selection option to popup menu. Used internally when * initially constructing the menu control. */ void addColor( const QColor& color, int row, int col ); signals: /** * @fn colorSelected( const QColor& color ) * @brief Signal to indicate color chosen from the menu. * * @param color Color selected from the menu. * * This signal is emitted when a color has been selected either directly from * the menu, or chosen from the color selection dialog. */ void colorSelected( const QColor& color ); protected slots: /** * @fn buttonSelected( const QColor& color ) * @brief Slot to process selected color. * * @param color Color selected from the menu. * * @see colorSelected() * * This slot executes when a color has been selected from the menu. It performs * two functions: * - Emit the colorSelected signal with the color selected. * - Hide the menu. */ void buttonSelected( const QColor& color ); /** * @fn moreColorClicked() * @brief Slot to process display color selection dialog. * * @see colorSelected() * * This slot executes when the 'More...' option is selected at the bottom of the menu. * It performs the following functions: * - Constructs and executes a QColorDialog to allow finer color selection. * - Emit the colorSelected signal with the color selected. * - Hide the menu. */ void moreColorClicked(); }; +}; + #endif // COLORPOPUPMENUANEL_H |