summaryrefslogtreecommitdiffstats
path: root/src/k3bflatbutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/k3bflatbutton.cpp')
-rw-r--r--src/k3bflatbutton.cpp203
1 files changed, 203 insertions, 0 deletions
diff --git a/src/k3bflatbutton.cpp b/src/k3bflatbutton.cpp
new file mode 100644
index 0000000..808de32
--- /dev/null
+++ b/src/k3bflatbutton.cpp
@@ -0,0 +1,203 @@
+/*
+ *
+ * $Id: k3bflatbutton.cpp 619556 2007-01-03 17:38:12Z trueg $
+ * Copyright (C) 2005 Sebastian Trueg <[email protected]>
+ *
+ * This file is part of the K3b project.
+ * Copyright (C) 1998-2007 Sebastian Trueg <[email protected]>
+ *
+ * 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.
+ * See the file "COPYING" for the exact licensing terms.
+ */
+
+#include "k3bflatbutton.h"
+#include "k3bthememanager.h"
+#include "k3bapplication.h"
+
+#include <kaction.h>
+#include <kiconloader.h>
+#include <kglobal.h>
+
+#include <qpainter.h>
+#include <qtooltip.h>
+#include <qfontmetrics.h>
+#include <qpixmap.h>
+
+
+K3bFlatButton::K3bFlatButton( QWidget *parent, const char *name )
+ : QFrame( parent, name/*, WNoAutoErase*/ ),
+ m_pressed(false)
+{
+ init();
+}
+
+
+K3bFlatButton::K3bFlatButton( const QString& text, QWidget *parent, const char *name )
+ : QFrame( parent, name/*, WNoAutoErase*/ ),
+ m_pressed(false)
+{
+ init();
+ setText( text );
+}
+
+
+K3bFlatButton::K3bFlatButton( KAction* a, QWidget *parent, const char *name )
+ : QFrame( parent, name/*, WNoAutoErase*/ ),
+ m_pressed(false)
+{
+ init();
+
+ setText( a->text() );
+ QToolTip::add( this, a->toolTip() );
+ setPixmap( KGlobal::iconLoader()->loadIcon( a->icon(), KIcon::NoGroup, 32 ) );
+ connect( this, SIGNAL(clicked()), a, SLOT(activate()) );
+}
+
+
+K3bFlatButton::~K3bFlatButton() {}
+
+
+void K3bFlatButton::init()
+{
+ setHover(false);
+ setMargin(5);
+ setFrameStyle( QFrame::Box|QFrame::Plain );
+
+ connect( k3bappcore->themeManager(), SIGNAL(themeChanged()), this, SLOT(slotThemeChanged()) );
+ connect( kapp, SIGNAL(appearanceChanged()), this, SLOT(slotThemeChanged()) );
+ slotThemeChanged();
+}
+
+
+void K3bFlatButton::setText( const QString& s )
+{
+ m_text = s;
+ m_text.remove( '&' );
+
+ update();
+}
+
+
+void K3bFlatButton::setPixmap( const QPixmap& p )
+{
+ m_pixmap = p;
+ update();
+}
+
+
+void K3bFlatButton::enterEvent( QEvent* )
+{
+ setHover(true);
+}
+
+
+void K3bFlatButton::leaveEvent( QEvent* )
+{
+ setHover(false);
+}
+
+
+void K3bFlatButton::mousePressEvent( QMouseEvent* e )
+{
+ if( e->button() == QMouseEvent::LeftButton ) {
+ emit pressed();
+ m_pressed = true;
+ }
+ else
+ e->ignore();
+}
+
+
+void K3bFlatButton::mouseReleaseEvent( QMouseEvent* e )
+{
+ if( e->button() == QMouseEvent::LeftButton ) {
+ if( m_pressed )
+ emit clicked();
+ m_pressed = false;
+ }
+ else
+ e->ignore();
+}
+
+
+void K3bFlatButton::setHover( bool b )
+{
+ if( b ) {
+ setPaletteBackgroundColor( m_foreColor );
+ setPaletteForegroundColor( m_backColor );
+ } else {
+ setPaletteBackgroundColor( m_backColor );
+ setPaletteForegroundColor( m_foreColor );
+ }
+
+ m_hover = b;
+
+ update();
+}
+
+
+QSize K3bFlatButton::sizeHint() const
+{
+ // height: pixmap + 5 spacing + font height + frame width
+ // width: max( pixmap, text) + frame width
+ return QSize( QMAX( m_pixmap.width(), fontMetrics().width( m_text ) ) + frameWidth()*2,
+ m_pixmap.height() + fontMetrics().height() + 5 + frameWidth()*2 );
+}
+
+
+void K3bFlatButton::drawContents( QPainter* p )
+{
+ QRect rect = contentsRect();
+
+// if( m_hover )
+// p->fillRect( rect, m_foreColor );
+// else if( parentWidget() ) {
+// QRect r( mapToParent( QPoint(lineWidth(), lineWidth()) ),
+// mapToParent( QPoint(width()-2*lineWidth(), height()-2*lineWidth() )) );
+
+// parentWidget()->repaint( r );
+// }
+
+ p->save();
+
+ QRect textRect = fontMetrics().boundingRect( m_text );
+ int textX = QMAX( 0, ( rect.width() - textRect.width() ) / 2 );
+ int textY = textRect.height();
+
+ if( !m_pixmap.isNull() ) {
+ p->translate( rect.left(), rect.top() );
+ textX = QMAX( textX, (m_pixmap.width() - textRect.width()) / 2 );
+ textY += 5 + m_pixmap.height();
+
+ int pixX = QMAX( QMAX( 0, (textRect.width() - m_pixmap.width()) / 2 ),
+ ( rect.width() - m_pixmap.width() ) / 2 );
+ p->drawPixmap( pixX, 0, m_pixmap );
+ p->drawText( textX, textY, m_text );
+ }
+ else
+ p->drawText( rect, Qt::AlignCenter, m_text );
+
+ p->restore();
+}
+
+
+void K3bFlatButton::setColors( const QColor& fore, const QColor& back )
+{
+ m_foreColor = fore;
+ m_backColor = back;
+
+ setHover( m_hover );
+}
+
+
+void K3bFlatButton::slotThemeChanged()
+{
+ if( K3bTheme* theme = k3bappcore->themeManager()->currentTheme() ) {
+ setColors( theme->foregroundColor(), theme->backgroundColor() );
+ }
+}
+
+#include "k3bflatbutton.moc"