KDEGames

kgameclock.cpp
1 /*
2  This file is part of the KDE games library
3  SPDX-FileCopyrightText: 2007 Mauricio Piacentini <[email protected]>
4  Portions reused from KGameLCDClock
5  SPDX-FileCopyrightText: 2001, 2002, 2003 Nicolas Hadacek <[email protected]>
6 
7  SPDX-License-Identifier: LGPL-2.0-only
8 */
9 
10 #include "kgameclock.h"
11 
12 // Qt
13 #include <QString>
14 #include <QTimer>
15 
16 class KGameClockPrivate
17 {
18 public:
19  KGameClockPrivate() = default;
20 
21 public:
22  QTimer *timerClock;
23  uint totalSeconds = 0;
24  KGameClock::ClockType clocktype;
25 };
26 
27 namespace
28 {
29 QString timeSectionString(uint x)
30 {
31  return QString::number(x).rightJustified(2, QLatin1Char('0'), true);
32 }
33 
34 QString timeStringHourMinSec(uint hour, uint min, uint sec)
35 {
36  return timeSectionString(hour) + QLatin1Char(':') + timeSectionString(min) + QLatin1Char(':') + timeSectionString(sec);
37 }
38 
39 QString timeStringMinSec(uint min, uint sec)
40 {
41  return timeSectionString(min) + QLatin1Char(':') + timeSectionString(sec);
42 }
43 
44 } // namespace
45 
47  : QObject(parent)
48  , d_ptr(new KGameClockPrivate)
49 {
50  Q_D(KGameClock);
51 
52  d->clocktype = clocktype;
53  d->timerClock = new QTimer(this);
54  connect(d->timerClock, &QTimer::timeout, this, &KGameClock::timeoutClock);
55 }
56 
57 KGameClock::~KGameClock() = default;
58 
59 void KGameClock::timeoutClock()
60 {
61  Q_D(KGameClock);
62 
63  d->totalSeconds++;
64  showTime();
65 }
66 
68 {
69  Q_D(const KGameClock);
70 
71  uint sec = d->totalSeconds;
72  if (d->clocktype == MinSecOnly) {
73  return timeStringMinSec((sec / 60) % 60, sec % 60);
74  }
75  if (d->clocktype == FlexibleHourMinSec) {
76  if (sec < 3600)
77  return timeStringMinSec(sec / 60, sec % 60);
78  return timeStringHourMinSec(sec / 3600, (sec / 60) % 60, sec % 60);
79  }
80  if (d->clocktype == LongMinSec) {
81  return timeStringMinSec(sec / 60, sec % 60);
82  }
83  // default is HourMinSec
84  return timeStringHourMinSec(sec / 3600, (sec / 60) % 60, sec % 60);
85 }
86 
88 {
89  Q_EMIT timeChanged(timeString());
90 }
91 
93 {
94  Q_D(KGameClock);
95 
96  d->timerClock->stop();
97  d->totalSeconds = 0;
98  resume();
99  showTime();
100 }
101 
103 {
104  Q_D(KGameClock);
105 
106  d->timerClock->start(1000); // 1 second
107 }
108 
110 {
111  Q_D(KGameClock);
112 
113  d->timerClock->stop();
114 }
115 
117 {
118  Q_D(const KGameClock);
119 
120  return d->totalSeconds;
121 }
122 
123 void KGameClock::setTime(uint sec)
124 {
125  Q_D(KGameClock);
126 
127  d->totalSeconds = sec;
128  showTime();
129 }
130 
132 {
133  const QList<QStringView> sections = QStringView(s).split(QLatin1Char(':'));
134  Q_ASSERT(sections.size() <= 3);
135  uint sec = 0;
136  for (const QStringView &x : sections) {
137  sec = sec * 60 + x.toUInt();
138  }
139  setTime(sec);
140 }
141 
142 #include "moc_kgameclock.cpp"
QString rightJustified(int width, QChar fill, bool truncate) const const
QString number(int n, int base)
Q_EMITQ_EMIT
void showTime()
Refresh.
Definition: kgameclock.cpp:87
KGameClock(QObject *parent=nullptr, ClockType clocktype=HourMinSec)
Definition: kgameclock.cpp:46
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
int size() const const
virtual void restart()
Reset the clock and start again from zero.
Definition: kgameclock.cpp:92
uint seconds() const
Definition: kgameclock.cpp:116
QString timeString() const
Definition: kgameclock.cpp:67
void timeout()
void setTime(uint seconds)
Set the time.
Definition: kgameclock.cpp:123
ClockType
Controls the format of return value of timeString()
Definition: kgameclock.h:41
virtual void resume()
Resume counting time from the current position.
Definition: kgameclock.cpp:102
virtual void pause()
Pause the clock.
Definition: kgameclock.cpp:109
Q_D(Todo)
@ FlexibleHourMinSec
Definition: kgameclock.h:44
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Nov 29 2023 04:08:40 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.