summaryrefslogtreecommitdiffstats
path: root/src/roundbutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/roundbutton.cpp')
-rw-r--r--src/roundbutton.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/roundbutton.cpp b/src/roundbutton.cpp
new file mode 100644
index 0000000..c8cb9fb
--- /dev/null
+++ b/src/roundbutton.cpp
@@ -0,0 +1,120 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Daniel Stöckel *
+ * daniel@Docter *
+ * *
+ * 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "roundbutton.h"
+
+#include <kiconloader.h>
+#include <kpixmapeffect.h>
+#include <qbitmap.h>
+
+#include "kommando.h"
+
+RoundButton::RoundButton( QWidget* parent, unsigned short rad, const char* name, WFlags f)
+ : QButton(parent, name, f)
+{
+ setRadius(rad);
+ //setBackgroundMode(NoBackground);
+ //setBackgroundColor(QColor(0,0,0));
+
+ background.resize(width(),height());
+}
+
+RoundButton::~RoundButton()
+{
+}
+
+void RoundButton::drawButton( QPainter *Painter )
+{
+ Painter->drawPixmap(0,0,background);
+ drawButtonLabel(Painter);
+}
+
+void RoundButton::drawButtonLabel( QPainter *Painter )
+{
+ //Do we have a pixmap?
+ if(!pixmap()){
+ Painter->drawText(radius,radius,"n/a",5);
+ } else {
+ Painter->drawPixmap(rect(),*pixmap());
+ }
+}
+
+void RoundButton::move( int x, int y )
+{
+ QButton::move(x-radius,y-radius);
+}
+
+void RoundButton::setRadius( int rad )
+{
+ radius=rad;
+ resize(radius*2,radius*2);
+ setFixedSize(radius*2,radius*2);
+ //setIcon(mIconPath);
+}
+
+void RoundButton::setIcon( const QString& path )
+{
+ mIconPath=path;
+ icon=MainBarIcon(path,radius*2);
+ setPixmap(icon);
+ setMask(icon.createHeuristicMask());
+}
+
+void RoundButton::show()
+{
+ //get the buttons part of the screenshot
+ copyBlt(&background,0,0,static_cast<Kommando*>(parent())->screenshot(),pos().x(),pos().y(),width(),height());
+
+ QButton::show();
+}
+
+bool RoundButton::event( QEvent * evt )
+{
+ switch(evt->type()){
+ case QEvent::Enter:
+ emit mouseIn(this);
+ setActive(true);
+ return true;
+ case QEvent::Leave:
+ emit mouseOut(this);
+ setActive(false);
+ return true;
+ default:
+ return QButton::event(evt);
+ }
+}
+
+void RoundButton::setActive( bool mode )
+{
+ if(mode){
+ setPixmap(mEffect.apply(icon,KIcon::Desktop,KIcon::ActiveState));
+ } else {
+ setPixmap(mEffect.apply(icon,KIcon::Desktop,KIcon::DefaultState));
+ }
+}
+
+//key press events need to be ignored, so that they can be captured by the menu
+/* TODO execution could be placed here! */
+void RoundButton::keyPressEvent( QKeyEvent * evt )
+{
+ evt->ignore();
+}
+
+#include "roundbutton.moc"