00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "chessclockwindow.h"
00023
00024 #include "classes/clockswidget.h"
00025 #include "classes/chessclockwidget.h"
00026 #include "classes/startwidget.h"
00027 #include "classes/timecontrol.h"
00028
00029
00030 #include "classes/timecontrol/notimecontrol.h"
00031 #include "classes/timecontrol/fischertimecontrol.h"
00032 #include "classes/timecontrol/fischeraftertimecontrol.h"
00033 #include "classes/timecontrol/delaytimecontrol.h"
00034 #include "classes/timecontrol/delayaftertimecontrol.h"
00035 #include "classes/timecontrol/hourglasstimecontrol.h"
00036
00037 #include <QIcon>
00038 #include <QApplication>
00039 #include <QMenuBar>
00040 #include <QMessageBox>
00041 #include <QStackedWidget>
00042
00043 ChessClockWindow::ChessClockWindow(QWidget *parent)
00044 : QMainWindow(parent)
00045 {
00046
00047 setWindowIcon( QIcon(":/rc/pic/chessclock.png"));
00048 setWindowTitle( QString("%1 %2").arg(qApp->applicationName()).arg(qApp->applicationVersion()) );
00049
00050
00051 start_ = new StartWidget;
00052 clocks_ = 0;
00053
00054 initTimeControls();
00055
00056 stack_ = new QStackedWidget;
00057 stack_->addWidget(start_);
00058
00059 setCentralWidget( stack_ );
00060
00061 connect( start_, SIGNAL(selected(TimeControl*)), this, SLOT(startGame(TimeControl*)));
00062
00063
00064 menuBar()->addAction( tr("Pause"), this, SLOT(pause()));
00065 menuBar()->addAction( tr("New game"), this, SLOT(newGame()));
00066
00067 }
00068
00069 void ChessClockWindow::pause()
00070 {
00071 if( clocks_ )
00072 clocks_->pause();
00073 }
00074
00075 void ChessClockWindow::newGame()
00076 {
00077 pause();
00078 if( clocks_ == 0 || !clocks_->isPlayStarted() || QMessageBox::question(this, tr("Start new game"),
00079 tr("Really quit current game and start new one with current settings?"),
00080 QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
00081 {
00082 stack_->setCurrentWidget(start_);
00083
00084 if( clocks_ )
00085 { stack_->removeWidget(clocks_);
00086 delete clocks_;
00087 }
00088 clocks_=0;
00089 }
00090 }
00091
00092 void ChessClockWindow::initTimeControls()
00093 {
00094 start_->addTimeControl( new NoTimeControl );
00095 start_->addTimeControl( new FischerTimeControl);
00096 start_->addTimeControl( new FischerAfterTimeControl);
00097 start_->addTimeControl( new DelayTimeControl );
00098 start_->addTimeControl( new DelayAfterTimeControl);
00099 start_->addTimeControl( new HourGlassTimeControl);
00100 }
00101
00102 void ChessClockWindow::startGame(TimeControl *timecontrol)
00103 {
00104 ClocksWidget* newWidget = timecontrol->initGame(false);
00105 if( newWidget )
00106 {
00107 if( clocks_ )
00108 {
00109 stack_->removeWidget(clocks_);
00110 delete clocks_;
00111 }
00112 clocks_ = newWidget;
00113 stack_->addWidget(clocks_);
00114 stack_->setCurrentWidget(clocks_);
00115 }
00116 }
00117
00118
00119 ChessClockWindow::~ChessClockWindow()
00120 {
00121
00122 }