Time control base classes
[chessclock] / classes / timecontrol / basicdialog.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 "basicdialog.h"
23
24 #include <QTimeEdit>
25 #include <QTime>
26 #include <QSpinBox>
27 #include <QCheckBox>
28 #include <QLabel>
29 #include <QGridLayout>
30 #include <QPushButton>
31 #include <QSettings>
32
33
34 BasicDialog::BasicDialog(QString timeControlName, QWidget *parent) :
35     QDialog(parent)
36 {
37     timeControlName_ = timeControlName;
38
39     // Initial times
40     initialLabel_ = new QLabel( tr("Initial time"));
41     whiteInitial_ = initTimeEdit();
42     blackInitial_ = initTimeEdit();
43     // Additional times
44     additionLabel_ = new QLabel( tr("Additional time"));
45     whiteAddition_ = initTimeEdit();
46     blackAddition_ = initTimeEdit();
47     // Turns per addition
48     perTurnLabel_ = new QLabel( tr("Addition per turn"));
49     whiteTurns_=new QSpinBox;
50     whiteTurns_->setRange(1,99);
51
52     blackTurns_=new QSpinBox;
53     blackTurns_->setRange(1,99);
54
55     // Equal times
56     equals_ = new QCheckBox( tr("Equal times"));
57
58     connect( equals_, SIGNAL(stateChanged(bool)),blackInitial_,SLOT(setDisabled(bool)));
59     connect( equals_, SIGNAL(stateChanged(bool)),blackAddition_,SLOT(setDisabled(bool)));
60     connect( equals_, SIGNAL(stateChanged(bool)),blackTurns_,SLOT(setDisabled(bool)));
61
62     equals_->setChecked(true);
63
64     whiteLabel_ = new QLabel;
65     whiteLabel_->setPixmap(QPixmap(":/rc/pic/white_small.png"));
66     blackLabel_ = new QLabel;
67     blackLabel_->setPixmap(QPixmap(":/rc/pic/black_small.png"));
68
69     // Lay out
70     QGridLayout* layout = new QGridLayout;
71     layout->addWidget(equals_,0,0);
72     layout->addWidget(whiteLabel_,0,1,1,1,Qt::AlignCenter);
73     layout->addWidget(blackLabel_,0,2,1,1,Qt::AlignCenter);
74
75     layout->addWidget(initialLabel_,1,0);
76     layout->addWidget(whiteInitial_,1,1);
77     layout->addWidget(blackInitial_,1,2);
78
79     layout->addWidget(additionLabel_,2,0);
80     layout->addWidget(whiteAddition_,2,1);
81     layout->addWidget(blackAddition_,2,2);
82
83     layout->addWidget(perTurnLabel_,3,0);
84     layout->addWidget(whiteTurns_,3,1);
85     layout->addWidget(blackTurns_,3,2);
86
87     QPushButton* button = new QPushButton( tr("Start game"));
88     connect( button, SIGNAL(clicked()), this, SLOT(accept()));
89
90     setLayout( layout );
91     setWindowTitle( timeControlName_);
92
93 }
94
95 void BasicDialog::disablePerTurns()
96 {
97     perTurnLabel_->setVisible(false);
98     whiteTurns_->setVisible(false);
99     blackTurns_->setVisible(false);
100 }
101
102 void BasicDialog::disableAddition()
103 {
104     disablePerTurns();
105     whiteAddition_->setVisible(false);
106     blackAddition_->setVisible(false);
107     additionLabel_->setVisible(false);
108 }
109
110 void BasicDialog::disableUnEquals()
111 {
112     equals_->setChecked(true);
113     equals_->setVisible(false);
114     whiteLabel_->setVisible(false);
115     blackLabel_->setVisible(false);
116     blackInitial_->setVisible(false);
117     blackAddition_->setVisible(false);
118     blackTurns_->setVisible(false);
119 }
120
121 void BasicDialog::store()
122 {
123     // Store into QSettings
124     QSettings s;
125     s.beginGroup(timeControlName_);
126     s.setValue("Equals",equals_->isChecked());
127     s.setValue("WhiteInitial",whiteInitial_->time());
128     s.setValue("WhiteAddition",whiteAddition_->time());
129     s.setValue("WhitePerTurns",whiteTurns_->value());
130
131     s.setValue("BlackInitial",blackInitial_->time());
132     s.setValue("BlackAddition",blackAddition_->time());
133     s.setValue("BlackPerTurns",blackTurns_->value());
134 }
135
136 void BasicDialog::init(QTime whiteInitial, QTime blackInitial, QTime whiteAddition, QTime blackAddition, int whitePerTurns, int blackPerTurns)
137 {
138     // Load from QSettings
139     // first time use defaults
140     QSettings s;
141     s.beginGroup(timeControlName_);
142
143     equals_->setChecked(s.value("Equals",true).toBool() );
144     whiteInitial_->setTime( s.value("WhiteInitial",whiteInitial).toTime());
145     blackInitial_->setTime(s.value("BlackInitial",blackInitial).toTime());
146     whiteAddition_->setTime(s.value("WhiteAddition",whiteAddition).toTime());
147     blackAddition_->setTime(s.value("BlackAddition",blackAddition).toTime());
148     whiteTurns_->setValue(s.value("WhitePerTurns",whitePerTurns).toInt());
149     blackTurns_->setValue(s.value("BlackPerTurns",blackPerTurns).toInt());
150
151 }
152
153 int BasicDialog::getWhiteInitial()
154 {
155     return toMsecs( whiteInitial_);
156 }
157
158 int BasicDialog::getWhiteAddition()
159 {
160     return toMsecs( whiteAddition_);
161 }
162
163 int BasicDialog::getWhitePerTurns()
164 {
165     return whiteTurns_->value();
166 }
167
168 int BasicDialog::getBlackInitial()
169 {
170     // if Equals is checked, black values are disabled
171     // and white values returned.
172     if( equals_->isChecked())
173         return toMsecs( whiteInitial_);
174     else
175         return toMsecs( blackInitial_);
176 }
177
178 int BasicDialog::getBlackAddition()
179 {
180     if( equals_->isChecked())
181         return toMsecs( whiteAddition_);
182     else
183         return toMsecs( blackAddition_ );
184
185 }
186
187 int BasicDialog::getBlackPerTurns()
188 {
189     if( equals_->isChecked())
190         return whiteTurns_->value();
191     else
192         return blackTurns_->value();
193 }
194
195
196 int BasicDialog::toMsecs(QTimeEdit *timeEdit)
197 {
198     QTime qtime=timeEdit->time();
199     return 0-qtime.msecsTo(QTime(0,0,0));
200 }
201
202
203 QTimeEdit* BasicDialog::initTimeEdit()
204 {
205     // Make QTimeEdit and set up range and display format
206     QTimeEdit* timeEdit = new QTimeEdit;
207     timeEdit->setMinimumTime( QTime(0,0,0));
208     timeEdit->setMaximumTime( QTime(12,0,0));
209     timeEdit->setDisplayFormat( tr("hh:mm:ss","Time Edit display format"));
210     return timeEdit;
211 }