Skip to content

Commit ce1c06f

Browse files
Core,Controls(Gtk): Implement RadioButton
1 parent cd7b73d commit ce1c06f

File tree

3 files changed

+162
-10
lines changed

3 files changed

+162
-10
lines changed

src/Controls/src/Core/RadioButton/RadioButton.Gtk.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ namespace Microsoft.Maui.Controls
33
{
44
public partial class RadioButton
55
{
6-
[MissingMapper]
76
public static void MapContent(RadioButtonHandler handler, RadioButton radioButton)
87
=> MapContent((IRadioButtonHandler)handler, radioButton);
98

10-
[MissingMapper]
119
public static void MapContent(IRadioButtonHandler handler, RadioButton radioButton)
1210
{
13-
11+
RadioButtonHandler.MapContent(handler, radioButton);
1412
}
1513
}
1614
}
Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,73 @@
1-
using System;
1+
using Gtk;
2+
using System;
23

34
namespace Microsoft.Maui.Handlers
45
{
5-
public partial class RadioButtonHandler : ViewHandler<IRadioButton, NotImplementedView>
6+
public partial class RadioButtonHandler : ViewHandler<IRadioButton, RadioButton>
67
{
7-
protected override NotImplementedView CreatePlatformView() => new(nameof(IRadioButton));
8+
static RadioButton baseRadioButton = new("base");
89

10+
protected override RadioButton CreatePlatformView()
11+
{
12+
return new RadioButton(baseRadioButton, "foo");
13+
}
14+
15+
protected override void ConnectHandler(RadioButton platformView)
16+
{
17+
platformView.Toggled += OnClicked;
18+
// base.ConnectHandler(platformView);
19+
}
20+
21+
protected override void DisconnectHandler(RadioButton platformView)
22+
{
23+
platformView.Toggled -= OnClicked;
24+
// base.DisconnectHandler(platformView);
25+
}
26+
27+
[MissingMapper]
928
public static void MapBackground(IRadioButtonHandler handler, IRadioButton radioButton) { }
10-
public static void MapIsChecked(IRadioButtonHandler handler, IRadioButton radioButton) { }
11-
public static void MapContent(IRadioButtonHandler handler, IRadioButton radioButton) { }
12-
public static void MapTextColor(IRadioButtonHandler handler, ITextStyle textStyle) { }
29+
30+
public static void MapIsChecked(IRadioButtonHandler handler, IRadioButton radioButton)
31+
{
32+
if (handler.PlatformView is RadioButton rb)
33+
rb.UpdateIsChecked(radioButton);
34+
// handler.PlatformView?.UpdateIsChecked(radioButton);
35+
}
36+
37+
public static void MapContent(IRadioButtonHandler handler, IRadioButton radioButton)
38+
{
39+
if (handler.PlatformView is RadioButton rb)
40+
rb.UpdateContent(radioButton);
41+
// handler.PlatformView?.UpdateContent(radioButton);
42+
}
43+
44+
public static void MapTextColor(IRadioButtonHandler handler, ITextStyle textStyle)
45+
{
46+
handler.PlatformView?.UpdateTextColor(textStyle.TextColor);
47+
}
48+
49+
[MissingMapper]
1350
public static void MapCharacterSpacing(IRadioButtonHandler handler, ITextStyle textStyle) { }
14-
public static void MapFont(IRadioButtonHandler handler, ITextStyle textStyle) { }
51+
52+
public static void MapFont(IRadioButtonHandler handler, ITextStyle textStyle)
53+
{
54+
var fontManager = handler.GetRequiredService<IFontManager>();
55+
handler.PlatformView?.UpdateFont(textStyle, fontManager);
56+
}
57+
58+
[MissingMapper]
1559
public static void MapStrokeColor(IRadioButtonHandler handler, IRadioButton radioButton) { }
60+
61+
[MissingMapper]
1662
public static void MapStrokeThickness(IRadioButtonHandler handler, IRadioButton radioButton) { }
63+
64+
[MissingMapper]
1765
public static void MapCornerRadius(IRadioButtonHandler handler, IRadioButton radioButton) { }
66+
67+
void OnClicked(object? sender, EventArgs e)
68+
{
69+
if (sender is RadioButton platformView && VirtualView != null)
70+
VirtualView.IsChecked = platformView.Active;
71+
}
1872
}
1973
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
using System;
2+
using Gtk;
3+
using Microsoft.Maui.Graphics;
4+
// using Microsoft.UI.Xaml;
5+
// using Microsoft.UI.Xaml.Controls;
6+
// using Microsoft.UI.Xaml.Media;
7+
// using WBrush = Microsoft.UI.Xaml.Media.Brush;
8+
9+
namespace Microsoft.Maui.Platform
10+
{
11+
public static class RadioButtonExtensions
12+
{
13+
public static void UpdateIsChecked(this RadioButton platformRadioButton, IRadioButton radioButton)
14+
{
15+
platformRadioButton.Active = radioButton.IsChecked;
16+
}
17+
18+
private static readonly string[] _backgroundColorKeys =
19+
{
20+
"RadioButtonBackground",
21+
"RadioButtonBackgroundPointerOver",
22+
"RadioButtonBackgroundPressed",
23+
"RadioButtonBackgroundDisabled"
24+
};
25+
26+
[MissingMapper]
27+
public static void UpdateBackground(this RadioButton platformRadioButton, IRadioButton button)
28+
{
29+
// if (button.Background is SolidPaint solidPaint)
30+
// {
31+
// UpdateColors(platformRadioButton.Resources, _backgroundColorKeys, solidPaint.ToPlatform());
32+
33+
// platformRadioButton.RefreshThemeResources();
34+
// }
35+
}
36+
37+
private static readonly string[] _foregroundColorKeys =
38+
{
39+
"RadioButtonForeground",
40+
"RadioButtonForegroundPointerOver",
41+
"RadioButtonForegroundPressed",
42+
"RadioButtonForegroundDisabled"
43+
};
44+
45+
[MissingMapper]
46+
public static void UpdateTextColor(this RadioButton platformRadioButton, ITextStyle button)
47+
{
48+
// UpdateColors(platformRadioButton.Resources, _foregroundColorKeys, button.TextColor?.ToPlatform());
49+
50+
// platformRadioButton.RefreshThemeResources();
51+
}
52+
53+
public static void UpdateContent(this RadioButton platformRadioButton, IRadioButton radioButton)
54+
{
55+
_ = radioButton.Handler?.MauiContext ?? throw new InvalidOperationException($"{nameof(MauiContext)} should have been set by base class.");
56+
57+
if (radioButton is { PresentedContent: IView view })
58+
platformRadioButton.Label = $"{view.ToPlatform(radioButton.Handler.MauiContext)}";
59+
// else
60+
// platformRadioButton.Label = $"{radioButton.Content}";
61+
}
62+
63+
private static readonly string[] _borderColorKeys =
64+
{
65+
"RadioButtonBorderBrush",
66+
"RadioButtonBorderBrushPointerOver",
67+
"RadioButtonBorderBrushPressed",
68+
"RadioButtonBorderBrushDisabled"
69+
};
70+
71+
[MissingMapper]
72+
public static void UpdateStrokeColor(this RadioButton platformRadioButton, IRadioButton radioButton)
73+
{
74+
// UpdateColors(platformRadioButton.Resources, _borderColorKeys, radioButton.StrokeColor?.ToPlatform());
75+
76+
// platformRadioButton.RefreshThemeResources();
77+
}
78+
79+
// [MissingMapper]
80+
// static void UpdateColors(ResourceDictionary resource, string[] keys, WBrush? brush)
81+
// {
82+
// if (brush is null)
83+
// resource.RemoveKeys(keys);
84+
// else
85+
// resource.SetValueForAllKey(keys, brush);
86+
// }
87+
88+
[MissingMapper]
89+
public static void UpdateStrokeThickness(this RadioButton nativeRadioButton, IRadioButton radioButton)
90+
{
91+
// nativeRadioButton.BorderThickness = radioButton.StrokeThickness <= 0 ? WinUIHelpers.CreateThickness(3) : WinUIHelpers.CreateThickness(radioButton.StrokeThickness);
92+
}
93+
94+
[MissingMapper]
95+
public static void UpdateCornerRadius(this RadioButton nativeRadioButton, IRadioButton radioButton)
96+
{
97+
// nativeRadioButton.CornerRadius = WinUIHelpers.CreateCornerRadius(radioButton.CornerRadius);
98+
}
99+
}
100+
}

0 commit comments

Comments
 (0)