Typo
[chessclock] / chessclockwindow.cpp
1 /**************************************************************************
2
3     Chess Clock
4
5     Copyright (c) Arto Hyvättinen 2010
6
7     This file is part of Chess Clock software.
8
9     Chess Clock is free software: you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation, either version 3 of the License, or
12     (at your option) any later version.
13
14     Chess Clock is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     GNU General Public License for more details.
18
19
20 **************************************************************************/
21
22 #include "chessclockwindow.h"
23
24 #include "classes/clockswidget.h"
25 #include "classes/chessclockwidget.h"
26 #include "classes/startwidget.h"
27 #include "classes/timecontrol.h"
28
29 // Time controls
30 #include "classes/timecontrol/notimecontrol.h"
31 #include "classes/timecontrol/fischertimecontrol.h"
32 #include "classes/timecontrol/fischeraftertimecontrol.h"
33 #include "classes/timecontrol/delaytimecontrol.h"
34 #include "classes/timecontrol/delayaftertimecontrol.h"
35 #include "classes/timecontrol/hourglasstimecontrol.h"
36
37 #include <QIcon>
38 #include <QApplication>
39 #include <QMenuBar>
40 #include <QMessageBox>
41 #include <QStackedWidget>
42 #include <QProcess>
43
44 ChessClockWindow::ChessClockWindow(QWidget *parent)
45     : QMainWindow(parent)
46 {
47
48     setWindowIcon( QIcon(":/rc/pic/chessclock.png"));
49     setWindowTitle( QString("%1 %2").arg(qApp->applicationName()).arg(qApp->applicationVersion()) );
50
51     // Start widget to select time control
52     start_ = new StartWidget;
53     clocks_ = 0;
54
55     initTimeControls();
56
57     stack_ = new QStackedWidget;
58     stack_->addWidget(start_);
59
60     setCentralWidget( stack_ );
61
62     connect( start_, SIGNAL(selected(TimeControl*)), this, SLOT(startGame(TimeControl*)));
63
64     // Set up menu
65     menuBar()->addAction( tr("Pause"), this, SLOT(pause()));
66     menuBar()->addAction( tr("New game"), this, SLOT(newGame()));
67     menuBar()->addAction( tr("Visit web page"), this, SLOT(visitWeb()));
68     menuBar()->addAction( tr("About"),this, SLOT(about()));
69     menuBar()->addAction(tr("About Qt"), this, SLOT(aboutQt()));
70
71 }
72
73 void ChessClockWindow::pause()
74 {
75     if( clocks_ )
76         clocks_->pause();
77 }
78
79 void ChessClockWindow::newGame()
80 {
81     pause();
82     if(  clocks_ == 0 ||  !clocks_->isPlayStarted()  || QMessageBox::question(this, tr("Start new game"),
83                               tr("Really quit current game and start new one with current settings?"),
84                               QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
85     {
86         stack_->setCurrentWidget(start_);
87
88         if( clocks_ )
89         {   stack_->removeWidget(clocks_);
90             delete clocks_;
91         }
92         clocks_=0;
93     }
94 }
95
96 void ChessClockWindow::visitWeb()
97 {
98     pause();
99     QProcess* process = new QProcess(this);
100     process->start(QString("browser --url=chessclock.garage.maemo.org"));
101 }
102
103 void ChessClockWindow::about()
104 {
105     pause();
106     QMessageBox::about(this, tr("About ChessClock"),
107                        tr("<h1>Chess Clock %1</h1>"
108                           "&copy;Arto Hyv&auml;ttinen 2010"
109                           "<p>Chess Clock is free software under the terms of GNU General Public License 3"
110                           "<p>Bugtracker and instructions at <a>http://chessclock.garage.maemo.org</a>"
111                           ).arg(qApp->applicationVersion())) ;
112 }
113
114 void ChessClockWindow::aboutQt()
115 {
116     pause();
117     qApp->aboutQt();
118 }
119
120
121 void ChessClockWindow::initTimeControls()
122 {
123     start_->addTimeControl( new NoTimeControl );
124     start_->addTimeControl( new FischerTimeControl);
125     start_->addTimeControl( new FischerAfterTimeControl);
126     start_->addTimeControl( new DelayTimeControl );
127     start_->addTimeControl( new DelayAfterTimeControl);
128     start_->addTimeControl( new HourGlassTimeControl);
129 }
130
131 void ChessClockWindow::startGame(TimeControl *timecontrol)
132 {
133     ClocksWidget* newWidget = timecontrol->initGame(false);
134     if( newWidget )
135     {
136
137         clocks_ = newWidget;
138         stack_->addWidget(clocks_);
139         stack_->setCurrentWidget(clocks_);
140     }
141 }
142
143
144 ChessClockWindow::~ChessClockWindow()
145 {
146
147 }