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
qarkuiutils.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 QARKUTILS_H
5#define QARKUTILS_H
6
7#include <QtCore/private/qohoscommon_p.h>
8#include <QtCore/private/qohoslogger_p.h>
9#include <QtCore/qglobal.h>
10#include <QtCore/qpoint.h>
11#include <arkui/native_type.h>
12#include <array>
13#include <cstdint>
14#include <cstdio>
15#include <qohosutils.h>
16#include <string>
17#include <type_traits>
18
20
21namespace QArkUi {
22
24{
25public:
26 CZString(const char *value);
27
28 operator const char *() const;
29 operator std::string() const;
30
31 const char *value() const;
32
33private:
34 const char *m_value;
35};
36
37std::array<float, 2> toFloatArray(const QPointF &point);
38
39template<typename Func, Func f, typename... FuncArgs>
43 void>
44callArkUiOrFailOnErrorResult(QOhosNamedFunc<Func, f> func, FuncArgs &&...funcArgs);
45
46template<typename Func, Func f, typename... FuncArgs>
51
52template<typename Func, Func f, typename... FuncArgs>
53QOhosInvokeResult<Func, FuncArgs...> callArkUi(QOhosNamedFunc<Func, f> func, FuncArgs &&...funcArgs);
54
56
57constexpr bool arkUiCallsLogging = false;
58
59template<typename T>
61buildFuncArgString(const T &funcArg)
62{
63 return std::to_string(funcArg);
64}
65
66template<typename T>
68buildFuncArgString(const T &funcArg)
69{
70 return std::to_string(funcArg) + ":enum(" + typeid(T).name() + "):";
71}
72
73template<typename T>
75buildFuncArgString(const T &funcArg)
76{
77 char buffer[] = "0xFFFFFFFFFFFFFFFF";
78 std::snprintf(buffer, sizeof(buffer), "%p", funcArg);
79 return std::string(buffer);
80}
81
82template<typename T>
85{
86 return "...";
87}
88
89inline std::string buildFuncArgString(CZString funcArg)
90{
91 return '"' + std::string(funcArg) + '"';
92}
93
94template<typename... FuncArgs>
95std::string buildFuncCallString(const char *funcName, FuncArgs &&...funcArgs)
96{
97 std::string allArgsString;
98 std::string argsStrings[] = {buildFuncArgString(funcArgs)...};
99 for (const auto &argString : argsStrings) {
100 if (!allArgsString.empty())
101 allArgsString += ", ";
102 allArgsString += argString;
103 }
104
105 return std::string(funcName) + "(" + allArgsString + ")";
106}
107
108template<typename Func, typename... FuncArgs>
113{
114 auto funcResult = func(funcArgs...);
115
116 if (arkUiCallsLogging) {
118 "callArkUiFunc: %s => %s",
121 }
122
123 return funcResult;
124}
125
126template<typename Func, typename... FuncArgs>
129 void>
130callArkUiFunc(const char *funcName, Func &&func, FuncArgs &&...funcArgs)
131{
132 func(funcArgs...);
133
135 qOhosPrintfDebug("callArkUiFunc: %s", buildFuncCallString(funcName, funcArgs...).c_str());
136}
137
138}
139
140inline std::array<float, 2> toFloatArray(const QPointF &point)
141{
142 return {static_cast<float>(point.x()), static_cast<float>(point.y())};
143}
144
145inline CZString::CZString(const char *value)
146 : m_value(value)
147{
148}
149
150inline CZString::operator const char *() const
151{
152 return m_value;
153}
154
155inline CZString::operator std::string() const
156{
157 return m_value;
158}
159
160inline const char *CZString::value() const
161{
162 return m_value;
163}
164
165template<typename Func, Func f, typename... FuncArgs>
169 void>
170callArkUiOrFailOnErrorResult(QOhosNamedFunc<Func, f> func, FuncArgs &&...funcArgs)
171{
172 using namespace details_qarkuiutils_h;
173
174 std::int32_t funcResult = details_qarkuiutils_h::callArkUiFunc(func.name(), func.ptr(), funcArgs...);
175 if (funcResult != ::ARKUI_ERROR_CODE_NO_ERROR) {
176 qOhosReportFatalErrorAndAbort(
177 "ArkUi function call %s failed with error: %d",
178 buildFuncCallString(func.name(), funcArgs...).c_str(), funcResult);
179 }
180}
181
182template<typename Func, Func f, typename... FuncArgs>
187{
188 using namespace details_qarkuiutils_h;
189
191 if (funcResult == nullptr) {
193 "ArkUi function call %s failed (returned null)",
195 }
196 return funcResult;
197}
198
199template<typename Func, Func f, typename... FuncArgs>
200QOhosInvokeResult<Func, FuncArgs...> callArkUi(QOhosNamedFunc<Func, f> func, FuncArgs &&...funcArgs)
201{
202 return details_qarkuiutils_h::callArkUiFunc(func.name(), func.ptr(), funcArgs...);
203}
204
205}
206
207QT_END_NAMESPACE
208
209#endif
operator std::string() const
operator const char *() const
const char * value() const
CZString(const char *value)
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::string buildFuncCallString(const char *funcName, FuncArgs &&...funcArgs)
Definition qarkuiutils.h:95
std::enable_if_t< std::is_arithmetic< T >::value, std::string > buildFuncArgString(const T &funcArg)
Definition qarkuiutils.h:61
constexpr bool arkUiCallsLogging
Definition qarkuiutils.h:57
std::string buildFuncArgString(CZString funcArg)
Definition qarkuiutils.h:89
std::enable_if_t< std::is_void< QOhosInvokeResult< Func, FuncArgs... > >::value, void > callArkUiFunc(const char *funcName, Func &&func, FuncArgs &&...funcArgs)
std::array< float, 2 > toFloatArray(const QPointF &point)
QOhosInvokeResult< Func, FuncArgs... > callArkUi(QOhosNamedFunc< Func, f > func, FuncArgs &&...funcArgs)
std::optional< WindowProperties > tryGetWindowProperties(JsWindowId jsWindowId)
Definition window.cpp:28
std::enable_if_t< std::is_same< QOhosInvokeResult< Func, FuncArgs... >, std::int32_t >::value||std::is_enum< QOhosInvokeResult< Func, FuncArgs... > >::value, void > callArkUiOrFailOnErrorResult(QOhosNamedFunc< Func, f > func, FuncArgs &&...funcArgs)
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