diff options
Diffstat (limited to 'src/combobutton.cpp')
-rwxr-xr-x | src/combobutton.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/combobutton.cpp b/src/combobutton.cpp new file mode 100755 index 0000000..ff5d758 --- /dev/null +++ b/src/combobutton.cpp @@ -0,0 +1,114 @@ + +#include "combobutton.h" + +#include <qlayout.h> +#include <qstring.h> +#include <qpixmap.h> +#include <qstyle.h> +#include <kpushbutton.h> +#include <kcombobox.h> + +ComboButton::ComboButton( QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + m_increaseHeight = 0; + + QGridLayout *grid = new QGridLayout( this, 1, 1 ); + + m_box = new KComboBox(this); + grid->addWidget(m_box,0,0); + + connect( m_box, SIGNAL(activated(int)), + this, SLOT(boxActivated(int)) + ); + + m_button = new KPushButton( QString::null, this, "pushbutton" ); + grid->addWidget( m_button, 0, 0 ); + + connect( m_button, SIGNAL(clicked()), + this, SLOT(buttonClicked()) + ); + + m_sizeMode = Max; + + balanceSize(); +} + +ComboButton::~ComboButton() +{ +} + +void ComboButton::balanceSize() +{ + int width; + + if( m_sizeMode == Max ) + width = m_box->sizeHint().width()-17; + else + width = m_button->sizeHint().width(); + + int height = ( m_box->sizeHint().height() > m_button->sizeHint().height() ) ? m_box->sizeHint().height() : m_button->sizeHint().height(); + + m_box->setFixedSize( width+17, height+m_increaseHeight ); + m_button->setFixedSize( width, height+m_increaseHeight ); +} + +void ComboButton::repaintButton() +{ + m_button->setText( m_box->currentText() ); + if(m_box->pixmap( m_box->currentItem()) ) + m_button->setIconSet( *m_box->pixmap(m_box->currentItem()) ); + balanceSize(); +} + +void ComboButton::insertItem( const QString &text, int index ) +{ + m_box->insertItem( text, index ); + repaintButton(); +} + +void ComboButton::insertItem( const QPixmap &pixmap, const QString &text, int index ) +{ + m_box->insertItem( pixmap, text, index ); + repaintButton(); +} + +void ComboButton::increaseHeight( int height ) +{ + m_increaseHeight = height; + balanceSize(); +} + +void ComboButton::boxActivated( int index ) +{ + repaintButton(); + emit clicked( index ); +} + +void ComboButton::buttonClicked() +{ + emit clicked( m_box->currentItem() ); +} + +void ComboButton::setSizeMode( int mode ) +{ + m_sizeMode = mode; + balanceSize(); +} + +int ComboButton::sizeMode() +{ + return m_sizeMode; +} + +void ComboButton::setFont( const QFont& font ) +{ + m_button->setFont( font ); + m_box->setFont( font ); +} + +QFont ComboButton::font() +{ + return m_button->font(); +} + |