Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qohosutils.h
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QOHOSUTILS_H
5#define QOHOSUTILS_H
6
7#include <QtCore/private/qcore_ohos_p.h>
8#include <QtCore/private/qohoscommon_p.h>
9#include <QtCore/qglobal.h>
10#include <QtCore/qlogging.h>
11#include <cstdlib>
12#include <functional>
13#include <memory>
14#include <mutex>
15#include <optional>
16#include <string>
17#include <tuple>
18#include <type_traits>
19
20QT_BEGIN_NAMESPACE
21
22namespace QtOhos
23{
24
25template<typename IdValueType, typename TypeTag>
27{
28public:
29 using ValueType = IdValueType;
30
31 explicit TypedId(IdValueType value);
32 TypedId() = default;
33
34 TypedId(const TypedId &other);
35 TypedId &operator=(const TypedId &other);
36
37 TypedId(TypedId &&other);
39
40 ~TypedId() = default;
41
42 bool operator==(const TypedId &other) const;
43 bool operator!=(const TypedId &other) const;
44 bool operator<(const TypedId &other) const;
45
46 IdValueType value() const;
47
48private:
49 IdValueType m_value;
50};
51
52template<typename ...Ts>
54 bool, std::make_tuple(bool(Ts::value)...) == std::make_tuple(((void) Ts::value, true)...)>;
55
56template<typename ForwardIt, typename Predicate>
57ForwardIt removeMatchingWithLookahead(ForwardIt firstIt, ForwardIt lastIt, Predicate &&predicate);
58
60{
61 template<typename... Args>
62 EvaluateSequentially(Args && ...) {}
63};
64
65template<typename UnaryFunc, typename... TupleElements, std::size_t... TupleIndices>
66void tupleForEach(const std::tuple<TupleElements...> &tuple, UnaryFunc func, std::index_sequence<TupleIndices...>);
67
68template<typename UnaryFunc, typename... TupleElements>
69void tupleForEach(const std::tuple<TupleElements...> &tuple, UnaryFunc func);
70
71template<typename T>
73 QOhosConsumer<T> baseConsumer, QOhosConsumer<std::function<void()>> asyncExecutor);
74
75template<typename ...Ts, typename BaseConsumer>
78
79template<typename T>
80QOhosSupplier<T> makeMemoizingSupplier(QOhosSupplier<T> baseSupplier);
81
82std::optional<double> tryParseStringAsFiniteDouble(const std::string &inputString);
83
85
86const char *mapBoolToTrueFalseStr(bool value);
87
89 QOhosJsState &jsState, std::optional<QtOhos::QObjectThreadSafeRef> optInstanceMainWindowRef);
90
91template<typename ForwardIt, typename Predicate>
92ForwardIt removeMatchingWithLookahead(ForwardIt firstIt, ForwardIt lastIt, Predicate &&predicate)
93{
94 if (firstIt == lastIt)
95 return firstIt;
96
97 auto outputIt = firstIt;
98 auto currentIt = firstIt;
99 auto nextIt = currentIt;
100 ++nextIt;
101
102 while (nextIt != lastIt) {
103 if (!predicate(*currentIt, *nextIt)) {
104 if (outputIt != currentIt) {
105 *outputIt = std::move(*currentIt);
106 }
107 ++outputIt;
108 }
109 ++currentIt;
110 ++nextIt;
111 }
112
113 if (outputIt != currentIt) {
114 *outputIt = std::move(*currentIt);
115 }
116 ++outputIt;
117
118 return outputIt;
119}
120
121template<typename UnaryFunc, typename... TupleElements, std::size_t... TupleIndices>
122void tupleForEach(const std::tuple<TupleElements...> &tuple, UnaryFunc func, std::index_sequence<TupleIndices...>)
123{
124 EvaluateSequentially { (func(std::get<TupleIndices>(tuple)), 0)... };
125}
126
127template<typename UnaryFunc, typename... TupleElements>
128void tupleForEach(const std::tuple<TupleElements...> &tuple, UnaryFunc func)
129{
130 tupleForEach(tuple, func, std::make_index_sequence<sizeof...(TupleElements)>());
131}
132
133template<typename T>
134constexpr T makeCopyByValue(T value)
135{
136 return value;
137}
138
139template<typename IdValueType, typename Tag>
140TypedId<IdValueType, Tag>::TypedId(IdValueType value)
141 : m_value(value)
142{
143}
144
145template<typename IdValueType, typename Tag>
146bool TypedId<IdValueType, Tag>::operator==(const TypedId &other) const
147{
148 return m_value == other.m_value;
149}
150
151template<typename IdValueType, typename Tag>
152bool TypedId<IdValueType, Tag>::operator!=(const TypedId &other) const
153{
154 return m_value != other.m_value;
155}
156
157template<typename IdValueType, typename Tag>
158bool TypedId<IdValueType, Tag>::operator<(const TypedId &other) const
159{
160 return m_value < other.m_value;
161}
162
163template<typename IdValueType, typename Tag>
164IdValueType TypedId<IdValueType, Tag>::value() const
165{
166 return m_value;
167}
168
169template<typename IdValueType, typename Tag>
170TypedId<IdValueType, Tag>::TypedId(const TypedId &other) = default;
171
172template<typename IdValueType, typename Tag>
173TypedId<IdValueType, Tag> &TypedId<IdValueType, Tag>::operator=(const TypedId &other) = default;
174
175template<typename IdValueType, typename Tag>
176TypedId<IdValueType, Tag>::TypedId(TypedId &&other) = default;
177
178template<typename IdValueType, typename Tag>
179TypedId<IdValueType, Tag> &TypedId<IdValueType, Tag>::operator=(TypedId &&other) = default;
180
181template<typename T>
183 QOhosConsumer<T> baseConsumer, QOhosConsumer<std::function<void()>> asyncExecutor)
184{
185 struct Context
186 {
187 QOhosConsumer<T> baseConsumer;
188 QOhosConsumer<std::function<void()>> asyncExecutor;
189 std::mutex pendingValueMutex;
190 std::optional<T> pendingValue;
191 };
192
193 auto context = std::make_shared<Context>();
194 context->baseConsumer = std::move(baseConsumer);
195 context->asyncExecutor = std::move(asyncExecutor);
196
197 return [context](T value) {
198 std::lock_guard<std::mutex> pendingValueLock(context->pendingValueMutex);
199 if (!context->pendingValue.has_value()) {
200 context->asyncExecutor(
201 [context]() {
202 std::optional<T> pendingValue;
203 {
204 std::lock_guard<std::mutex> pendingValueLock(context->pendingValueMutex);
205 std::swap(pendingValue, context->pendingValue);
206 }
207 context->baseConsumer(pendingValue.value());
208 });
209 }
210 context->pendingValue.emplace(std::move(value));
211 };
212}
213
214template<typename ...Ts, typename BaseConsumer>
217{
218 return [baseConsumer = QOhosConsumer<Ts...>(std::move(baseConsumer))](Ts &&...args) mutable {
219 if (baseConsumer) {
220 std::exchange(baseConsumer, nullptr)(std::forward<Ts>(args)...);
221 return true;
222 } else {
223 return false;
224 }
225 };
226}
227
228template<typename T>
229QOhosSupplier<T> makeMemoizingSupplier(QOhosSupplier<T> baseSupplier)
230{
231 return [baseSupplier = std::move(baseSupplier), value = std::optional<T>()]() mutable {
232 if (!value.has_value()) {
233 value.emplace(baseSupplier());
234 baseSupplier = nullptr;
235 }
236 return value.value();
237 };
238}
239
240}
241
242QT_END_NAMESPACE
243
244#endif // QOHOSUTILS_H
QNapi::Object jsObject()
Definition window.cpp:91
JsWindowRef(JsWindowRef &&)=delete
JsWindowRef(std::string owningQAbilityInstanceId, JsWindowId windowId, QNapi::Object jsWindow, QtOhos::QObjectThreadSafeRef owningQWindowRef)
Definition window.cpp:46
bool isFocused() const
Definition window.cpp:69
JsWindowRef(const JsWindowRef &)=delete
QtOhos::QObjectThreadSafeRef owningQWindowRef() const
Definition window.cpp:86
JsWindowRef & operator=(JsWindowRef &&)=delete
Result eval(const std::string &expr, const std::vector< QNapi::ValueWrapper > &exprArgs={}) const
Definition window.h:69
bool isWindowShown() const
Definition window.cpp:56
JsWindowId id() const
Definition window.cpp:81
JsWindowRef & operator=(const JsWindowRef &)=delete
const std::string & owningQAbilityInstanceId() const
Definition window.cpp:76
QNapi::Promise evalToPromiseOrRejectOnThrow(const std::string &expr, const std::vector< QNapi::ValueWrapper > &exprArgs={}) const
Definition window.h:74
bool operator!=(const TypedId &other) const
Definition qohosutils.h:152
IdValueType value() const
Definition qohosutils.h:164
IdValueType ValueType
Definition qohosutils.h:29
bool operator==(const TypedId &other) const
Definition qohosutils.h:146
TypedId(IdValueType value)
Definition qohosutils.h:140
TypedId(const TypedId &other)
TypedId & operator=(const TypedId &other)
~TypedId()=default
TypedId & operator=(TypedId &&other)
bool operator<(const TypedId &other) const
Definition qohosutils.h:158
TypedId()=default
TypedId(TypedId &&other)
std::optional< WindowProperties > tryGetWindowProperties(JsWindowId jsWindowId)
Definition window.cpp:28
Combined button and popup list for selecting options.
std::optional< QNapi::Object > tryMapOptMainWindowToQAbility(QOhosJsState &jsState, std::optional< QtOhos::QObjectThreadSafeRef > optInstanceMainWindowRef)
std::string const char * mapBoolToTrueFalseStr(bool value)
QOhosConsumer< T > makeCompressingAsyncConsumer(QOhosConsumer< T > baseConsumer, QOhosConsumer< std::function< void()> > asyncExecutor)
Definition qohosutils.h:182
ForwardIt removeMatchingWithLookahead(ForwardIt firstIt, ForwardIt lastIt, Predicate &&predicate)
Definition qohosutils.h:92
std::optional< double > tryParseStringAsFiniteDouble(const std::string &inputString)
void tupleForEach(const std::tuple< TupleElements... > &tuple, UnaryFunc func, std::index_sequence< TupleIndices... >)
Definition qohosutils.h:122
void tupleForEach(const std::tuple< TupleElements... > &tuple, UnaryFunc func)
Definition qohosutils.h:128
QOhosSupplier< T > makeMemoizingSupplier(QOhosSupplier< T > baseSupplier)
Definition qohosutils.h:229
constexpr T makeCopyByValue(T value)
Definition qohosutils.h:134
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::bundle::bundleManager::SupportWindowMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::WindowStatusType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::ModalityType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::ConfigurationConstant::ColorMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::file::picker::DocumentSelectMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::WindowMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::wantConstant::Flags))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::ContinueState))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::AnimationType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::MaximizePresentation))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::Direction))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::display::Orientation))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::display::DisplaySourceMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::multimodalInput::pointer::PointerStyle))
QT_END_NAMESPACE Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::kit::ShareKit::systemShare::SelectionMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::notificationManager::ContentType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::AvoidAreaType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::LaunchReason))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::contextConstant::ProcessMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::RequestKeyboardReason))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::contextConstant::StartupVisibility))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::EnterKeyType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::kit::ShareKit::systemShare::SharePreviewMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::OnContinueResult))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::WindowEventType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::abilityAccessCtrl::PermissionStatus))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::graphics::text::SystemFontType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::TextInputType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::RectChangeReason))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::kit::ShareKit::systemShare::ShareAbilityType))
std::optional< QOhosDisplayInfo::JsDisplayId > displayId
Definition window.h:29
bool isDisplayMainOrExtended() const
QtOhosQpa::enums::ohos::display::Orientation JsDisplayOrientation
QtOhosQpa::enums::ohos::display::DisplaySourceMode DisplaySourceMode
std::optional< DisplaySourceMode > sourceMode
QSizeF physicalSize() const
QRect displayGeometryPixels() const
static std::optional< QNapi::Object > tryGetDisplayById(QOhosJsState &jsState, QOhosDisplayInfo::JsDisplayId displayId)
std::optional< QPoint > topLeftOffsetPixels
static QOhosDisplayInfo makeFromOhosDisplayObject(QOhosJsState &jsState, QNapi::Object displayObject)
std::optional< JsDisplayOrientation > orientation
bool shouldIgnoreDisplay() const
QtOhosQpa::enums::kit::ShareKit::systemShare::SelectionMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
QtOhosQpa::enums::kit::ShareKit::systemShare::ShareAbilityType Enum
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
QtOhosQpa::enums::kit::ShareKit::systemShare::SharePreviewMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
QtOhosQpa::enums::ohos::abilityAccessCtrl::PermissionStatus Enum
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::ContinueState Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 10 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::LaunchReason Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::OnContinueResult Enum
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::WindowMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::ConfigurationConstant::ColorMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::contextConstant::ProcessMode Enum
QtOhosQpa::enums::ohos::app::ability::contextConstant::StartupVisibility Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 6 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::wantConstant::Flags Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::bundle::bundleManager::SupportWindowMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
QtOhosQpa::enums::ohos::display::DisplaySourceMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
QtOhosQpa::enums::ohos::file::picker::DocumentSelectMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::graphics::text::SystemFontType Enum
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 9 > enumeratorsNames
QtOhosQpa::enums::ohos::inputMethod::RequestKeyboardReason Enum
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 15 > enumeratorsNames
QtOhosQpa::enums::ohos::inputMethod::TextInputType Enum
static constexpr std::array< std::pair< Enum, const char * >, 53 > enumeratorsNames
QtOhosQpa::enums::ohos::multimodalInput::pointer::PointerStyle Enum
QtOhosQpa::enums::ohos::notificationManager::ContentType Enum
static constexpr std::array< std::pair< Enum, const char * >, 7 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 1 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
QtOhosQpa::enums::ohos::window::MaximizePresentation Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 7 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 6 > enumeratorsNames