Skip to content

Commit 69e7b24

Browse files
authored
Merge pull request #106 from MauiGtk/lemon73/implement
Core,Controls(Gtk): Implement RadioButton
2 parents 93d812e + 73e49a2 commit 69e7b24

File tree

4 files changed

+104
-12
lines changed

4 files changed

+104
-12
lines changed

src/Controls/samples/Controls.Sample/Pages/Controls/RadioButtonGalleries/RadioButtonContentGallery.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
</RadioButton>
3434

3535
</On>
36-
<On Platform="Android,Tizen,WPF">
36+
<On Platform="Android,Tizen,WPF,GTK">
3737
<RadioButton Content="Can't use View for Content on this platform, so just plain old text"></RadioButton>
3838
</On>
3939
</OnPlatform>

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 & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,72 @@
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

9-
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) { }
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+
}
19+
20+
protected override void DisconnectHandler(RadioButton platformView)
21+
{
22+
platformView.Toggled -= OnClicked;
23+
}
24+
25+
public static void MapBackground(IRadioButtonHandler handler, IRadioButton radioButton)
26+
{
27+
if (handler.PlatformView is RadioButton rb)
28+
rb.UpdateBackground(radioButton);
29+
}
30+
31+
public static void MapIsChecked(IRadioButtonHandler handler, IRadioButton radioButton)
32+
{
33+
if (handler.PlatformView is RadioButton rb)
34+
rb.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+
}
42+
43+
public static void MapTextColor(IRadioButtonHandler handler, ITextStyle textStyle)
44+
{
45+
handler.PlatformView?.UpdateTextColor(textStyle.TextColor);
46+
}
47+
48+
[MissingMapper]
1349
public static void MapCharacterSpacing(IRadioButtonHandler handler, ITextStyle textStyle) { }
14-
public static void MapFont(IRadioButtonHandler handler, ITextStyle textStyle) { }
50+
51+
public static void MapFont(IRadioButtonHandler handler, ITextStyle textStyle)
52+
{
53+
var fontManager = handler.GetRequiredService<IFontManager>();
54+
handler.PlatformView?.UpdateFont(textStyle, fontManager);
55+
}
56+
57+
[MissingMapper]
1558
public static void MapStrokeColor(IRadioButtonHandler handler, IRadioButton radioButton) { }
59+
60+
[MissingMapper]
1661
public static void MapStrokeThickness(IRadioButtonHandler handler, IRadioButton radioButton) { }
62+
63+
[MissingMapper]
1764
public static void MapCornerRadius(IRadioButtonHandler handler, IRadioButton radioButton) { }
65+
66+
void OnClicked(object? sender, EventArgs e)
67+
{
68+
if (sender is RadioButton platformView && VirtualView != null)
69+
VirtualView.IsChecked = platformView.Active;
70+
}
1871
}
1972
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using Gtk;
3+
using Microsoft.Maui.Graphics;
4+
5+
namespace Microsoft.Maui.Platform
6+
{
7+
public static class RadioButtonExtensions
8+
{
9+
public static void UpdateIsChecked(this RadioButton platformRadioButton, IRadioButton radioButton)
10+
{
11+
platformRadioButton.Active = radioButton.IsChecked;
12+
}
13+
14+
public static void UpdateBackground(this RadioButton platformRadioButton, IRadioButton button)
15+
{
16+
platformRadioButton.UpdateBackground(button);
17+
}
18+
19+
[MissingMapper]
20+
public static void UpdateTextColor(this RadioButton platformRadioButton, ITextStyle button) { }
21+
22+
public static void UpdateContent(this RadioButton platformRadioButton, IRadioButton radioButton)
23+
{
24+
_ = radioButton.Handler?.MauiContext ?? throw new InvalidOperationException($"{nameof(MauiContext)} should have been set by base class.");
25+
26+
if (radioButton is { PresentedContent: IView view })
27+
platformRadioButton.Label = $"{view.ToPlatform(radioButton.Handler.MauiContext)}";
28+
else
29+
platformRadioButton.Label = $"{radioButton.Content}";
30+
}
31+
32+
[MissingMapper]
33+
public static void UpdateStrokeColor(this RadioButton platformRadioButton, IRadioButton radioButton) { }
34+
35+
[MissingMapper]
36+
public static void UpdateStrokeThickness(this RadioButton nativeRadioButton, IRadioButton radioButton) { }
37+
38+
[MissingMapper]
39+
public static void UpdateCornerRadius(this RadioButton nativeRadioButton, IRadioButton radioButton) { }
40+
}
41+
}

0 commit comments

Comments
 (0)