diff options
Diffstat (limited to 'examples/corelib/bindableproperties/bindablesubscription/bindablesubscription.cpp')
-rw-r--r-- | examples/corelib/bindableproperties/bindablesubscription/bindablesubscription.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/examples/corelib/bindableproperties/bindablesubscription/bindablesubscription.cpp b/examples/corelib/bindableproperties/bindablesubscription/bindablesubscription.cpp new file mode 100644 index 0000000000..32f4194635 --- /dev/null +++ b/examples/corelib/bindableproperties/bindablesubscription/bindablesubscription.cpp @@ -0,0 +1,51 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include "bindablesubscription.h" +#include "bindableuser.h" + +//! [binding-expressions] + +BindableSubscription::BindableSubscription(BindableUser *user) : m_user(user) +{ + Q_ASSERT(user); + + m_price.setBinding( + [this] { return qRound(calculateDiscount() * int(m_duration) * basePrice()); }); + + m_isValid.setBinding([this] { + return m_user->country() != BindableUser::Country::AnyCountry && m_user->age() > 12; + }); +} + +//! [binding-expressions] + +//! [set-duration] + +void BindableSubscription::setDuration(Duration newDuration) +{ + m_duration = newDuration; +} + +//! [set-duration] + +double BindableSubscription::calculateDiscount() const +{ + switch (m_duration) { + case Monthly: + return 1; + case Quarterly: + return 0.9; + case Yearly: + return 0.6; + } + Q_UNREACHABLE_RETURN(-1); +} + +int BindableSubscription::basePrice() const +{ + if (m_user->country() == BindableUser::Country::AnyCountry) + return 0; + + return (m_user->country() == BindableUser::Country::Norway) ? 100 : 80; +} |