Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions samples/ConsolidatedElementSamples/Input.Toggle.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "Input.Toggle",
"id": "acceptTerms",
"title": "I accept the terms and agreements",
"value": "true",
"valueOn": "true",
"valueOff": "false",
"label": "Please check the box below to accept the terms and agreements:",
"isRequired": true,
"errorMessage": "You must accept the terms to continue."
}
],
"actions": [
{
"type": "Action.Submit",
"title": "OK"
}
]
}
31,879 changes: 0 additions & 31,879 deletions source/uwp/AdaptiveCardsObjectModel/AdaptiveCards.ObjectModel.Uwp.h

This file was deleted.

4 changes: 2 additions & 2 deletions source/uwp/Renderer/idl/AdaptiveCards.Rendering.Uwp.idl
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ namespace AdaptiveCards

runtimeclass AdaptiveElementRendererRegistration
{
void Set(String type, IAdaptiveElementRenderer parser);
void Set(String type, IAdaptiveElementRenderer renderer);
IAdaptiveElementRenderer Get(String type);
void Remove(String type);
};
Expand All @@ -438,7 +438,7 @@ namespace AdaptiveCards
{
AdaptiveActionRendererRegistration();

void Set(String type, IAdaptiveActionRenderer parser);
void Set(String type, IAdaptiveActionRenderer renderer);
IAdaptiveActionRenderer Get(String type);
void Remove(String type);
};
Expand Down
111 changes: 38 additions & 73 deletions source/uwp/Renderer/lib/AdaptiveToggleInputRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,92 +4,57 @@

#include "AdaptiveToggleInputRenderer.h"

using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
using namespace ABI::AdaptiveCards::Rendering::Uwp;
using namespace ABI::AdaptiveCards::ObjectModel::Uwp;
using namespace ABI::Windows::Foundation;
using namespace ABI::Windows::Foundation::Collections;
using namespace ABI::Windows::UI::Xaml;
using namespace ABI::Windows::UI::Xaml::Controls;
using namespace ABI::Windows::UI::Xaml::Controls::Primitives;
namespace Xaml
{
using namespace winrt::Windows::UI::Xaml;
}

namespace AdaptiveCards::Rendering::Uwp
namespace XamlHelpers
{
HRESULT AdaptiveToggleInputRenderer::RuntimeClassInitialize() noexcept
try
{
return S_OK;
}
CATCH_RETURN;
using namespace AdaptiveCards::Rendering::Uwp::XamlHelpers;
}

using namespace winrt::AdaptiveCards::ObjectModel::Uwp;
using namespace winrt::AdaptiveCards::Rendering::Uwp;

