summaryrefslogtreecommitdiffstats
path: root/lib/kofficeui/tkcombobox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kofficeui/tkcombobox.cpp')
-rw-r--r--lib/kofficeui/tkcombobox.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/lib/kofficeui/tkcombobox.cpp b/lib/kofficeui/tkcombobox.cpp
new file mode 100644
index 000000000..525afb444
--- /dev/null
+++ b/lib/kofficeui/tkcombobox.cpp
@@ -0,0 +1,123 @@
+/*
+ * Kivio - Visual Modelling and Flowcharting
+ * Copyright (C) 2000 theKompany.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include "tkcombobox.h"
+
+#include <qlistbox.h>
+#include <qpainter.h>
+#include <qstyle.h>
+#include <qdrawutil.h>
+
+#include <kapplication.h>
+
+TKComboBox::TKComboBox(QWidget* parent, const char* name)
+: QComboBox(false,parent,name)
+{
+}
+
+
+TKComboBox::TKComboBox( bool isEditable, QWidget* parent, const char* name )
+: QComboBox(isEditable,parent,name)
+{
+}
+
+TKComboBox::~TKComboBox()
+{
+}
+
+void TKComboBox::paintEvent(QPaintEvent*)
+{
+ QRect r;
+ if (editable()){
+#ifdef __GNUC__
+#warning "Left out for now, lacking a style expert (Werner)"
+#endif
+ //r = QRect( style().comboButtonRect( 0, 0, width(), height() ) );
+ r = QRect(4, 2, width()-height()-2, height()-4);
+ } else {
+ r = QRect(4, 2, width()-height()-2, height()-4);
+ }
+ int by = 2;
+ int bx = r.x() + r.width();
+ int bw = width() - bx - 2;
+ int bh = height()-4;
+
+ QPainter p( this );
+ const QColorGroup& g = colorGroup();
+
+ QRect fr(2,2,width()-4,height()-4);
+
+ if ( hasFocus()) {
+ p.fillRect( fr, g.brush( QColorGroup::Highlight ) );
+ } else {
+ p.fillRect( fr, g.brush( QColorGroup::Base ) );
+ }
+
+ QRect r1(1,1,width()-1,height()-1);
+ qDrawShadePanel( &p, r1, g, true, 1 );
+
+ static const char* arrow_down[] = {
+ "7 7 2 1",
+ "X c Gray0",
+ " c None",
+ "XXXXXXX",
+ "XXXXXXX",
+ " ",
+ "XXXXXXX",
+ " XXXXX ",
+ " XXX ",
+ " X "};
+
+ QPixmap pixmap(arrow_down);
+
+
+ style().drawControl( QStyle::CE_PushButton, &p, this, QRect( bx, by, bw, bh ), colorGroup() );
+ style().drawItem( &p, QRect( bx, by, bw, bh), AlignCenter, colorGroup(), isEnabled(), &pixmap, QString::null );
+
+ if ( hasFocus()) {
+ style().drawPrimitive( QStyle::PE_FocusRect, &p, fr, g );
+ }
+
+ if (!editable()) {
+ p.setClipRect(r);
+ p.setPen( g.text() );
+ p.setBackgroundColor( g.background() );
+
+ if ( listBox()->item(currentItem()) ) {
+ QListBoxItem * item = listBox()->item(currentItem());
+ const QPixmap *pix = item->pixmap();
+ QString text = item->text();
+ int x = r.x();
+ if ( pix ) {
+ p.drawPixmap( x, r.y() + ( r.height() - pix->height() ) / 2 +1, *pix );
+ x += pix->width()+3;
+ }
+ if (!text.isEmpty())
+ p.drawText( x, r.y(), r.width()-x, r.height(), AlignLeft|AlignVCenter|SingleLine, text );
+ }
+ }
+ p.end();
+}
+
+void TKComboBox::activate()
+{
+ emit activated(currentItem());
+}
+
+#include "tkcombobox.moc"