Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#include "pch.h"

#include "winrt_module_imports.h"
#include "TextBlockTemplateSelector.h"
#if __has_include("TextBlockTemplateSelector.g.cpp")
#include "TextBlockTemplateSelector.g.cpp"
#endif

namespace winrt::XamlToolkit::WinUI::Controls::implementation
{
winrt::DataTemplate TextBlockTemplateSelector::SelectTemplateCore(winrt::IInspectable const& item, winrt::DependencyObject const& container)
{
if (!item) return nullptr;

if (auto string = item.try_as<winrt::hstring>())
{
return TextBlockTemplate;
}
else
{
return base_type::SelectTemplateCore(item, container);
}
}

winrt::DataTemplate TextBlockTemplateSelector::SelectTemplateCore(winrt::IInspectable const& item)
{
return SelectTemplate(item, nullptr);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#pragma once

#include "TextBlockTemplateSelector.g.h"

#ifdef __INTELLISENSE__
#include <wil/wistd_type_traits.h>
#include <wil/cppwinrt_authoring.h>
#endif

namespace winrt
{
using namespace winrt::Windows::Foundation;
using namespace winrt::Microsoft::UI::Xaml;
}

namespace winrt::XamlToolkit::WinUI::Controls::implementation
{
struct TextBlockTemplateSelector : TextBlockTemplateSelectorT<TextBlockTemplateSelector>
{
TextBlockTemplateSelector() = default;

[[nodiscard]] winrt::DataTemplate SelectTemplateCore(winrt::IInspectable const& item, winrt::DependencyObject const& container);
[[nodiscard]] winrt::DataTemplate SelectTemplateCore(winrt::IInspectable const& item);

wil::single_threaded_rw_property<winrt::DataTemplate> TextBlockTemplate;
};
}

namespace winrt::XamlToolkit::WinUI::Controls::factory_implementation
{
struct TextBlockTemplateSelector : TextBlockTemplateSelectorT<TextBlockTemplateSelector, implementation::TextBlockTemplateSelector>
{
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace XamlToolkit.WinUI.Controls
{
[default_interface] runtimeclass TextBlockTemplateSelector : Microsoft.UI.Xaml.Controls.DataTemplateSelector
{
TextBlockTemplateSelector();

Microsoft.UI.Xaml.DataTemplate TextBlockTemplate { get; set; };
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#include "pch.h"
#include "winrt_module_imports.h"
#include "SettingsGroup.h"

namespace winrt::XamlToolkit::WinUI::Controls::implementation
{
void SettingsGroup::OnItemsChanged(DependencyObject const& d, DependencyPropertyChangedEventArgs const& e)
{
if (auto settingsGroup = d.try_as<winrt::XamlToolkit::WinUI::Controls::implementation::SettingsGroup>())
{
settingsGroup->RaiseItemsChanged();
}
}

void SettingsGroup::OnContentChanged(DependencyObject const& d, DependencyPropertyChangedEventArgs const& e)
{
if (auto settingsGroup = d.try_as<winrt::XamlToolkit::WinUI::Controls::implementation::SettingsGroup>())
{
settingsGroup->RaiseContentChanged();
}
}

void SettingsGroup::OnHeaderIconChanged(DependencyObject const& d, DependencyPropertyChangedEventArgs const& e)
{
if (auto settingsGroup = d.try_as<winrt::XamlToolkit::WinUI::Controls::implementation::SettingsGroup>())
{
settingsGroup->RaiseHeaderIconChanged();
}
}

void SettingsGroup::OnHeaderChanged(DependencyObject const& d, DependencyPropertyChangedEventArgs const& e)
{
if (auto settingsGroup = d.try_as<winrt::XamlToolkit::WinUI::Controls::implementation::SettingsGroup>())
{
settingsGroup->RaiseHeaderChanged();
}
}

void SettingsGroup::OnDescriptionChanged(DependencyObject const& d, DependencyPropertyChangedEventArgs const& e)
{
if (auto settingsGroup = d.try_as<winrt::XamlToolkit::WinUI::Controls::implementation::SettingsGroup>())
{
settingsGroup->RaiseDescriptionChanged();
}
}

void SettingsGroup::RaiseItemsChanged()
{
if (_itemsRepeater)
{
RootGridCornerRadius(GetRootGridCornerRadius());

if (_rootGrid)
{
_rootGrid.CornerRadius(RootGridCornerRadius());

if (Items().Size() > 0)
{
_rootGrid.BorderThickness(winrt::Thickness{ 1, 1, 1, 0 });
}
else
{
_rootGrid.BorderThickness(winrt::Thickness{ 1, 1, 1, 1 });
}
}

auto size = Items().Size();
for (int32_t i = 0; i < size; ++i)
{
auto item = Items().GetAt(i);

if (auto control = item.try_as<winrt::Control>())
{
winrt::CornerRadius cornerRadius{ 0 };
winrt::Thickness borderThickness{ 1, 1, 1, 0 };

if (i == size - 1)
{
cornerRadius = winrt::CornerRadius{ 0, 0, 8, 8 };
borderThickness = winrt::Thickness{ 1, 1, 1, 1 };
}
control.BorderThickness(borderThickness);
control.CornerRadius(cornerRadius);
control.Padding(winrt::Thickness{ 25, 0, 25, 0 });
control.Margin(winrt::Thickness{ 0 });
}
}
_itemsRepeater.ItemsSource(Items());
}
}

void SettingsGroup::RaiseContentChanged()
{
if (_contentPresenter)
{
_contentPresenter.Visibility(Content() ? winrt::Visibility::Visible : winrt::Visibility::Collapsed);
}
}

void SettingsGroup::RaiseHeaderIconChanged()
{
if (auto headerIconPresenter = GetTemplateChild(PartHeaderIconPresenter).try_as<winrt::FrameworkElement>())
{
headerIconPresenter.Visibility(HeaderIcon() ? winrt::Visibility::Visible : winrt::Visibility::Collapsed);
}
}

void SettingsGroup::RaiseHeaderChanged()
{
if (_headerPresenter)
{
_headerPresenter.Visibility(Header() ? winrt::Visibility::Visible : winrt::Visibility::Collapsed);
}
}

void SettingsGroup::RaiseDescriptionChanged()
{
if (_descriptionPresenter)
{
_descriptionPresenter.Visibility(Description() ? winrt::Visibility::Visible : winrt::Visibility::Collapsed);
}
}

void SettingsGroup::Items_CollectionChanged(winrt::IInspectable const& s, winrt::IVectorChangedEventArgs const& e)
{
RaiseItemsChanged();
}

void SettingsGroup::SettingsGroup_IsEnabledChanged(winrt::IInspectable const& s, DependencyPropertyChangedEventArgs const& e)
{
winrt::VisualStateManager::GoToState(*this, IsEnabled() ? L"Normal" : L"Disabled", true);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#include "pch.h"
#include "winrt_module_imports.h"
#include "SettingsGroup.h"


namespace winrt::XamlToolkit::WinUI::Controls::implementation
{
const wil::single_threaded_property<winrt::DependencyProperty> SettingsGroup::RootGridCornerRadiusProperty =
winrt::DependencyProperty::Register(
L"RootGridCornerRadius",
winrt::xaml_typename<winrt::CornerRadius>(),
winrt::xaml_typename<winrt::XamlToolkit::WinUI::Controls::SettingsGroup>(),
winrt::PropertyMetadata{ winrt::box_value(winrt::CornerRadius{ 0 }) });

const wil::single_threaded_property<winrt::DependencyProperty> SettingsGroup::ItemsProperty =
winrt::DependencyProperty::Register(
L"Items",
winrt::xaml_typename<winrt::IObservableVector<winrt::IInspectable>>(),
winrt::xaml_typename<winrt::XamlToolkit::WinUI::Controls::SettingsGroup>(),
winrt::PropertyMetadata{ nullptr, &SettingsGroup::OnItemsChanged });

const wil::single_threaded_property<winrt::DependencyProperty> SettingsGroup::ContentProperty =
winrt::DependencyProperty::Register(
L"Content",
winrt::xaml_typename<winrt::IInspectable>(),
winrt::xaml_typename<winrt::XamlToolkit::WinUI::Controls::SettingsGroup>(),
winrt::PropertyMetadata{ winrt::IInspectable{}, &SettingsGroup::OnContentChanged });

const wil::single_threaded_property<winrt::DependencyProperty> SettingsGroup::HeaderIconProperty =
winrt::DependencyProperty::Register(
L"HeaderIcon",
winrt::xaml_typename<winrt::IconElement>(),
winrt::xaml_typename<winrt::XamlToolkit::WinUI::Controls::SettingsGroup>(),
winrt::PropertyMetadata{ nullptr, &SettingsGroup::OnHeaderIconChanged });

const wil::single_threaded_property<winrt::DependencyProperty> SettingsGroup::HeaderProperty =
winrt::DependencyProperty::Register(
L"Header",
winrt::xaml_typename<winrt::IInspectable>(),
winrt::xaml_typename<winrt::XamlToolkit::WinUI::Controls::SettingsGroup>(),
winrt::PropertyMetadata{ nullptr, &SettingsGroup::OnHeaderChanged });

const wil::single_threaded_property<winrt::DependencyProperty> SettingsGroup::DescriptionProperty =
winrt::DependencyProperty::Register(
L"Description",
winrt::xaml_typename<winrt::IInspectable>(),
winrt::xaml_typename<winrt::XamlToolkit::WinUI::Controls::SettingsGroup>(),
winrt::PropertyMetadata{ nullptr, &SettingsGroup::OnDescriptionChanged });

winrt::CornerRadius SettingsGroup::RootGridCornerRadius() const noexcept
{
return winrt::unbox_value<winrt::CornerRadius>(GetValue(RootGridCornerRadiusProperty));
}

void SettingsGroup::RootGridCornerRadius(winrt::CornerRadius const& value) noexcept
{
SetValue(RootGridCornerRadiusProperty, winrt::box_value(value));
}

winrt::IObservableVector<winrt::IInspectable> SettingsGroup::Items() const noexcept
{
return winrt::unbox_value<winrt::IObservableVector<winrt::IInspectable>>(GetValue(ItemsProperty));
}

void SettingsGroup::Items(winrt::IObservableVector<winrt::IInspectable> const& value) noexcept
{
SetValue(ItemsProperty, winrt::box_value(value));
}

winrt::IInspectable SettingsGroup::Content() const noexcept
{
return winrt::unbox_value<winrt::IInspectable>(GetValue(ContentProperty));
}

void SettingsGroup::Content(winrt::IInspectable const& value) noexcept
{
SetValue(ContentProperty, winrt::box_value(value));
}

winrt::IconElement SettingsGroup::HeaderIcon() const noexcept
{
return winrt::unbox_value<winrt::IconElement>(GetValue(HeaderIconProperty));
}

void SettingsGroup::HeaderIcon(winrt::IconElement const& value) noexcept
{
SetValue(HeaderIconProperty, winrt::box_value(value));
}

winrt::IInspectable SettingsGroup::Header() const noexcept
{
return winrt::unbox_value<winrt::IInspectable>(GetValue(HeaderProperty));
}

void SettingsGroup::Header(winrt::IInspectable const& value) noexcept
{
SetValue(HeaderProperty, winrt::box_value(value));
}

winrt::IInspectable SettingsGroup::Description() const noexcept
{
return winrt::unbox_value<winrt::IInspectable>(GetValue(DescriptionProperty));
}

void SettingsGroup::Description(winrt::IInspectable const& value) noexcept
{
SetValue(DescriptionProperty, winrt::box_value(value));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#include "pch.h"
#include "winrt_module_imports.h"
#include "SettingsGroup.h"
#if __has_include("SettingsGroup.g.cpp")
#include "SettingsGroup.g.cpp"
#endif

namespace winrt::XamlToolkit::WinUI::Controls::implementation
{
SettingsGroup::SettingsGroup()
{
Items(winrt::single_threaded_observable_vector<winrt::IInspectable>());
_itemsVectorChangedRevoker_ = Items().VectorChanged(winrt::auto_revoke, { this, &SettingsGroup::Items_CollectionChanged });
}

void SettingsGroup::OnApplyTemplate()
{
_itemsRepeater = GetTemplateChild(PartItemsRepeater).try_as<winrt::ItemsRepeater>();
_contentPresenter = GetTemplateChild(PartContentPresenter).try_as<winrt::ContentPresenter>();
_headerPresenter = GetTemplateChild(PartHeaderPresenter).try_as<winrt::ContentPresenter>();
_descriptionPresenter = GetTemplateChild(PartDescriptionPresenter).try_as<winrt::ContentPresenter>();
_rootGrid = GetTemplateChild(PartRootGrid).try_as<winrt::Grid>();

if (_itemsRepeater)
{
RaiseItemsChanged();
}

SetEnabledState();

_isEnabledChangedRevoker = IsEnabledChanged(winrt::auto_revoke, { this, &SettingsGroup::SettingsGroup_IsEnabledChanged });

RaiseHeaderIconChanged();
RaiseHeaderChanged();
RaiseDescriptionChanged();
RaiseContentChanged();

RootGridCornerRadius(GetRootGridCornerRadius());

base_type::OnApplyTemplate();
}

void SettingsGroup::SetEnabledState()
{
winrt::VisualStateManager::GoToState(*this, IsEnabled() ? L"Normal" : L"Disabled", true);
}

winrt::CornerRadius SettingsGroup::GetRootGridCornerRadius()
{
return _radiusConverter.Convert(winrt::box_value(Items().Size()), winrt::TypeName{}, nullptr, winrt::hstring{}).as<winrt::CornerRadius>();
}
}
Loading