Skip to content

Commit

Permalink
feat(TimePicker): Support for Header properties
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinZikmund committed Nov 8, 2020
1 parent a9091f9 commit 5bf73e9
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 31 deletions.
Expand Up @@ -35,7 +35,7 @@ public int MinuteIncrement
}
}
#endif
#if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
#if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false
[global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
public global::Windows.UI.Xaml.DataTemplate HeaderTemplate
{
Expand All @@ -49,7 +49,7 @@ public int MinuteIncrement
}
}
#endif
#if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
#if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false
[global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
public object Header
{
Expand Down Expand Up @@ -93,15 +93,15 @@ public object Header
}
#endif
// Skipping already declared property ClockIdentifierProperty
#if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
#if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false
[global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
public static global::Windows.UI.Xaml.DependencyProperty HeaderProperty { get; } =
Windows.UI.Xaml.DependencyProperty.Register(
nameof(Header), typeof(object),
typeof(global::Windows.UI.Xaml.Controls.TimePicker),
new FrameworkPropertyMetadata(default(object)));
#endif
#if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
#if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false
[global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
public static global::Windows.UI.Xaml.DependencyProperty HeaderTemplateProperty { get; } =
Windows.UI.Xaml.DependencyProperty.Register(
Expand Down
102 changes: 75 additions & 27 deletions src/Uno.UI/UI/Xaml/Controls/TimePicker/TimePicker.cs
Expand Up @@ -23,12 +23,15 @@ public partial class TimePicker : Control
public const string ThirdTextBlockColumnPartName = "ThirdTextBlockColumn"; //AM/PM column
public const string FlyoutButtonContentGridPartName = "FlyoutButtonContentGrid";

private const string HeaderContentPresenterPartName = "HeaderContentPresenter";

private Button _flyoutButton;
private TextBlock _hourTextBlock;
private TextBlock _minuteTextBlock;
private TextBlock _periodTextBlock;
private Grid _flyoutButtonContentGrid;
private ColumnDefinition _thirdTextBlockColumn;
private ContentPresenter _headerContentPresenter;
private bool _isLoaded;
private bool _isViewReady;

Expand All @@ -43,13 +46,13 @@ public TimePicker()

public TimeSpan Time
{
get { return (TimeSpan)this.GetValue(TimeProperty); }
set { this.SetValue(TimeProperty, value); }
get => (TimeSpan)this.GetValue(TimeProperty);
set => this.SetValue(TimeProperty, value);
}

public static DependencyProperty TimeProperty { get ; } =
DependencyProperty.Register(
"Time",
nameof(Time),
typeof(TimeSpan),
typeof(TimePicker),
new FrameworkPropertyMetadata(
Expand All @@ -69,13 +72,13 @@ public TimeSpan Time

public int MinuteIncrement
{
get { return (int)this.GetValue(MinuteIncrementProperty); }
set { this.SetValue(MinuteIncrementProperty, value); }
get => (int)this.GetValue(MinuteIncrementProperty);
set => this.SetValue(MinuteIncrementProperty, value);
}

public static DependencyProperty MinuteIncrementProperty { get ; } =
DependencyProperty.Register(
"MinuteIncrement",
nameof(MinuteIncrement),
typeof(int),
typeof(TimePicker),
new FrameworkPropertyMetadata(
Expand All @@ -102,13 +105,13 @@ public int MinuteIncrement

public FlyoutPlacementMode FlyoutPlacement
{
get { return (FlyoutPlacementMode)this.GetValue(FlyoutPlacementProperty); }
set { this.SetValue(FlyoutPlacementProperty, value); }
get => (FlyoutPlacementMode)this.GetValue(FlyoutPlacementProperty);
set => this.SetValue(FlyoutPlacementProperty, value);
}

public static DependencyProperty FlyoutPlacementProperty { get ; } =
DependencyProperty.Register(
"FlyoutPlacement",
nameof(FlyoutPlacement),
typeof(FlyoutPlacementMode),
typeof(TimePicker),
new FrameworkPropertyMetadata(FlyoutPlacementMode.Full));
Expand All @@ -119,13 +122,13 @@ public FlyoutPlacementMode FlyoutPlacement
// FlyoutPresenterStyle is an Uno-only property to allow the styling of the TimePicker's FlyoutPresenter.
public Style FlyoutPresenterStyle
{
get { return (Style)this.GetValue(FlyoutPresenterStyleProperty); }
set { this.SetValue(FlyoutPresenterStyleProperty, value); }
get => (Style)this.GetValue(FlyoutPresenterStyleProperty);
set => this.SetValue(FlyoutPresenterStyleProperty, value);
}

public static DependencyProperty FlyoutPresenterStyleProperty { get; } =
DependencyProperty.Register(
"FlyoutPresenterStyle",
nameof(FlyoutPresenterStyle),
typeof(Style),
typeof(TimePicker),
new FrameworkPropertyMetadata(
Expand All @@ -134,34 +137,64 @@ public Style FlyoutPresenterStyle

#endregion

#region HeaderTemplate DependencyProperty

public DataTemplate HeaderTemplate
{
get => (DataTemplate)GetValue(HeaderTemplateProperty);
set => SetValue(HeaderTemplateProperty, value);
}

public static DependencyProperty HeaderTemplateProperty { get; } =
DependencyProperty.Register(
nameof(HeaderTemplate), typeof(DataTemplate),
typeof(TimePicker),
new FrameworkPropertyMetadata(null));

#endregion

#region Header DependencyProperty

public object Header
{
get => GetValue(HeaderProperty);
set => SetValue(HeaderProperty, value);
}

public static DependencyProperty HeaderProperty { get; } =
DependencyProperty.Register(
nameof(Header), typeof(object),
typeof(TimePicker),
new FrameworkPropertyMetadata(null, (s, e) => ((TimePicker)s)?.OnHeaderChanged(e)));

private void OnHeaderChanged(DependencyPropertyChangedEventArgs e) =>
UpdateHeaderVisibility();

#endregion

public LightDismissOverlayMode LightDismissOverlayMode
{
get
{
return (LightDismissOverlayMode)this.GetValue(LightDismissOverlayModeProperty);
}
set
{
this.SetValue(LightDismissOverlayModeProperty, value);
}
get => (LightDismissOverlayMode)this.GetValue(LightDismissOverlayModeProperty);
set => this.SetValue(LightDismissOverlayModeProperty, value);
}

public static DependencyProperty LightDismissOverlayModeProperty { get; } =
DependencyProperty.Register(
"LightDismissOverlayMode", typeof(LightDismissOverlayMode),
typeof(TimePicker),
new FrameworkPropertyMetadata(default(LightDismissOverlayMode)));
DependencyProperty.Register(
nameof(LightDismissOverlayMode), typeof(LightDismissOverlayMode),
typeof(TimePicker),
new FrameworkPropertyMetadata(default(LightDismissOverlayMode)));

/// <summary>
/// Sets the light-dismiss colour, if the overlay is enabled. The external API for modifying this is to override the PopupLightDismissOverlayBackground, etc, static resource values.
/// </summary>
internal Brush LightDismissOverlayBackground
{
get { return (Brush)GetValue(LightDismissOverlayBackgroundProperty); }
set { SetValue(LightDismissOverlayBackgroundProperty, value); }
get => (Brush)GetValue(LightDismissOverlayBackgroundProperty);
set => SetValue(LightDismissOverlayBackgroundProperty, value);
}

internal static DependencyProperty LightDismissOverlayBackgroundProperty { get ; } =
DependencyProperty.Register("LightDismissOverlayBackground", typeof(Brush), typeof(TimePicker), new FrameworkPropertyMetadata(null));
DependencyProperty.Register(nameof(LightDismissOverlayBackground), typeof(Brush), typeof(TimePicker), new FrameworkPropertyMetadata(null));

protected override void OnApplyTemplate()
{
Expand All @@ -176,6 +209,12 @@ protected override void OnApplyTemplate()
_periodTextBlock = flyoutContent?.GetTemplateChild(PeriodTextBlockPartName) as TextBlock;
_flyoutButtonContentGrid = flyoutContent?.GetTemplateChild(FlyoutButtonContentGridPartName) as Grid;

_headerContentPresenter = GetTemplateChild(HeaderContentPresenterPartName) as ContentPresenter;
if (_headerContentPresenter != null)
{
UpdateHeaderVisibility();
}

var columns = _flyoutButtonContentGrid?.ColumnDefinitions;
const int periodColumnPosition = 4;
if ((columns?.Count ?? 0) > periodColumnPosition)
Expand Down Expand Up @@ -277,6 +316,15 @@ private void UpdateDisplayedDate()
#endif
}

private void UpdateHeaderVisibility()
{
if (_headerContentPresenter != null)
{
_headerContentPresenter.Visibility =
Header != null ? Visibility.Visible : Visibility.Collapsed;
}
}

/// <summary>
/// Apply 2-way binding to equivalent property on TimePickerFlyout
/// </summary>
Expand Down

0 comments on commit 5bf73e9

Please sign in to comment.