summaryrefslogtreecommitdiffstats
path: root/src/combobutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/combobutton.cpp')
-rwxr-xr-xsrc/combobutton.cpp114
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();
+}
+