diff options
Diffstat (limited to 'kenolaba/BoardWidget.h')
-rw-r--r-- | kenolaba/BoardWidget.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/kenolaba/BoardWidget.h b/kenolaba/BoardWidget.h new file mode 100644 index 00000000..8fc0a317 --- /dev/null +++ b/kenolaba/BoardWidget.h @@ -0,0 +1,116 @@ +#ifndef _BOARDWIDGET_H_ +#define _BOARDWIDGET_H_ + +#include <qwidget.h> +#include <qpixmap.h> + +#include "Ball.h" +#include "Move.h" +#include "Board.h" + +#ifdef HAVE_KIR +class KIRenderer; +#endif + +class BoardWidget : public BallWidget +{ + Q_OBJECT + + public: + BoardWidget(Board&, QWidget *parent = 0, const char *name = 0); + ~BoardWidget(); + + void createPos(int , int , int , Ball*); + void initBalls(); + void updateBalls(); + + virtual void resizeEvent(QResizeEvent *); + virtual void moveEvent(QMoveEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent( QMouseEvent* pEvent ); + virtual void mouseReleaseEvent( QMouseEvent* pEvent ); + virtual void mouseMoveEvent( QMouseEvent* pEvent ); + + void renderBalls(bool r); + + void draw(); + + void choseMove(MoveList*); + + /* Show a move with highlighting + * step 0: state before move + * 1: state after move + * 2: remove all marks (for blinking) + * 3: highlight marks (before move) + * 4: highlight marks (after move) + * Always call with step 0 before actual playing the move !! */ + void showMove(const Move& m, int step, bool updateGUI = true); + + /* Only highlight start + * Step 0: original state + * 1: highlight start + * Always call with step 0 before actual playing the move !! */ + void showStart(const Move& m, int step, bool updateGUI = true); + + + /* enable/disable Edit Mode: + * On disabling & valid position it's actually copied to Board + */ + bool setEditMode(bool); + // int validState() { return board->validState(); } + // bool isValid() { return validState()==Board::valid; } + + /* copy actual board position */ + void updatePosition(bool updateGUI = false); + void clearPosition(); + + int getColor1Count() { return color1Count; } + int getColor2Count() { return color2Count; } + + public slots: + void configure(); + void drawBoard(); + + signals: + void moveChoosen(Move&); + void rightButtonPressed(int,const QPoint&); + void updateSpy(QString); + void edited(int); + protected: + virtual QSize sizeHint() const; + + private: + int positionOf(int x, int y); + bool isValidStart(int pos, bool); + bool isValidEnd(int pos); + + QPixmap pm, boardPM; + Board& board; + int actValue; + + bool editMode, renderMode; + int editColor; + + /* copied position */ + int field[Board::AllFields]; + int color1Count, color2Count, color; + bool boardOK; + + /* for getting user Move */ + MoveList *pList; + Move actMove; + bool gettingMove, mbDown, startValid, startShown; + int startPos, actPos, oldPos, shownDirection; + int startField, startField2, actField, oldField, startType; + QColor *boardColor, *redColor, *yellowColor, *redHColor, *yellowHColor; + QCursor *arrowAll, *arrow[7]; + + Ball *n1, *n2, *h1, *h2, *d1, *d2; //, *e; + +#ifdef HAVE_KIR + KIRenderer *m_backRenderer; +#endif +}; + +#endif /* _BOARDWIDGET_H_ */ + |