51a37b19bd34026aa637a08482426534cdc2440c
[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 #include <QDebug>
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(int)),this,SLOT(setEquals()));
59
60     equals_->setChecked(true);
61     setEquals();
62
63     whiteLabel_ = new QLabel;
64     whiteLabel_->setPixmap(QPixmap(":/rc/pic/white_small.png"));
65     blackLabel_ = new QLabel;
66     blackLabel_->setPixmap(QPixmap(":/rc/pic/black_small.png"));
67
68     // Lay out
69     QGridLayout* layout = new QGridLayout;
70     layout->addWidget(equals_,0,0);
71     layout->addWidget(whiteLabel_,0,1,1,1,Qt::AlignCenter);
72     layout->addWidget(blackLabel_,0,2,1,1,Qt::AlignCenter);
73
74     layout->addWidget(initialLabel_,1,0);
75     layout->addWidget(whiteInitial_,1,1);
76     layout->addWidget(blackInitial_,1,2);
77
78     layout->addWidget(additionLabel_,2,0);
79     layout->addWidget(whiteAddition_,2,1);
80     layout->addWidget(blackAddition_,2,2);
81
82     layout->addWidget(perTurnLabel_,3,0);
83     layout->addWidget(whiteTurns_,3,1);
84     layout->addWidget(blackTurns_,3,2);
85
86     QPushButton* button = new QPushButton( tr("Start game"));
87     connect( button, SIGNAL(clicked()), this, SLOT(accept()));
88     layout->addWidget(button,4,2);
89
90     setLayout( layout );
91     setWindowTitle( timeControlName_);
92
93 }
94
95 void BasicDialog::setEquals()
96 {
97     blackInitial_->setDisabled( equals_->isChecked());
98     blackAddition_->setDisabled( equals_->isChecked());
99     blackTurns_->setDisabled( equals_->isChecked());
100
101 }
102
103
104 void BasicDialog::disablePerTurns()
105 {
106     perTurnLabel_->setVisible(false);
107     whiteTurns_->setVisible(false);
108     blackTurns_->setVisible(false);
109 }
110
111 void BasicDialog::disableAddition()
112 {
113     disablePerTurns();
114     whiteAddition_->setVisible(false);
115     blackAddition_->setVisible(false);
116     additionLabel_->setVisible(false);
117 }
118
119 void BasicDialog::disableUnEquals()
120 {
121     equals_->setChecked(true);
122     equals_->setVisible(false);
123     whiteLabel_->setVisible(false);
124     blackLabel_->setVisible(false);
125     blackInitial_->setVisible(false);
126     blackAddition_->setVisible(false);
127     blackTurns_->setVisible(false);
128 }
129
130 void BasicDialog::store()
131 {
132     // Store into QSettings
133     QSettings s;
134     s.beginGroup(timeControlName_);
135     s.setValue("Equals",equals_->isChecked());
136     s.setValue("WhiteInitial",whiteInitial_->time());
137     s.setValue("WhiteAddition",whiteAddition_->time());
138     s.setValue("WhitePerTurns",whiteTurns_->value());
139
140     s.setValue("BlackInitial",blackInitial_->time());
141     s.setValue("BlackAddition",blackAddition_->time());
142     s.setValue("BlackPerTurns",blackTurns_->value());
143 }
144
145 void BasicDialog::init(QTime whiteInitial, QTime blackInitial, QTime whiteAddition, QTime blackAddition, int whitePerTurns, int blackPerTurns)
146 {
147     // Load from QSettings
148     // first time use defaults
149     QSettings s;
150     s.beginGroup(timeControlName_);
151
152     equals_->setChecked(s.value("Equals",true).toBool() );
153     setEquals();
154     whiteInitial_->setTime( s.value("WhiteInitial",whiteInitial).toTime());
155     blackInitial_->setTime(s.value("BlackInitial",blackInitial).toTime());
156     whiteAddition_->setTime(s.value("WhiteAddition",whiteAddition).toTime());
157     blackAddition_->setTime(s.value("BlackAddition",blackAddition).toTime());
158     whiteTurns_->setValue(s.value("WhitePerTurns",whitePerTurns).toInt());
159     blackTurns_->setValue(s.value("BlackPerTurns",blackPerTurns).toInt());
160
161 }
162
163 int BasicDialog::getWhiteInitial()
164 {
165     return toMsecs( whiteInitial_);
166 }
167
168 int BasicDialog::getWhiteAddition()
169 {
170     return toMsecs( whiteAddition_);
171 }
172
173 int BasicDialog::getWhitePerTurns()
174 {
175     return whiteTurns_->value();
176 }
177
178 int BasicDialog::getBlackInitial()
179 {
180     // if Equals is checked, black values are disabled
181     // and white values returned.
182     if( equals_->isChecked())
183         return toMsecs( whiteInitial_);
184     else
185         return toMsecs( blackInitial_);
186 }
187
188 int BasicDialog::getBlackAddition()
189 {
190     if( equals_->isChecked())
191         return toMsecs( whiteAddition_);
192     else
193         return toMsecs( blackAddition_ );
194
195 }
196
197 int BasicDialog::getBlackPerTurns()
198 {
199     if( equals_->isChecked())
200         return whiteTurns_->value();
201     else
202         return blackTurns_->value();
203 }
204
205
206 int BasicDialog::toMsecs(QTimeEdit *timeEdit)
207 {
208     QTime qtime=timeEdit->time();
209     int msecs=qtime.msecsTo(QTime(0,0,0));;
210     return 0-msecs;
211 }
212
213
214 QTimeEdit* BasicDialog::initTimeEdit()
215 {
216     // Make QTimeEdit and set up range and display format
217     QTimeEdit* timeEdit = new QTimeEdit;
218     timeEdit->setMinimumTime( QTime(0,0,0));
219     timeEdit->setMaximumTime( QTime(12,0,0));
220     timeEdit->setDisplayFormat( tr("hh:mm:ss","Time Edit display format"));
221     return timeEdit;
222 }