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
79std::optional<double> tryParseStringAsFiniteDouble(const std::string &inputString);
80
82
83const char *mapBoolToTrueFalseStr(bool value);
84
86 QOhosJsState &jsState, std::optional<QtOhos::QObjectThreadSafeRef> optInstanceMainWindowRef);
87
88template<typename ForwardIt, typename Predicate>
89ForwardIt removeMatchingWithLookahead(ForwardIt firstIt, ForwardIt lastIt, Predicate &&predicate)
90{
91 if (firstIt == lastIt)
92 return firstIt;
93
94 auto outputIt = firstIt;
95 auto currentIt = firstIt;
96 auto nextIt = currentIt;
97 ++nextIt;
98
99 while (nextIt != lastIt) {
100 if (!predicate(*currentIt, *nextIt)) {
101 if (outputIt != currentIt) {
102 *outputIt = std::move(*currentIt);
103 }
104 ++outputIt;
105 }
106 ++currentIt;
107 ++nextIt;
108 }
109
110 if (outputIt != currentIt) {
111 *outputIt = std::move(*currentIt);
112 }
113 ++outputIt;
114
115 return outputIt;
116}
117
118template<typename UnaryFunc, typename... TupleElements, std::size_t... TupleIndices>
119void tupleForEach(const std::tuple<TupleElements...> &tuple, UnaryFunc func, std::index_sequence<TupleIndices...>)
120{
121 EvaluateSequentially { (func(std::get<TupleIndices>(tuple)), 0)... };
122}
123
124template<typename UnaryFunc, typename... TupleElements>
125void tupleForEach(const std::tuple<TupleElements...> &tuple, UnaryFunc func)
126{
127 tupleForEach(tuple, func, std::make_index_sequence<sizeof...(TupleElements)>());
128}
129
130template<typename T>
131constexpr T makeCopyByValue(T value)
132{
133 return value;
134}
135
136template<typename IdValueType, typename Tag>
137TypedId<IdValueType, Tag>::TypedId(IdValueType value)
138 : m_value(value)
139{
140}
141
142template<typename IdValueType, typename Tag>
143bool TypedId<IdValueType, Tag>::operator==(const TypedId &other) const
144{
145 return m_value == other.m_value;
146}
147
148template<typename IdValueType, typename Tag>
149bool TypedId<IdValueType, Tag>::operator!=(const TypedId &other) const
150{
151 return m_value != other.m_value;
152}
153
154template<typename IdValueType, typename Tag>
155bool TypedId<IdValueType, Tag>::operator<(const TypedId &other) const
156{
157 return m_value < other.m_value;
158}
159
160template<typename IdValueType, typename Tag>
161IdValueType TypedId<IdValueType, Tag>::value() const
162{
163 return m_value;
164}
165
166template<typename IdValueType, typename Tag>
167TypedId<IdValueType, Tag>::TypedId(const TypedId &other) = default;
168
169template<typename IdValueType, typename Tag>
170TypedId<IdValueType, Tag> &TypedId<IdValueType, Tag>::operator=(const TypedId &other) = default;
171
172template<typename IdValueType, typename Tag>
173TypedId<IdValueType, Tag>::TypedId(TypedId &&other) = default;
174
175template<typename IdValueType, typename Tag>
176TypedId<IdValueType, Tag> &TypedId<IdValueType, Tag>::operator=(TypedId &&other) = default;
177
178template<typename T>
180 QOhosConsumer<T> baseConsumer, QOhosConsumer<std::function<void()>> asyncExecutor)
181{
182 struct Context
183 {
184 QOhosConsumer<T> baseConsumer;
185 QOhosConsumer<std::function<void()>> asyncExecutor;
186 std::mutex pendingValueMutex;
187 std::optional<T> pendingValue;
188 };
189
190 auto context = std::make_shared<Context>();
191 context->baseConsumer = std::move(baseConsumer);
192 context->asyncExecutor = std::move(asyncExecutor);
193
194 return [context](T value) {
195 std::lock_guard<std::mutex> pendingValueLock(context->pendingValueMutex);
196 if (!context->pendingValue.has_value()) {
197 context->asyncExecutor(
198 [context]() {
199 std::optional<T> pendingValue;
200 {
201 std::lock_guard<std::mutex> pendingValueLock(context->pendingValueMutex);
202 std::swap(pendingValue, context->pendingValue);
203 }
204 context->baseConsumer(pendingValue.value());
205 });
206 }
207 context->pendingValue.emplace(std::move(value));
208 };
209}
210
211template<typename ...Ts, typename BaseConsumer>
214{
215 return [baseConsumer = QOhosConsumer<Ts...>(std::move(baseConsumer))](Ts &&...args) mutable {
216 if (baseConsumer) {
217 std::exchange(baseConsumer, nullptr)(std::forward<Ts>(args)...);
218 return true;
219 } else {
220 return false;
221 }
222 };
223}
224
225}
226
227QT_END_NAMESPACE
228
229#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:149
IdValueType value() const
Definition qohosutils.h:161
IdValueType ValueType
Definition qohosutils.h:29
bool operator==(const TypedId &other) const
Definition qohosutils.h:143
TypedId(IdValueType value)
Definition qohosutils.h:137
TypedId(const TypedId &other)
TypedId & operator=(const TypedId &other)
~TypedId()=default
TypedId & operator=(TypedId &&other)
bool operator<(const TypedId &other) const
Definition qohosutils.h:155
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:179
ForwardIt removeMatchingWithLookahead(ForwardIt firstIt, ForwardIt lastIt, Predicate &&predicate)
Definition qohosutils.h:89
std::optional< double > tryParseStringAsFiniteDouble(const std::string &inputString)
void tupleForEach(const std::tuple< TupleElements... > &tuple, UnaryFunc func, std::index_sequence< TupleIndices... >)
Definition qohosutils.h:119
void tupleForEach(const std::tuple< TupleElements... > &tuple, UnaryFunc func)
Definition qohosutils.h:125
constexpr T makeCopyByValue(T value)
Definition qohosutils.h:131
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