HRESULT AdaptiveToggleInputRenderer::Render(_In_ IAdaptiveCardElement* adaptiveCardElement,
_In_ IAdaptiveRenderContext* renderContext,
_In_ IAdaptiveRenderArgs* renderArgs,
_COM_Outptr_ IUIElement** toggleInputControl) noexcept
try
namespace winrt::AdaptiveCards::Rendering::Uwp::implementation
{
Xaml::UIElement AdaptiveToggleInputRenderer::Render(IAdaptiveCardElement cardElement,
AdaptiveRenderContext renderContext,
AdaptiveRenderArgs renderArgs)
{
ComPtr<IAdaptiveHostConfig> hostConfig;
RETURN_IF_FAILED(renderContext->get_HostConfig(&hostConfig));
if (!XamlHelpers::SupportsInteractivity(hostConfig.Get()))
if (!renderContext.HostConfig().SupportsInteractivity())
{
renderContext->AddWarning(
ABI::AdaptiveCards::ObjectModel::Uwp::WarningStatusCode::InteractivityNotSupported,
HStringReference(L"Toggle Input was stripped from card because interactivity is not supported").Get());
return S_OK;
}
renderContext.AddWarning(winrt::AdaptiveCards::ObjectModel::Uwp::WarningStatusCode::InteractivityNotSupported,
L"Toggle Input was stripped from card because interactivity is not supported");

ComPtr<IAdaptiveCardElement> cardElement(adaptiveCardElement);
ComPtr<IAdaptiveToggleInput> adaptiveToggleInput;
RETURN_IF_FAILED(cardElement.As(&adaptiveToggleInput));

ComPtr<ICheckBox> checkBox =
XamlHelpers::CreateABIClass<ICheckBox>(HStringReference(RuntimeClass_Windows_UI_Xaml_Controls_CheckBox));

HString title;
RETURN_IF_FAILED(adaptiveToggleInput->get_Title(title.GetAddressOf()));

boolean wrap;
adaptiveToggleInput->get_Wrap(&wrap);

XamlHelpers::SetContent(checkBox.Get(), title.Get(), wrap);

HString value;
RETURN_IF_FAILED(adaptiveToggleInput->get_Value(value.GetAddressOf()));

HString valueOn;
RETURN_IF_FAILED(adaptiveToggleInput->get_ValueOn(valueOn.GetAddressOf()));

INT32 compareValueOn;
RETURN_IF_FAILED(WindowsCompareStringOrdinal(value.Get(), valueOn.Get(), &compareValueOn));
return nullptr;
}

XamlHelpers::SetToggleValue(checkBox.Get(), (compareValueOn == 0));
AdaptiveToggleInput toggleInput = cardElement.as<AdaptiveToggleInput>();

ComPtr<IUIElement> checkboxAsUIElement;
RETURN_IF_FAILED(checkBox.As(&checkboxAsUIElement));
RETURN_IF_FAILED(XamlHelpers::AddHandledTappedEvent(checkboxAsUIElement.Get()));
Xaml::Controls::CheckBox checkBox{};
XamlHelpers::SetContent(checkBox, toggleInput.Title(), toggleInput.Wrap());

ComPtr<IFrameworkElement> frameworkElement;
RETURN_IF_FAILED(checkBox.As(&frameworkElement));
RETURN_IF_FAILED(frameworkElement->put_VerticalAlignment(ABI::Windows::UI::Xaml::VerticalAlignment_Top));
RETURN_IF_FAILED(
XamlHelpers::SetStyleFromResourceDictionary(renderContext, L"Adaptive.Input.Toggle", frameworkElement.Get()));
checkBox.IsChecked(toggleInput.ValueOn() == toggleInput.Value());
checkBox.VerticalAlignment(Xaml::VerticalAlignment::Top);

ComPtr<IAdaptiveInputElement> adapitveToggleInputAsAdaptiveInput;
RETURN_IF_FAILED(adaptiveToggleInput.As(&adapitveToggleInputAsAdaptiveInput));
// Add Tap handler that sets the event as handled so that it doesn't propagate to the parent containers.
checkBox.Tapped([](IInspectable const& /* sender */, Xaml::Input::TappedRoutedEventArgs const& args)
{ return args.Handled(true); });

ComPtr<IUIElement> inputLayout;
ComPtr<IUIElement> validationError;
RETURN_IF_FAILED(XamlHelpers::HandleInputLayoutAndValidation(
adapitveToggleInputAsAdaptiveInput.Get(), checkboxAsUIElement.Get(), false, renderContext, &inputLayout, nullptr));
XamlHelpers::SetStyleFromResourceDictionary(renderContext, L"Adaptive.Input.Toggle", checkBox);
Xaml::UIElement inputLayout = XamlHelpers::HandleInputLayoutAndValidation(toggleInput, checkBox, false, renderContext);

ComPtr<ToggleInputValue> input;
RETURN_IF_FAILED(MakeAndInitialize<ToggleInputValue>(&input, adaptiveToggleInput.Get(), checkBox.Get(), nullptr));
RETURN_IF_FAILED(renderContext->AddInputValue(input.Get(), renderArgs));
winrt::com_ptr<::AdaptiveCards::Rendering::Uwp::ToggleInputValue> inputValue;
THROW_IF_FAILED(Microsoft::WRL::MakeAndInitialize<::AdaptiveCards::Rendering::Uwp::ToggleInputValue>(
inputValue.put(),
toggleInput.as<ABI::AdaptiveCards::ObjectModel::Uwp::IAdaptiveToggleInput>().get(),
checkBox.as<ABI::Windows::UI::Xaml::Controls::ICheckBox>().get(),
nullptr));

RETURN_IF_FAILED(inputLayout.CopyTo(toggleInputControl));
renderContext.AddInputValue(inputValue.as<IAdaptiveInputValue>(), renderArgs);

return S_OK;
return inputLayout;
}
CATCH_RETURN;
}
29 changes: 14 additions & 15 deletions source/uwp/Renderer/lib/AdaptiveToggleInputRenderer.h
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include "AdaptiveToggleInputRenderer.g.h"

