• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

kigo

  • sources
  • kde-4.14
  • kdegames
  • kigo
  • src
  • gui
  • widgets
setupwidget.cpp
Go to the documentation of this file.
1 /*
2  Copyright 2008 Sascha Peilicke <sasch.pe@gmx.de>
3 
4  This program is free software; you can redistribute it and/or
5  modify it under the terms of the GNU General Public License as
6  published by the Free Software Foundation; either version 2 of
7  the License or (at your option) version 3 or any later version
8  accepted by the membership of KDE e.V. (or its successor approved
9  by the membership of KDE e.V.), which shall act as a proxy
10  defined in Section 14 of version 3 of the license.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #include "setupwidget.h"
22 #include "game/game.h"
23 #include "preferences.h"
24 #include "gui/graphicsview/themerenderer.h"
25 
26 #include <QFile>
27 
28 namespace Kigo {
29 
30 SetupWidget::SetupWidget(Game *game, QWidget *parent)
31  : QWidget(parent), m_game(game)
32  , m_lastFixedHandicap(Preferences::fixedHandicapValue())
33 {
34  Q_ASSERT(m_game);
35  setupUi(this);
36 
37  startButton->setIcon(KIcon( QLatin1String( "media-playback-start" )));
38  QPixmap whiteStone = ThemeRenderer::self()->renderElement(Kigo::ThemeRenderer::WhiteStone, QSize(48, 48));
39  whiteStoneImageLabel->setPixmap(whiteStone);
40  QPixmap blackStone = ThemeRenderer::self()->renderElement(Kigo::ThemeRenderer::BlackStone, QSize(48, 48));
41  blackStoneImageLabel->setPixmap(blackStone);
42 
43  connect(startButton, SIGNAL(clicked()), this, SIGNAL(startClicked()));
44  connect(whiteIsComputerCheckBox, SIGNAL(toggled(bool)), this, SLOT(whiteIsComputer(bool)));
45  connect(blackIsComputerCheckBox, SIGNAL(toggled(bool)), this, SLOT(blackIsComputer(bool)));
46  connect(sizeSmall, SIGNAL(clicked(bool)), this, SLOT(on_boardSize_changed()));
47  connect(sizeMedium, SIGNAL(clicked(bool)), this, SLOT(on_boardSize_changed()));
48  connect(sizeBig, SIGNAL(clicked(bool)), this, SLOT(on_boardSize_changed()));
49  connect(sizeOther, SIGNAL(clicked(bool)), this, SLOT(on_boardSize_changed()));
50  connect(sizeOtherSpinBox, SIGNAL(valueChanged(int)), this, SLOT(on_boardSize_changed()));
51 }
52 
53 SetupWidget::~SetupWidget()
54 {
55  saveSettings();
56 }
57 
58 void SetupWidget::newGame()
59 {
60  loadSettings();
61  m_game->init();
62  gameSetupStack->setCurrentIndex(0);
63  m_game->setBoardSize(Preferences::boardSize());
64  handicapSpinBox->setSuffix(ki18np(" Stone", " Stones"));
65  m_game->setFixedHandicap(Preferences::fixedHandicapValue());
66 }
67 
68 void SetupWidget::loadedGame(const QString &fileName)
69 {
70  Q_ASSERT(!fileName.isEmpty());
71 
72  loadSettings();
73  gameSetupStack->setCurrentIndex(1);
74  m_game->init(fileName);
75  m_lastFileName = fileName;
76 
77  QFile file(fileName);
78  if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
79  return;
80  }
81  QTextStream in(&file);
82  QString content = in.readAll();
83  file.close();
84 
85  QRegExp re;
86 
87  // Parse additional game information from SGF file
88  re.setPattern("EV\\[([\\w ]+)\\]"); // Capture and set event
89  if (re.indexIn(content) > -1) {
90  eventLabel->setText(re.cap(1));
91  eventLabel->setVisible(true);
92  eventStaticLabel->setVisible(true);
93  } else {
94  eventLabel->setVisible(false);
95  eventStaticLabel->setVisible(false);
96  }
97 
98  re.setPattern("PC\\[([\\w ,]+)\\]"); // location
99  if (re.indexIn(content) > -1) {
100  locationLabel->setText(re.cap(1));
101  locationLabel->setVisible(true);
102  locationStaticLabel->setVisible(true);
103  } else {
104  locationLabel->setVisible(false);
105  locationStaticLabel->setVisible(false);
106  }
107 
108  re.setPattern("RO\\[(\\d+)\\]"); // Capture and set round
109  if (re.indexIn(content) > -1) {
110  roundLabel->setText(re.cap(1));
111  roundLabel->setVisible(true);
112  roundStaticLabel->setVisible(true);
113  } else {
114  roundLabel->setVisible(false);
115  roundStaticLabel->setVisible(false);
116  }
117  re.setPattern("DT\\[([\\w/\\-:\\.,]+)\\]"); // Capture and set date
118  if (re.indexIn(content) > -1) {
119  dateLabel->setText(re.cap(1));
120  dateLabel->setVisible(true);
121  dateStaticLabel->setVisible(true);
122  } else {
123  dateLabel->setVisible(false);
124  dateStaticLabel->setVisible(false);
125  }
126 
127  re.setPattern("PB\\[([\\w ]+)\\]"); // Capture and set black player name
128  if (re.indexIn(content) > -1) {
129  blackPlayerName->setText(re.cap(1));
130  }
131  re.setPattern("BR\\[([\\w ]+)\\]"); // Capture and set black player rank
132  if (re.indexIn(content) > -1) {
133  blackPlayerName->setText(blackPlayerName->text() + " (" + re.cap(1) + ')');
134  }
135  re.setPattern("BT\\[([\\w ]+)\\]"); // black team
136  if (re.indexIn(content) > -1) {
137  blackPlayerName->setText(blackPlayerName->text() + " [" + re.cap(1) + ']');
138  }
139 
140  re.setPattern("PW\\[([\\w ]+)\\]"); // Capture and set white player name
141  if (re.indexIn(content) > -1) {
142  whitePlayerName->setText(re.cap(1));
143  }
144  re.setPattern("WR\\[([\\w ]+)\\]"); // Capture and set white player rank
145  if (re.indexIn(content) > -1) {
146  whitePlayerName->setText(whitePlayerName->text() + " (" + re.cap(1) + ')');
147  }
148  re.setPattern("WT\\[([\\w ]+)\\]"); // white team
149  if (re.indexIn(content) > -1) {
150  whitePlayerName->setText(whitePlayerName->text() + " [" + re.cap(1) + ']');
151  }
152 
153  re.setPattern("KM\\[(\\d+\\.?\\d*)\\]"); // Capture and set komi
154  if (re.indexIn(content) > -1) {
155  komiLabel->setText(re.cap(1));
156  komiLabel->setVisible(true);
157  komiStaticLabel->setVisible(true);
158  } else {
159  komiLabel->setVisible(false);
160  komiStaticLabel->setVisible(false);
161  }
162 
163  re.setPattern("TM\\[(\\d+)\\]"); // time limit in seconds
164  if (re.indexIn(content) > -1) {
165  int seconds = re.cap(1).toInt();
166  int hours = seconds/3600;
167  int minutes = (seconds/60)%60;
168  QString minuteString = i18ncp("Time limit of a game in minutes", "%1 minute", "%1 minutes", minutes);
169  if (hours) {
170  timeLabel->setText(i18ncp("Time limit of a game, hours, minutes", "%1 hour, %2", "%1 hours, %2", hours, minuteString));
171  } else {
172  timeLabel->setText(minuteString);
173  }
174  timeLabel->setVisible(true);
175  timeStaticLabel->setVisible(true);
176  } else {
177  timeLabel->setVisible(false);
178  timeStaticLabel->setVisible(false);
179  }
180 
181  re.setPattern("RE\\[([WB]\\+[\\w\\.]+)\\]"); // Capture and set score
182  if (re.indexIn(content) > -1) {
183  scoreLabel->setText(re.cap(1));
184  scoreLabel->setVisible(true);
185  scoreStaticLabel->setVisible(true);
186  } else {
187  scoreLabel->setVisible(false);
188  scoreStaticLabel->setVisible(false);
189  }
190 
191  int count = m_game->moveCount();
192  startMoveSpinBox->setSuffix(i18n(" of %1", count));
193  startMoveSpinBox->setMaximum(count); // And set it as maximum and current
194  startMoveSpinBox->setValue(count); // move.
195  startMoveSpinBox->setFocus(Qt::OtherFocusReason);
196  connect(startMoveSpinBox, SIGNAL(valueChanged(int)), this, SLOT(on_startMoveSpinBox_valueChanged(int)));
197 }
198 
199 void SetupWidget::commit()
200 {
201  saveSettings();
202 
203  if (Preferences::whitePlayerHuman()) {
204  m_game->whitePlayer().setType(Player::Human);
205  } else {
206  m_game->whitePlayer().setType(Player::Computer);
207  }
208  m_game->whitePlayer().setStrength(Preferences::whitePlayerStrength());
209  m_game->whitePlayer().setName(Preferences::whitePlayerName());
210 
211  if (Preferences::blackPlayerHuman()) {
212  m_game->blackPlayer().setType(Player::Human);
213  } else {
214  m_game->blackPlayer().setType(Player::Computer);
215  }
216  m_game->blackPlayer().setStrength(Preferences::blackPlayerStrength());
217  m_game->blackPlayer().setName(Preferences::blackPlayerName());
218 
219  // Set additional configuration based on game type
220  if (gameSetupStack->currentIndex() == 0) { // The user configured a new game
221  m_game->setKomi(Preferences::komi());
222  } else { // The user configured a loaded game
223  //Note: None currently
224  }
225  m_game->gameSetup();
226 }
227 
228 void SetupWidget::on_startMoveSpinBox_valueChanged(int value)
229 {
230  if (!m_lastFileName.isEmpty()) {
231  m_game->init(m_lastFileName, value);
232  }
233 
234  if (m_game->currentPlayer().isWhite()) {
235  playerLabel->setText(i18n("White to play"));
236  } else if (m_game->currentPlayer().isBlack()) {
237  playerLabel->setText(i18n("Black to play"));
238  } else {
239  playerLabel->setText("");
240  }
241 }
242 
243 void SetupWidget::on_boardSize_changed()
244 {
245  if (sizeOther->isChecked()) { // Custom size enabled
246  sizeOtherSpinBox->setEnabled(true);
247  m_game->setBoardSize(sizeOtherSpinBox->value());
248  } else {
249  sizeOtherSpinBox->setEnabled(false);
250  if (sizeSmall->isChecked()) {
251  m_game->setBoardSize(9);
252  } else if (sizeMedium->isChecked()) {
253  m_game->setBoardSize(13);
254  } else if (sizeBig->isChecked()) {
255  m_game->setBoardSize(19);
256  }
257  }
258  updateHandicapBox(); // Handicap depends on board size
259 }
260 
261 void SetupWidget::on_handicapSpinBox_valueChanged(int value)
262 {
263  m_lastFixedHandicap = value; // Treat 1 handicap as 0
264  m_game->init(); // Setting fixed handicap works only
265  m_game->setFixedHandicap(value == 1 ? 0 : value); // on a blank game board
266 }
267 
268 void SetupWidget::updateHandicapBox()
269 {
270  int maxFixedHandicap = m_game->fixedHandicapUpperBound();
271  handicapSpinBox->setEnabled(maxFixedHandicap > 0);
272  handicapSpinBox->setMaximum(maxFixedHandicap);
273  handicapSpinBox->setValue(m_lastFixedHandicap);
274  on_handicapSpinBox_valueChanged(handicapSpinBox->value());
275 }
276 
277 void SetupWidget::loadSettings()
278 {
279  whitePlayerName->setText(Preferences::whitePlayerName());
280  whiteStrengthSlider->setValue(Preferences::whitePlayerStrength());
281  whiteIsComputerCheckBox->setChecked(!Preferences::whitePlayerHuman());
282 
283  blackPlayerName->setText(Preferences::blackPlayerName());
284  blackStrengthSlider->setValue(Preferences::blackPlayerStrength());
285  blackIsComputerCheckBox->setChecked(!Preferences::blackPlayerHuman());
286 
287  komiSpinBox->setValue(Preferences::komi());
288  handicapSpinBox->setValue(Preferences::fixedHandicapValue());
289 
290  switch (Preferences::boardSize()) {
291  case 9:
292  sizeSmall->setChecked(true);
293  break;
294  case 13:
295  sizeMedium->setChecked(true);
296  break;
297  case 19:
298  sizeBig->setChecked(true);
299  break;
300  default:
301  sizeOther->setChecked(true);
302  sizeOtherSpinBox->setEnabled(true);
303  sizeOtherSpinBox->setValue(Preferences::boardSize());
304  break;
305  }
306 }
307 
308 void SetupWidget::saveSettings()
309 {
310  if (gameSetupStack->currentIndex() == 0) { // The user configured a new game
311  Preferences::setWhitePlayerName(whitePlayerName->text());
312  Preferences::setBlackPlayerName(blackPlayerName->text());
313  } else {
314  //Note: Don't save player names for a loaded game because the names set by
315  // the user are overridden by those found in the SGF file.
316  }
317 
318  Preferences::setWhitePlayerStrength(whiteStrengthSlider->value());
319  Preferences::setBlackPlayerStrength(blackStrengthSlider->value());
320  Preferences::setWhitePlayerHuman(!whiteIsComputerCheckBox->isChecked());
321  Preferences::setBlackPlayerHuman(!blackIsComputerCheckBox->isChecked());
322 
323  Preferences::setKomi(komiSpinBox->value());
324  Preferences::setFixedHandicapValue(handicapSpinBox->value());
325 
326  if (sizeSmall->isChecked()) {
327  Preferences::setBoardSize(9);
328  } else if (sizeMedium->isChecked()) {
329  Preferences::setBoardSize(13);
330  } else if (sizeBig->isChecked()) {
331  Preferences::setBoardSize(19);
332  } else if (sizeOther->isChecked()) {
333  Preferences::setBoardSize(sizeOtherSpinBox->value());
334  }
335  Preferences::self()->writeConfig();
336 }
337 
338 void SetupWidget::blackIsComputer(bool computer)
339 {
340  blackPlayerStack->setCurrentIndex(computer ? 1 : 0);
341 }
342 
343 void SetupWidget::whiteIsComputer(bool computer)
344 {
345  whitePlayerStack->setCurrentIndex(computer ? 1 : 0);
346 }
347 
348 } // End of namespace Kigo
349 
350 #include "moc_setupwidget.cpp"
Preferences::setWhitePlayerHuman
static void setWhitePlayerHuman(bool v)
Set Is white a human player?
Definition: preferences.h:215
Preferences::blackPlayerName
static QString blackPlayerName()
Get The name of the black player.
Definition: preferences.h:175
QWidget
QRegExp::cap
QString cap(int nth) const
Preferences::setBlackPlayerHuman
static void setBlackPlayerHuman(bool v)
Set Is black a human player?
Definition: preferences.h:146
QWidget::setupUi
void setupUi(QWidget *widget)
Kigo::Game::setKomi
bool setKomi(float komi)
Set the komi.
Definition: game.cpp:214
Kigo::SetupWidget::SetupWidget
SetupWidget(Game *game, QWidget *parent=0)
Definition: setupwidget.cpp:30
Kigo::SetupWidget::startClicked
void startClicked()
Kigo::SetupWidget::newGame
void newGame()
Definition: setupwidget.cpp:58
Preferences::setFixedHandicapValue
static void setFixedHandicapValue(int v)
Set Extra stones for the black player.
Definition: preferences.h:346
Preferences::blackPlayerStrength
static int blackPlayerStrength()
Get The strength of the black player.
Definition: preferences.h:206
Kigo::SetupWidget::loadedGame
void loadedGame(const QString &fileName)
Definition: setupwidget.cpp:68
Kigo::Player::setName
void setName(const QString &name)
Definition: player.h:59
Preferences::setWhitePlayerStrength
static void setWhitePlayerStrength(int v)
Set The strength of the white player.
Definition: preferences.h:253
game.h
Preferences::setKomi
static void setKomi(double v)
Set Komi.
Definition: preferences.h:315
Preferences::setBlackPlayerStrength
static void setBlackPlayerStrength(int v)
Set The strength of the black player.
Definition: preferences.h:184
Kigo::Game::gameSetup
void gameSetup()
Definition: game.cpp:769
QFile
QTextStream
Kigo::Game::whitePlayer
Player & whitePlayer()
Definition: game.h:160
QRegExp::setPattern
void setPattern(const QString &pattern)
Kigo::Player::setStrength
bool setStrength(int strength)
Definition: player.cpp:55
QRegExp::indexIn
int indexIn(const QString &str, int offset, CaretMode caretMode) const
QRegExp
Preferences::setBoardSize
static void setBoardSize(int v)
Set Go board size.
Definition: preferences.h:284
Kigo::Player::setType
void setType(Type type)
Definition: player.h:68
QString::toInt
int toInt(bool *ok, int base) const
Preferences::setBlackPlayerName
static void setBlackPlayerName(const QString &v)
Set The name of the black player.
Definition: preferences.h:165
QString::isEmpty
bool isEmpty() const
Kigo::Game::moveCount
int moveCount()
Returns the number of moves in the game so far.
Definition: game.cpp:518
Kigo::Player::Human
A human player.
Definition: player.h:48
QString
themerenderer.h
QFile::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > mode)
Kigo::Game::setBoardSize
bool setBoardSize(int size)
Set the board size to NxN.
Definition: game.cpp:189
Kigo::SetupWidget::~SetupWidget
~SetupWidget()
Definition: setupwidget.cpp:53
Preferences::blackPlayerHuman
static bool blackPlayerHuman()
Get Is black a human player?
Definition: preferences.h:156
QPixmap
Preferences::komi
static double komi()
Get Komi.
Definition: preferences.h:337
Kigo::Game::fixedHandicapUpperBound
int fixedHandicapUpperBound()
Returns the maximum amount fixed handicap stones placeable at the current Go board size...
Definition: game.cpp:255
QSize
preferences.h
QFile::close
virtual void close()
Preferences::fixedHandicapValue
static int fixedHandicapValue()
Get Extra stones for the black player.
Definition: preferences.h:368
Kigo::Game::blackPlayer
Player & blackPlayer()
Definition: game.h:162
Kigo::Game::init
bool init()
Initialize a new game.
Definition: game.cpp:110
QLatin1String
Kigo::Player::isBlack
bool isBlack() const
Definition: player.h:72
Kigo::ThemeRenderer::self
static ThemeRenderer * self()
Only one ThemeRenderer is needed per application, this method returns the singleton self...
Definition: themerenderer.h:78
setupwidget.h
Kigo::ThemeRenderer::BlackStone
Definition: themerenderer.h:66
Kigo::Game::currentPlayer
Player & currentPlayer()
Definition: game.h:158
Preferences::whitePlayerStrength
static int whitePlayerStrength()
Get The strength of the white player.
Definition: preferences.h:275
Preferences::self
static Preferences * self()
Definition: preferences.cpp:17
Kigo::ThemeRenderer::WhiteStone
Definition: themerenderer.h:63
Kigo::Game::setFixedHandicap
bool setFixedHandicap(int handicap)
Set up fixed placement handicap stones.
Definition: game.cpp:230
Preferences::setWhitePlayerName
static void setWhitePlayerName(const QString &v)
Set The name of the white player.
Definition: preferences.h:234
Kigo::Game
The Game class implements the Go game and acts as a wrapper around a remote Go Game game implementing...
Definition: game.h:60
Preferences
Definition: preferences.h:9
Kigo::ThemeRenderer::renderElement
void renderElement(Element element, QPainter *painter, const QRectF &rect) const
Renders a specific element of the current SVG theme.
Definition: themerenderer.cpp:86
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QTextStream::readAll
QString readAll()
Kigo::Player::isWhite
bool isWhite() const
Definition: player.h:71
Kigo::Player::Computer
A computer player.
Definition: player.h:49
Kigo::SetupWidget::commit
void commit()
To actually commit the configured values to the Go backend, this method has to be called...
Definition: setupwidget.cpp:199
Preferences::whitePlayerHuman
static bool whitePlayerHuman()
Get Is white a human player?
Definition: preferences.h:225
Preferences::boardSize
static int boardSize()
Get Go board size.
Definition: preferences.h:306
Preferences::whitePlayerName
static QString whitePlayerName()
Get The name of the white player.
Definition: preferences.h:244
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:29 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kigo

Skip menu "kigo"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal