summaryrefslogtreecommitdiffstats
path: root/kjumpingcube/kcubewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kjumpingcube/kcubewidget.cpp')
-rw-r--r--kjumpingcube/kcubewidget.cpp348
1 files changed, 348 insertions, 0 deletions
diff --git a/kjumpingcube/kcubewidget.cpp b/kjumpingcube/kcubewidget.cpp
new file mode 100644
index 00000000..f23e3cce
--- /dev/null
+++ b/kjumpingcube/kcubewidget.cpp
@@ -0,0 +1,348 @@
+/* ****************************************************************************
+ This file is part of the game 'KJumpingCube'
+
+ Copyright (C) 1998-2000 by Matthias Kiefer
+ <matthias.kiefer@gmx.de>
+
+ 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 "kcubewidget.h"
+
+#include <qpainter.h>
+#include <qtimer.h>
+
+#include <kapplication.h>
+#include <kdebug.h>
+
+/* ****************************************************** **
+** static elements **
+** ****************************************************** */
+bool KCubeWidget::_clicksAllowed=true;
+QPalette KCubeWidget::color1;
+QPalette KCubeWidget::color2;
+
+
+void KCubeWidget::enableClicks(bool flag)
+{
+ _clicksAllowed=flag;
+}
+
+
+void KCubeWidget::setColor(Owner forWhom, QPalette newPalette)
+{
+ if(forWhom==One)
+ {
+ color1=newPalette;
+ }
+ else if(forWhom==Two)
+ {
+ color2=newPalette;
+ }
+}
+
+QPalette KCubeWidget::color(Owner forWhom)
+{
+ QPalette color;
+ if(forWhom==One)
+ {
+ color=color1;
+ }
+ else if(forWhom==Two)
+ {
+ color=color2;
+ }
+
+ return color;
+}
+
+
+/* ****************************************************** **
+** public functions **
+** ****************************************************** */
+
+KCubeWidget::KCubeWidget(QWidget* parent,const char* name
+ ,Owner owner,int value,int max)
+ : QFrame(parent,name),
+ Cube(owner,value,max)
+{
+ setFrameStyle(Panel|Raised);
+ //setLineWidth(2);
+ setMinimumSize(20,20);
+
+ setCoordinates(0,0);
+
+ //initialize hintTimer
+ // will be automatically destroyed by the parent
+ hintTimer = new QTimer(this);
+ hintCounter=0;
+ connect(hintTimer,SIGNAL(timeout()),SLOT(hint()));
+
+ setPalette(kapp->palette());
+
+ // show values
+ repaint(false);
+}
+
+KCubeWidget::~KCubeWidget()
+{
+}
+
+
+KCubeWidget& KCubeWidget::operator=(const Cube& cube)
+{
+ if(this!=&cube)
+ {
+ setOwner(cube.owner());
+ setValue(cube.value());
+ setMax(cube.max());
+ }
+
+ return *this;
+}
+
+KCubeWidget& KCubeWidget::operator=(const KCubeWidget& cube)
+{
+ if(this!=&cube)
+ {
+ setOwner(cube.owner());
+ setValue(cube.value());
+ setMax(cube.max());
+ }
+
+ return *this;
+}
+KCubeWidget::Owner KCubeWidget::setOwner(Owner newOwner)
+{
+ Owner old=Cube::setOwner(newOwner);
+
+ updateColors();
+
+ return old;
+}
+
+void KCubeWidget::setValue(int newValue)
+{
+ Cube::setValue(newValue);
+ update();
+}
+
+
+void KCubeWidget::showHint(int interval,int number)
+{
+ if(hintTimer->isActive())
+ return;
+
+ hintCounter=2*number;
+ hintTimer->start(interval);
+}
+
+
+void KCubeWidget::animate(bool )
+{
+}
+
+
+void KCubeWidget::setCoordinates(int row,int column)
+{
+ _row=row;
+ _column=column;
+}
+
+int KCubeWidget::row() const
+{
+ return _row;
+}
+
+int KCubeWidget::column() const
+{
+ return _column;
+}
+
+
+
+
+/* ****************************************************** **
+** public slots **
+** ****************************************************** */
+
+void KCubeWidget::reset()
+{
+ setValue(1);
+ setOwner(Nobody);
+}
+
+
+void KCubeWidget::updateColors()
+{
+ if(owner()==One)
+ setPalette(color1);
+ else if(owner()==Two)
+ setPalette(color2);
+ else if(owner()==Nobody)
+ setPalette(kapp->palette());
+}
+
+void KCubeWidget::stopHint()
+{
+ if(hintTimer->isActive())
+ {
+ hintTimer->stop();
+ setBackgroundMode(PaletteBackground);
+ }
+
+}
+
+
+
+/* ****************************************************** **
+** protected slots **
+** ****************************************************** */
+
+void KCubeWidget::hint()
+{
+ hintCounter--;
+ if(hintCounter%2==1)
+ {
+ setBackgroundMode(PaletteLight);
+ }
+ else
+ {
+ setBackgroundMode(PaletteBackground);
+ }
+ if(hintCounter==0)
+ {
+ stopHint();
+ }
+}
+
+
+
+/* ****************************************************** **
+** Event handler **
+** ****************************************************** */
+
+void KCubeWidget::mouseReleaseEvent(QMouseEvent *e)
+{
+ // only accept click if it was inside this cube
+ if(e->x()< 0 || e->x() > width() || e->y() < 0 || e->y() > height())
+ return;
+
+ if(e->button() == LeftButton && _clicksAllowed)
+ {
+ stopHint();
+ emit clicked(row(),column(),true);
+ }
+}
+
+
+
+void KCubeWidget::drawContents(QPainter *painter)
+{
+ QRect contents=contentsRect();
+ QPixmap buffer(contents.size());
+ buffer.fill(this,contents.topLeft());
+ QPainter *p=new QPainter;
+ p->begin(&buffer);
+ int h=contents.height();
+ int w=contents.width();
+ int circleSize=(h<w?h:w)/7;
+ int points=value();
+ QBrush brush("black");
+ QPen pen("black");
+ p->setBrush(brush);
+ p->setPen(pen);
+ switch(points)
+ {
+ case 1:
+ p->drawEllipse(w/2-circleSize/2,h/2-circleSize/2,circleSize,circleSize);
+ break;
+
+ case 3:
+ p->drawEllipse(w/2-circleSize/2,h/2-circleSize/2,circleSize,circleSize);
+ case 2:
+ p->drawEllipse(w/4-circleSize/2,h/4-circleSize/2,circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,3*h/4-circleSize/2,
+ circleSize,circleSize);
+ break;
+
+ case 5:
+ p->drawEllipse(w/2-circleSize/2,h/2-circleSize/2,circleSize,circleSize);
+ case 4:
+ p->drawEllipse(w/4-circleSize/2,h/4-circleSize/2,circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,h/4-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/4-circleSize/2,3*h/4-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,3*h/4-circleSize/2,
+ circleSize,circleSize);
+ break;
+
+ case 8:
+ p->drawEllipse(w/2-circleSize/2,2*h/3-circleSize/2,
+ circleSize,circleSize);
+ case 7:
+ p->drawEllipse(w/2-circleSize/2,h/3-circleSize/2,
+ circleSize,circleSize);
+ case 6:
+ p->drawEllipse(w/4-circleSize/2,h/6-circleSize/2,circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/4-circleSize/2,3*h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,3*h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/4-circleSize/2,5*h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,5*h/6-circleSize/2,
+ circleSize,circleSize);
+ break;
+
+
+ case 9:
+ p->drawEllipse(w/4-circleSize/2,h/6-circleSize/2,circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/4-circleSize/2,3*h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,3*h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/4-circleSize/2,5*h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(3*w/4-circleSize/2,5*h/6-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/2-circleSize/2,2*h/7-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/2-circleSize/2,5*h/7-circleSize/2,
+ circleSize,circleSize);
+ p->drawEllipse(w/2-circleSize/2,h/2-circleSize/2,
+ circleSize,circleSize);
+ break;
+
+ default:
+ kdDebug() << "cube had value " << points << endl;
+ QString s;
+ s.sprintf("%d",points);
+ p->drawText(w/2,h/2,s);
+ break;
+ }
+ p->end();
+ delete p;
+
+ painter->drawPixmap(contents.topLeft(),buffer);
+
+}
+
+#include "kcubewidget.moc"