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.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 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 @@ +