#include "ToggleInput.h"

namespace AdaptiveCards::Rendering::Uwp
namespace winrt::AdaptiveCards::Rendering::Uwp::implementation
{
class AdaptiveToggleInputRenderer
: public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::WinRtClassicComMix>,
ABI::AdaptiveCards::Rendering::Uwp::IAdaptiveElementRenderer>
struct AdaptiveToggleInputRenderer : AdaptiveToggleInputRendererT<AdaptiveToggleInputRenderer>
{
AdaptiveRuntime(AdaptiveToggleInputRenderer);

public:
HRESULT RuntimeClassInitialize() noexcept;
AdaptiveToggleInputRenderer() = default;

IFACEMETHODIMP Render(_In_ ABI::AdaptiveCards::ObjectModel::Uwp::IAdaptiveCardElement* cardElement,
_In_ ABI::AdaptiveCards::Rendering::Uwp::IAdaptiveRenderContext* renderContext,
_In_ ABI::AdaptiveCards::Rendering::Uwp::IAdaptiveRenderArgs* renderArgs,
_COM_Outptr_ ABI::Windows::UI::Xaml::IUIElement** result) noexcept override;
winrt::Windows::UI::Xaml::UIElement Render(winrt::AdaptiveCards::ObjectModel::Uwp::IAdaptiveCardElement,
winrt::AdaptiveCards::Rendering::Uwp::AdaptiveRenderContext,
winrt::AdaptiveCards::Rendering::Uwp::AdaptiveRenderArgs);
};
}

ActivatableClass(AdaptiveToggleInputRenderer);
namespace winrt::AdaptiveCards::Rendering::Uwp::factory_implementation
{
struct AdaptiveToggleInputRenderer
: AdaptiveToggleInputRendererT<AdaptiveToggleInputRenderer, implementation::AdaptiveToggleInputRenderer>
{
};
}
12 changes: 10 additions & 2 deletions source/uwp/Renderer/lib/Util.h
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,6 @@ namespace AdaptiveCards::Rendering::Uwp
Make<AdaptiveCards::Rendering::Uwp::AdaptiveTextInputRenderer>().Get()));
RETURN_IF_FAILED(registration->Set(HStringReference(L"Input.Time").Get(),
Make<AdaptiveCards::Rendering::Uwp::AdaptiveTimeInputRenderer>().Get()));
RETURN_IF_FAILED(registration->Set(HStringReference(L"Input.Toggle").Get(),
Make<AdaptiveCards::Rendering::Uwp::AdaptiveToggleInputRenderer>().Get()));
RETURN_IF_FAILED(registration->Set(HStringReference(L"Media").Get(),
Make<AdaptiveCards::Rendering::Uwp::AdaptiveMediaRenderer>().Get()));
RETURN_IF_FAILED(registration->Set(HStringReference(L"RichTextBlock").Get(),
Expand All @@ -306,6 +304,16 @@ namespace AdaptiveCards::Rendering::Uwp
RETURN_IF_FAILED(registration->Set(HStringReference(L"TextBlock").Get(),
Make<AdaptiveCards::Rendering::Uwp::AdaptiveTextBlockRenderer>().Get()));

winrt::AdaptiveCards::Rendering::Uwp::IAdaptiveElementRenderer toggleRenderer =
winrt::make<winrt::AdaptiveCards::Rendering::Uwp::implementation::AdaptiveToggleInputRenderer>();

winrt::com_ptr<ABI::AdaptiveCards::Rendering::Uwp::IAdaptiveElementRenderer> abiToggleRenderer
{
toggleRenderer.as<ABI::AdaptiveCards::Rendering::Uwp::IAdaptiveElementRenderer>()
};

registration->Set(HStringReference(L"Input.Toggle").Get(), abiToggleRenderer.get());

return S_OK;
}

Expand Down
Loading