1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Charts module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#include <QtCharts/QCandlestickSet>
31#include <private/qcandlestickset_p.h>
32
33QT_CHARTS_BEGIN_NAMESPACE
34
35/*!
36 \class QCandlestickSet
37 \since 5.8
38 \inmodule QtCharts
39 \brief The QCandlestickSet class represents a single candlestick item in a
40 candlestick chart.
41
42 Five values are needed to create a graphical representation of a candlestick
43 item: \e open, \e high, \e low, \e close, and \e timestamp. These values can
44 be either passed to a QCandlestickSet constructor
45 or set by using setOpen(), setHigh(), setLow(), setClose(), and setTimestamp().
46
47 \sa QCandlestickSeries
48*/
49
50/*!
51 \qmltype CandlestickSet
52 \since QtCharts 2.2
53 \instantiates QCandlestickSet
54 \inqmlmodule QtCharts
55 \brief Represents a single candlestick item in a candlestick chart.
56
57 Five values are needed to create a graphical representation of a candlestick
58 item: \l open, \l high, \l low, \l close, and \l timestamp.
59
60 \sa CandlestickSeries
61*/
62
63/*!
64 \property QCandlestickSet::timestamp
65 \brief The timestamp value of the candlestick item.
66*/
67
68/*!
69 \qmlproperty real CandlestickSet::timestamp
70 The timestamp value of the candlestick item.
71*/
72
73/*!
74 \property QCandlestickSet::open
75 \brief The open value of the candlestick item.
76*/
77
78/*!
79 \qmlproperty real CandlestickSet::open
80 The open value of the candlestick item.
81*/
82
83/*!
84 \property QCandlestickSet::high
85 \brief The high value of the candlestick item.
86*/
87
88/*!
89 \qmlproperty real CandlestickSet::high
90 The high value of the candlestick item.
91*/
92
93/*!
94 \property QCandlestickSet::low
95 \brief The low value of the candlestick item.
96*/
97
98/*!
99 \qmlproperty real CandlestickSet::low
100 The low value of the candlestick item.
101*/
102
103/*!
104 \property QCandlestickSet::close
105 \brief The close value of the candlestick item.
106*/
107
108/*!
109 \qmlproperty real CandlestickSet::close
110 The close value of the candlestick item.
111*/
112
113/*!
114 \property QCandlestickSet::brush
115 \brief The brush used to fill the candlestick item.
116*/
117
118/*!
119 \property QCandlestickSet::pen
120 \brief The pen used to draw the lines of the candlestick item.
121*/
122
123/*!
124 \qmlproperty string CandlestickSet::brushFilename
125 The name of the file used as a brush for the candlestick item.
126*/
127
128/*!
129 \fn void QCandlestickSet::clicked()
130 This signal is emitted when the candlestick item is clicked.
131*/
132
133/*!
134 \qmlsignal CandlestickSet::clicked()
135 This signal is emitted when the candlestick item is clicked.
136
137 The corresponding signal handler is \c {onClicked}.
138*/
139
140/*!
141 \fn void QCandlestickSet::hovered(bool status)
142 This signal is emitted when a mouse is hovered over a candlestick
143 item.
144
145 When the mouse moves over the item, \a status turns \c true, and when the
146 mouse moves away again, it turns \c false.
147*/
148
149/*!
150 \qmlsignal CandlestickSet::hovered(bool status)
151 This signal is emitted when a mouse is hovered over a candlestick
152 item.
153
154 When the mouse moves over the item, \a status turns \c true, and when the
155 mouse moves away again, it turns \c false.
156
157 The corresponding signal handler is \c {onHovered}.
158*/
159
160/*!
161 \fn void QCandlestickSet::pressed()
162 This signal is emitted when the user clicks the candlestick item and
163 holds down the mouse button.
164*/
165
166/*!
167 \qmlsignal CandlestickSet::pressed()
168 This signal is emitted when the user clicks the candlestick item and
169 holds down the mouse button.
170
171 The corresponding signal handler is \c {onPressed}.
172*/
173
174/*!
175 \fn void QCandlestickSet::released()
176 This signal is emitted when the user releases the mouse press on the
177 candlestick item.
178*/
179
180/*!
181 \qmlsignal CandlestickSet::released()
182 This signal is emitted when the user releases the mouse press on the
183 candlestick item.
184
185 The corresponding signal handler is \c {onReleased}.
186*/
187
188/*!
189 \fn void QCandlestickSet::doubleClicked()
190 This signal is emitted when the user double-clicks a candlestick item.
191*/
192
193/*!
194 \qmlsignal CandlestickSet::doubleClicked()
195 This signal is emitted when the user double-clicks a candlestick item.
196
197 The corresponding signal handler is \c {onDoubleClicked}.
198*/
199
200/*!
201 \fn void QCandlestickSet::timestampChanged()
202 This signal is emitted when the candlestick item timestamp changes.
203 \sa timestamp
204*/
205
206/*!
207 \fn void QCandlestickSet::openChanged()
208 This signal is emitted when the candlestick item open value changes.
209 \sa open
210*/
211
212/*!
213 \fn void QCandlestickSet::highChanged()
214 This signal is emitted when the candlestick item high value changes.
215 \sa high
216*/
217
218/*!
219 \fn void QCandlestickSet::lowChanged()
220 This signal is emitted when the candlestick item low value changes.
221 \sa low
222*/
223
224/*!
225 \fn void QCandlestickSet::closeChanged()
226 This signal is emitted when the candlestick item close value changes.
227 \sa close
228*/
229
230/*!
231 \fn void QCandlestickSet::brushChanged()
232 This signal is emitted when the candlestick item brush changes.
233 \sa brush
234*/
235
236/*!
237 \fn void QCandlestickSet::penChanged()
238 This signal is emitted when the candlestick item pen changes.
239 \sa pen
240*/
241
242/*!
243 Constructs a candlestick item with an optional \a timestamp and a \a parent.
244*/
245QCandlestickSet::QCandlestickSet(qreal timestamp, QObject *parent)
246 : QObject(parent),
247 d_ptr(new QCandlestickSetPrivate(timestamp, this))
248{
249}
250
251/*!
252 Constructs a candlestick item with given ordered values. The values \a open, \a high, \a low,
253 and \a close are mandatory. The values \a timestamp and \a parent are optional.
254*/
255QCandlestickSet::QCandlestickSet(qreal open, qreal high, qreal low, qreal close, qreal timestamp,
256 QObject *parent)
257 : QObject(parent),
258 d_ptr(new QCandlestickSetPrivate(timestamp, this))
259{
260 Q_D(QCandlestickSet);
261
262 d->m_open = open;
263 d->m_high = high;
264 d->m_low = low;
265 d->m_close = close;
266
267 emit d->updatedLayout();
268}
269
270/*!
271 Destroys the candlestick item.
272*/
273QCandlestickSet::~QCandlestickSet()
274{
275}
276
277void QCandlestickSet::setTimestamp(qreal timestamp)
278{
279 Q_D(QCandlestickSet);
280
281 bool changed = d->setTimestamp(timestamp);
282 if (!changed)
283 return;
284
285 emit d->updatedLayout();
286 emit timestampChanged();
287}
288
289qreal QCandlestickSet::timestamp() const
290{
291 Q_D(const QCandlestickSet);
292
293 return d->m_timestamp;
294}
295
296void QCandlestickSet::setOpen(qreal open)
297{
298 Q_D(QCandlestickSet);
299
300 if (d->m_open == open)
301 return;
302
303 d->m_open = open;
304
305 emit d->updatedLayout();
306 emit openChanged();
307}
308
309qreal QCandlestickSet::open() const
310{
311 Q_D(const QCandlestickSet);
312
313 return d->m_open;
314}
315
316void QCandlestickSet::setHigh(qreal high)
317{
318 Q_D(QCandlestickSet);
319
320 if (d->m_high == high)
321 return;
322
323 d->m_high = high;
324
325 emit d->updatedLayout();
326 emit highChanged();
327}
328
329qreal QCandlestickSet::high() const
330{
331 Q_D(const QCandlestickSet);
332
333 return d->m_high;
334}
335
336void QCandlestickSet::setLow(qreal low)
337{
338 Q_D(QCandlestickSet);
339
340 if (d->m_low == low)
341 return;
342
343 d->m_low = low;
344
345 emit d->updatedLayout();
346 emit lowChanged();
347}
348
349qreal QCandlestickSet::low() const
350{
351 Q_D(const QCandlestickSet);
352
353 return d->m_low;
354}
355
356void QCandlestickSet::setClose(qreal close)
357{
358 Q_D(QCandlestickSet);
359
360 if (d->m_close == close)
361 return;
362
363 d->m_close = close;
364
365 emit d->updatedLayout();
366 emit closeChanged();
367}
368
369qreal QCandlestickSet::close() const
370{
371 Q_D(const QCandlestickSet);
372
373 return d->m_close;
374}
375
376void QCandlestickSet::setBrush(const QBrush &brush)
377{
378 Q_D(QCandlestickSet);
379
380 if (d->m_brush == brush)
381 return;
382
383 d->m_brush = brush;
384
385 emit d->updatedCandlestick();
386 emit brushChanged();
387}
388
389QBrush QCandlestickSet::brush() const
390{
391 Q_D(const QCandlestickSet);
392
393 return d->m_brush;
394}
395
396void QCandlestickSet::setPen(const QPen &pen)
397{
398 Q_D(QCandlestickSet);
399
400 if (d->m_pen == pen)
401 return;
402
403 d->m_pen = pen;
404
405 emit d->updatedCandlestick();
406 emit penChanged();
407}
408
409QPen QCandlestickSet::pen() const
410{
411 Q_D(const QCandlestickSet);
412
413 return d->m_pen;
414}
415
416////////////////////////////////////////////////////////////////////////////////////////////////////
417
418QCandlestickSetPrivate::QCandlestickSetPrivate(qreal timestamp, QCandlestickSet *parent)
419 : QObject(parent),
420 q_ptr(parent),
421 m_timestamp(0.0),
422 m_open(0.0),
423 m_high(0.0),
424 m_low(0.0),
425 m_close(0.0),
426 m_brush(QBrush(Qt::NoBrush)),
427 m_pen(QPen(Qt::NoPen)),
428 m_series(nullptr)
429{
430 setTimestamp(timestamp);
431}
432
433QCandlestickSetPrivate::~QCandlestickSetPrivate()
434{
435}
436
437bool QCandlestickSetPrivate::setTimestamp(qreal timestamp)
438{
439 timestamp = qMax(a: timestamp, b: qreal(0.0));
440 timestamp = qRound64(d: timestamp);
441
442 if (m_timestamp == timestamp)
443 return false;
444
445 m_timestamp = timestamp;
446
447 return true;
448}
449
450QT_CHARTS_END_NAMESPACE
451
452#include "moc_qcandlestickset.cpp"
453#include "moc_qcandlestickset_p.cpp"
454

source code of qtcharts/src/charts/candlestickchart/qcandlestickset.cpp