From 1c879bdbeee3af4c0b0019548b9d7f61ab6967dd Mon Sep 17 00:00:00 2001 From: David Lechner Date: Sat, 30 Nov 2024 11:17:48 -0600 Subject: [PATCH 1/2] TestComponent: add Override class This will be used to test subclassing composable types with protected and overridable methods. --- TestComponent/Override.cpp | 49 +++++++++++++++++++++ TestComponent/Override.h | 35 +++++++++++++++ TestComponent/TestComponent.idl | 13 ++++++ TestComponent/TestComponent.vcxproj | 2 + TestComponent/TestComponent.vcxproj.filters | 2 + 5 files changed, 101 insertions(+) create mode 100644 TestComponent/Override.cpp create mode 100644 TestComponent/Override.h diff --git a/TestComponent/Override.cpp b/TestComponent/Override.cpp new file mode 100644 index 0000000..99e6026 --- /dev/null +++ b/TestComponent/Override.cpp @@ -0,0 +1,49 @@ +#include "pch.h" +#include "Override.h" +#include "Override.g.cpp" + +using namespace winrt; +using namespace Windows::Foundation; + +namespace winrt::TestComponent::implementation +{ + void Override::CallProtected() + { + OnProtected(); + } + + void Override::OnProtected() + { + m_protected_called_event(*this, nullptr); + } + + event_token Override::ProtectedCalled(EventHandler const& handler) + { + return m_protected_called_event.add(handler); + } + + void Override::ProtectedCalled(event_token token) noexcept + { + m_protected_called_event.remove(token); + } + + void Override::CallOverridable() + { + overridable().OnOverridable(); + } + + void Override::OnOverridable() + { + m_overridable_called_event(*this, nullptr); + } + + event_token Override::OverridableCalled(EventHandler const& handler) + { + return m_overridable_called_event.add(handler); + } + + void Override::OverridableCalled(event_token token) noexcept + { + m_overridable_called_event.remove(token); + } +} diff --git a/TestComponent/Override.h b/TestComponent/Override.h new file mode 100644 index 0000000..12fa928 --- /dev/null +++ b/TestComponent/Override.h @@ -0,0 +1,35 @@ +#pragma once +#include "Override.g.h" + +using namespace winrt; +using namespace Windows::Foundation; + +namespace winrt::TestComponent::implementation +{ + struct Override : OverrideT + { + private: + event> m_protected_called_event; + event> m_overridable_called_event; + + public: + Override() = default; + + void CallProtected(); + void OnProtected(); + event_token ProtectedCalled(EventHandler const& handler); + void ProtectedCalled(event_token token) noexcept; + + void CallOverridable(); + virtual void OnOverridable(); + event_token OverridableCalled(EventHandler const& handler); + void OverridableCalled(event_token token) noexcept; + }; +} + +namespace winrt::TestComponent::factory_implementation +{ + struct Override : OverrideT + { + }; +} diff --git a/TestComponent/TestComponent.idl b/TestComponent/TestComponent.idl index 3a2ace0..02f6ca3 100644 --- a/TestComponent/TestComponent.idl +++ b/TestComponent/TestComponent.idl @@ -339,4 +339,17 @@ namespace TestComponent [overridable] interface TestComponent.IOverloadClassOverrides; [overridable] interface TestComponent.IOverloadClassOverrides2; } + + unsealed runtimeclass Override + { + Override(); + + void CallProtected(); + protected void OnProtected(); + event Windows.Foundation.EventHandler ProtectedCalled; + + void CallOverridable(); + overridable void OnOverridable(); + event Windows.Foundation.EventHandler OverridableCalled; + } } diff --git a/TestComponent/TestComponent.vcxproj b/TestComponent/TestComponent.vcxproj index 7ac57e7..2fc3ca6 100644 --- a/TestComponent/TestComponent.vcxproj +++ b/TestComponent/TestComponent.vcxproj @@ -151,6 +151,7 @@ + @@ -159,6 +160,7 @@ + Create diff --git a/TestComponent/TestComponent.vcxproj.filters b/TestComponent/TestComponent.vcxproj.filters index 84420ed..008d317 100644 --- a/TestComponent/TestComponent.vcxproj.filters +++ b/TestComponent/TestComponent.vcxproj.filters @@ -17,6 +17,7 @@ + @@ -25,6 +26,7 @@ + From 77d46bf9af56c4d537bd682163d9452d9499dbda Mon Sep 17 00:00:00 2001 From: David Lechner Date: Sat, 30 Nov 2024 15:20:00 -0600 Subject: [PATCH 2/2] v1.2.0 --- TestComponent/TestComponent.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestComponent/TestComponent.nuspec b/TestComponent/TestComponent.nuspec index be44b3a..c857542 100644 --- a/TestComponent/TestComponent.nuspec +++ b/TestComponent/TestComponent.nuspec @@ -2,7 +2,7 @@ PyWinRT.TestWinRT - 1.1.0 + 1.2.0 TestWinRT Microsoft MIT