aboutsummaryrefslogtreecommitdiffstats
path: root/tests/manual/helloswift/greeter.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/helloswift/greeter.h')
-rw-r--r--tests/manual/helloswift/greeter.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/manual/helloswift/greeter.h b/tests/manual/helloswift/greeter.h
new file mode 100644
index 0000000000..722380051c
--- /dev/null
+++ b/tests/manual/helloswift/greeter.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef GREETER_H
+#define GREETER_H
+
+#include <QtCore/qobject.h>
+#include <string>
+#include <swift/bridging>
+
+namespace HelloSwift {
+class SwiftGreeter;
+class Test;
+}
+
+template <typename SwiftType, typename QtType>
+class SwiftWrapper
+{
+public:
+ template <typename ...Args>
+ SwiftWrapper(Args && ...args)
+ : swiftImpl(new SwiftType(
+ SwiftType::init(
+ static_cast<QtType*>(this),
+ std::forward<Args>(args)...)))
+ {
+ }
+
+protected:
+ std::unique_ptr<SwiftType> swiftImpl;
+};
+
+class Greeter : public QObject, public SwiftWrapper<HelloSwift::SwiftGreeter, Greeter>
+{
+ Q_OBJECT
+public:
+ Q_PRIVATE_PROPERTY(swiftImpl, std::string greeting READ getGreeting NOTIFY greetingChanged)
+ Q_PRIVATE_SLOT(swiftImpl, void updateGreeting())
+ Q_SIGNAL void greetingChanged();
+} SWIFT_UNSAFE_REFERENCE;
+
+
+#endif // GREETER_H