1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
/* Yo Emacs, this -*- C++ -*-
*******************************************************************
*******************************************************************
*
*
* KREVERSI
*
*
*******************************************************************
*
* A Reversi (or sometimes called Othello) game
*
*******************************************************************
*
* created 1997 by Mario Weilguni <[email protected]>
*
*******************************************************************
*
* This file is part of the KDE project "KREVERSI"
*
* KREVERSI 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, or (at your option)
* any later version.
*
* KREVERSI 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 KREVERSI; see the file COPYING. If not, write to
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*******************************************************************
*/
#ifndef __BOARD__H__
#define __BOARD__H__
#include <qwidget.h>
#include <qpixmap.h>
#include "Position.h"
//#include "Game.h"
#include "Move.h"
class KConfig;
class QReversiGame;
// The class Board is the visible Reversi Board widget.
//
class QReversiBoardView : public QWidget {
Q_OBJECT
public:
QReversiBoardView(QWidget *parent, QReversiGame *game);
~QReversiBoardView();
// starts all: emits some signal, so it can't be called from
// constructor
void start();
// Used by the outer KZoomMainWindow class.
void adjustSize();
// Show a hint to the user.
void showHint(Move move);
void quitHint();
// Turn on or off some special features.
void setShowLegalMoves(bool show);
void setShowMarks(bool show);
void setShowLastMove(bool show);
// View methods called from the outside.
void updateBoard(bool force = FALSE);
void animateChanged(Move move);
void setAnimationSpeed(uint);
void loadSettings();
// To get the pixmap for the status view
QPixmap chipPixmap(Color color, uint size) const;
signals:
void signalSquareClicked(int, int);
protected:
// event stuff
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *);
private:
uint zoomedSize() const;
void drawPiece(uint row, uint col, Color);
void drawOnePiece(uint row, uint col, int i);
void animateChangedRow(int row, int col, int dy, int dx);
void rotateChip(uint row, uint col);
bool isField(int row, int col) const;
void setColor(const QColor &);
QColor color() const { return bgColor; }
void setPixmap(QPixmap &);
// Methods for handling images of pieces.
enum ChipType { Unloaded, Colored, Grayscale };
void loadChips(ChipType);
ChipType chipType() const { return chiptype; }
QPixmap chipPixmap(uint i, uint size) const;
// Private drawing methods.
void showLegalMoves();
void drawSmallCircle(int x, int y, QPainter &p);
private:
QReversiGame *m_krgame; // Pointer to the game object (not owner).
// The background of the board - a color and a pixmap.
QColor bgColor;
QPixmap bg;
// the pieces
ChipType chiptype;
QPixmap allchips;
uint anim_speed;
// Special stuff used only in smaller areas.
bool m_hintShowing;
MoveList m_legalMoves;
bool m_legalMovesShowing;
bool m_marksShowing;
bool m_showLastMove;
SimpleMove m_lastMoveShown;
};
#endif
|