summaryrefslogtreecommitdiffstats
path: root/kreversi/board.h
blob: 4f9d160338dc0df867d1c2bb5cefbc09fb21e967 (plain)
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